B2R2 ist eine Sammlung nützlicher Algorithmen, Funktionen und Tools für die binäre Analyse , die nur in F# geschrieben wurde (in .Net Lingo, es wird rein verwalteter Code). B2R2 wurde nach R2-D2 benannt, ein berühmter fiktiver Roboter erschien in den Star Wars. Tatsächlich war der ursprüngliche Name von B2R2 B2-R2 , aber wir haben uns entschlossen, den Namen B2R2 stattdessen zu verwenden, da .NET keine DASH-Zeichen (-) in Kennung (oder Namespaces) zulässt. Der Name repräsentiert im Wesentlichen "Binär" oder "zwei": "Binär" selbst bedeutet sowieso "zwei" Zustände. "B" und "2" bedeuten "Binär" und "R" zeigt die Umkehrung an.
B2R2 ist eine analysefreundliche : Es ist in F#geschrieben, die alle syntaktischen Leckereien für das Schreiben von Programmanalysatoren wie Muster-Matching, algebraische Datentypen usw. liefert.
B2R2 ist schnell : Es hat eine schnelle und effiziente Front-End-Motor für binäre Analyse, die auf funktionale Weise geschrieben ist. Daher unterstützt es natürlich die reine Parallelität für binäre Disassemblierung, Heben und IR -Optimierung.
B2R2 ist leicht zu spielen: Es gibt absolut keine Abhängigkeitshölle für B2R2, da es sich um eine voll verwaltete Bibliothek handelt. Alles, was Sie tun müssen, ist, .NET SDK zu installieren, und Sie sind bereit zu gehen! Unterstützung für einheimische Intellisense ist ein weiteres Plus!
B2R2 ist OS-unabhängig : Es funktioniert unter Linux, Mac, Windows usw., solange .NET Core es unterstützt.
B2R2 ist interoperabel : Es ist nicht an eine bestimmte Sprache gebunden. Theoretisch können Sie B2R2 -APIs mit allen CLI -unterstützten Sprachen verwenden.
B2R2 unterstützt die Analyse von Anweisungen, binäre Demontage, Montage, Kontrollfluswiederherstellung und vieles mehr. B2R2 verfügt außerdem über mehrere Befehlszeilen-Tools auf Benutzerebene, die Readelf und Objdump ähneln, obwohl unsere Tools plattformunabhängig sind. B2R2 unterstützt derzeit vier Binärdateiformate: ELF, PE, Mach-O und WebAssembly.
Im Folgenden finden Sie eine Liste der Funktionen, die wir derzeit unterstützen. Einige von ihnen sind in Arbeit, aber wir freuen uns auf Ihre Beiträge! Schreiben Sie eine PR (Pull -Anfrage) und stellen Sie sicher, dass Sie unsere Beitragsrichtlinie gelesen haben.
| Besonderheit | x86 | x86-64 | ARMV7 | ARMV8 | MIPS32 | MIPS64 | Evm | TMS320C600 | Avr | PPC | Sparc | SH4 | RISC-V |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Anweisung analysieren | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Demontage | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Heben | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| CFG -Wiederherstellung | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Datenfluss | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Anweisung Emulation | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Montage | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| Wiederholung | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
| ROP -Zusammenstellung | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
B2R2 stützt sich auf einen winzigen Satz externer .NET -Bibliotheken, und unser Designprinzip ist die Verwendung einer Mindestanzahl von Bibliotheken. Unten finden Sie eine Liste von Bibliotheken, die wir nutzen.
Wir verwenden derzeit FSDOCs, um unsere Dokumentation zu generieren: https://b2r2.org/apidoc/.
Versuchen wir, B2R2 -APIs zu verwenden.
Zuerst erstellen wir ein leeres Verzeichnis DIRNAME :
mkdir DIRNAME
cd DIRNAME
Anschließend erstellen wir ein leeres Konsolenprojekt mit dotnet -Befehlszeile:
$ dotnet new console -lang F#
Fügen Sie unser Nuget -Paket B2R2.Frontend zum Projekt hinzu:
$ dotnet add package B2R2.FrontEnd.BinInterface
Ändern Sie die Datei Program.fs wie folgt mit Ihrem bevorzugten Editor:
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 Wir führen es dann einfach durch Eingabe: dotnet run . Sie können aufgehobene IR -Anweisungen aus Ihrer Konsole sehen. Das war's! Sie haben gerade eine Intel -Anweisung mit nur wenigen Zeilen F# Code gehoben!
Der Bau B2R2 macht Spaß und ist einfach. Alles, was Sie tun müssen, ist, .NET 8 SDK oder höher zu installieren. Ja, das war's!
Um B2R2 im Release -Modus zu erstellen, make release oder dotnet build -c Release im Quellstamm.
So erstellen Sie B2R2 im Debug -Modus, Type make oder dotnet build im Quellwurzel.
Informationen zu Ihren Informationen finden Sie auf der offiziellen Website von F#, um weitere Tipps zur Installation der Entwicklungsumgebung für F#: http://fsharp.org/ zu erhalten.
Mitglieder im Softsec Lab. @ Kaist entwickelte B2R2 in Zusammenarbeit mit dem Cyber Security Research Center (CSRC) bei Kaist. Die vollständigen Liste finden Sie Autoren.
Wenn Sie vorhaben, B2R2 in Ihrer eigenen Forschung zu verwenden. Bitte überlegen Sie, ob Sie unsere Zeitung zitieren:
@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
}Hier sind Papiere, die unsere Arbeit verwenden. Bitte erstellen Sie eine PR, wenn Sie Ihre hinzufügen möchten.