B2R2 est une collection d'algorithmes, de fonctions et d'outils utiles pour l'analyse binaire , écrite uniquement en F # (dans .NET Lingo, il est un code purement géré). B2R2 a été nommé d'après R2-D2, un célèbre robot fictif est apparu dans Star Wars. En fait, le nom original de B2R2 était B2-R2 , mais nous avons décidé d'utiliser le nom B2R2 à la place, car .NET n'autorise pas les caractères Dash (-) dans les identifiants (ou les espaces de noms). Le nom représente essentiellement "binaire" ou "deux": "binaire" lui-même signifie de toute façon "deux". "B" et "2" signifie "binaire", et "r" indique l'inversion .
B2R2 est convivial : il est écrit en F #, qui fournit tous les goodies syntaxiques pour les analyseurs de programmes d'écriture, tels que l'appariement des modèles, les types de données algébriques, etc.
B2R2 est rapide : il dispose d'un moteur frontal rapide et efficace pour l'analyse binaire, qui est écrit de manière importante. Par conséquent, il soutient naturellement le parallélisme pur pour le démontage binaire, le levage et l'optimisation IR.
B2R2 est facile à jouer avec: il n'y a absolument pas d'enfer de dépendance pour B2R2 car c'est une bibliothèque entièrement gérée. Tout ce que vous avez à faire est d'installer .NET SDK, et vous êtes prêt à partir! Le support indigène Intellisense est un autre avantage!
B2R2 est indépendant du système d'exploitation : il fonctionne sur Linux, Mac, Windows, etc. Tant que le Core .NET le prend en charge.
B2R2 est interopérable : il n'est pas lié à une langue spécifique. Théoriquement, vous pouvez utiliser des API B2R2 avec toutes les langues prises en charge CLI.
B2R2 prend en charge l'analyse d'instructions, le démontage binaire, l'assemblage, la récupération de flux de contrôle et bien d'autres. B2R2 est également livré avec plusieurs outils de ligne de commande au niveau de l'utilisateur qui sont similaires à la lecture et à l'OBJDump, bien que nos outils soient autochtones. B2R2 prend actuellement en charge quatre formats de fichiers binaires: ELF, PE, Mach-O et WebAssembly.
Vous trouverez ci-dessous une liste de fonctionnalités que nous prenons actuellement en charge. Certains d'entre eux sont en cours, mais nous attendons avec impatience vos contributions! N'hésitez pas à rédiger un PR (demande de traction) tout en vous assurant que vous avez lu nos directives de contribution.
| Fonctionnalité | x86 | x86-64 | Armv7 | Armv8 | MIPS32 | MIPS64 | EVM | TMS320C600 | AVR | PPP | Natte | Sh4 | RISC-V |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Analyse d'instructions | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Démontage | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Levage | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Récupération CFG | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Flux de données | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Émulation d'instructions | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Assemblée | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Repeindre | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Compilation ROP | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
B2R2 s'appuie sur un petit ensemble de bibliothèques .NET externes, et notre principe de conception est d'utiliser un nombre minimum de bibliothèques. Vous trouverez ci-dessous une liste de bibliothèques que nous expliquons.
Nous utilisons actuellement FSDOCS pour générer notre documentation: https://b2r2.org/apidoc/.
Essayons d'utiliser des API B2R2.
Nous créons d'abord un répertoire vide DIRNAME :
mkdir DIRNAME
cd DIRNAME
Nous créons ensuite un projet de console vide avec une ligne de commande dotnet :
$ dotnet new console -lang F#
Ajoutez notre package NUGET B2R2.FONDEND au projet:
$ dotnet add package B2R2.FrontEnd.BinInterface
Modifiez le fichier Program.fs avec votre éditeur préféré comme suit:
open B2R2
open B2R2. FrontEnd . BinInterface
[<EntryPoint>]
let main argv =
let isa = ISA.OfString " amd64 "
let bytes = [| 0x65 uy ; 0xff uy ; 0x15 uy ; 0x10 uy ; 0x00 uy ; 0x00 uy ; 0x00 uy |]
let hdl = BinHandle.Init ( isa , bytes )
let ins = BinHandle.ParseInstr ( hdl , 0 UL )
ins.Translate hdl.TranslationContext |> printfn " %A "
0 Nous l'exécutons ensuite en tapant: dotnet run . Vous pourrez voir les instructions IR levées de votre console. C'est ça! Vous venez de soulever une instruction Intel avec seulement quelques lignes de code F #!
La construction de B2R2 est amusante et facile. Tout ce que vous avez à faire est d'installer .NET 8 SDK ou plus. Oui, c'est tout!
Pour construire B2R2 en mode de libération, tapez la libération make release ou dotnet build -c Release dans la racine source.
Pour construire B2R2 en mode débogage, tapez make ou dotnet build dans la racine source.
Pour vos informations, veuillez visiter le site Web officiel de F # pour obtenir plus de conseils sur l'installation de l'environnement de développement pour F #: http://fsharp.org/.
Membres du laboratoire Softsec. @ Kaist a développé B2R2 en collaboration avec le Cyber Security Research Center (CSRC) chez Kaist. Voir les auteurs pour la liste complète.
Si vous prévoyez d'utiliser B2R2 dans vos propres recherches. Veuillez envisager de citer notre papier:
@INPROCEEDINGS { jung:bar:2019 ,
author = { Minkyu Jung and Soomin Kim and HyungSeok Han and Jaeseung Choi and Sang Kil Cha } ,
title = { {B2R2}: Building an Efficient Front-End for Binary Analysis } ,
booktitle = { Proceedings of the NDSS Workshop on Binary Analysis Research } ,
year = 2019
}Voici des articles utilisant notre travail. Veuillez créer un PR si vous souhaitez ajouter le vôtre.