
B2R2 ist ein vollständig verwaltetes Binäranalyse-Framework, geschrieben in F#. Es bietet eine umfangreiche Sammlung von Algorithmen, Funktionen und Werkzeugen für Reverse Engineering, Programmanalyse und Inspektion auf Binärebene.

B2R2 ist ein vollständig verwaltetes Binary-Analyse-Framework, geschrieben in F#. Es bietet eine umfangreiche Sammlung von Algorithmen, Funktionen und Werkzeugen für Reverse Engineering, Programm-Analyse und binäre Inspektion.
Der Name B2R2 ist von R2-D2 inspiriert, dem ikonischen Roboter aus Star Wars. Ursprünglich als B2-R2 benannt, nahm das Projekt später die bindestrichfreie Form B2R2 an, da .NET-Bezeichner und Namespaces keine Bindestriche erlauben. Der Name spiegelt den Zweck des Projekts wider: "B" und "2" deuten auf binäre und Zwei-Zustands-Berechnung hin, während "R" für Reversing steht. Kurz gesagt, B2R2 ist für binäres Reversing entwickelt.
B2R2 ist analysefreundlich: Es ist in F# geschrieben, einer Sprache, die dank Funktionen wie Pattern Matching, algebraischen Datentypen und ausdrucksstarken funktionalen Abstraktionen besonders gut für den Bau von Programmanalysatoren geeignet ist.
B2R2 ist schnell: Seine zentrale Binary-Analyse-Engine ist auf Effizienz ausgelegt und in einem funktionalersten Stil geschrieben. Dadurch eignet sie sich hervorragend für reinen Parallelismus bei gängigen Analyseaufgaben wie Instruction Lifting und CFG-Wiederherstellung.
B2R2 ist einfach zu bedienen: Als vollständig verwaltete Bibliothek vermeidet es komplizierte native Abhängigkeiten. Installiere das .NET SDK, und schon kann es losgehen. Native IntelliSense-Unterstützung macht die APIs zudem leichter erkundbar.
B2R2 ist betriebssystemunabhängig: Es funktioniert unter Linux, macOS und Windows sowie auf jeder anderen von .NET unterstützten Plattform.
B2R2 ist interoperabel: Es ist nicht an eine einzelne Programmiersprache gebunden. Grundsätzlich können die B2R2-APIs aus jeder CLI-unterstützten Sprache verwendet werden.
B2R2 unterstützt Befehlsparsing, binäre Disassemblierung, Assemblierung, Kontrollfluss-Wiederherstellung und andere grundlegende Bausteine für die Binary-Analyse. Es enthält auch mehrere benutzerorientierte Befehlszeilenwerkzeuge, die mit readelf und objdump vergleichbar sind, bleibt dabei aber plattformunabhängig. B2R2 unterstützt derzeit vier Binärdateiformate: ELF, PE, Mach-O und WebAssembly.
Die folgende Tabelle fasst die derzeit von B2R2 unterstützten Funktionen zusammen. Einige Bereiche befinden sich noch in der Entwicklung, und Beiträge sind willkommen. Bevor du einen Pull-Request eröffnest, lies bitte unsere Beitragsrichtlinie.
B2R2 hält seinen Abhängigkeits-Fußabdruck bewusst klein, um Builds einfach zu halten und den Kern auf effiziente Algorithmen und Datenstrukturen für die Binary-Analyse zu fokussieren. Die Kernbibliothek hat keine externen Abhängigkeiten, und die meisten externen Bibliotheken sind optional und werden nur von bestimmten Komponenten oder Werkzeugen verwendet. Nachfolgend die Liste der externen Bibliotheken, die vom Projekt verwendet werden.
Unsere Dokumentation wird mit fsdocs erstellt und ist verfügbar unter https://b2r2.org/B2R2/.
Lass uns versuchen, die B2R2-APIs zu verwenden.
Erstelle zunächst ein leeres Verzeichnis namens DIRNAME:
mkdir DIRNAME
cd DIRNAME
Erstelle dann ein leeres Konsolenprojekt mit dem dotnet-Befehlszeilenwerkzeug:
$ dotnet new console -lang F#
Füge das NuGet-Paket B2R2.FrontEnd.API zum Projekt hinzu:
$ dotnet add package B2R2.FrontEnd.API
Ändere die Datei Program.fs mit deinem Lieblingseditor wie folgt:
open B2R2
open B2R2.FrontEnd
[<EntryPoint>]
let main argv =
let isa = ISA "amd64"
let bytes = [| 0x65uy; 0xffuy; 0x15uy; 0x10uy; 0x00uy; 0x00uy; 0x00uy |]
let hdl = BinHandle(bytes, isa)
let lifter = hdl.NewLiftingUnit()
let ins = lifter.ParseInstruction 0UL // parse the instruction at offset 0
lifter.LiftInstruction ins |> printfn "%A"
0
Führe es durch Eingabe von dotnet run aus. Du solltest angehobene IR-Anweisungen in deiner Konsole sehen. Das war's! Du hast gerade mit nur wenigen Zeilen F#-Code eine Intel-Anweisung geliftet.
Das Bauen von B2R2 ist unkompliziert. Installiere das .NET 10 SDK oder höher, und du kannst direkt aus dem Quellverzeichnis bauen.
Um B2R2 im Release-Modus zu bauen, führe dotnet build -c Release aus.
Um B2R2 im Debug-Modus zu bauen, führe dotnet build aus.
Weitere Informationen zur Einrichtung einer F#-Entwicklungsumgebung findest du auf der offiziellen F#-Website: http://fsharp.org/.
B2R2 wurde von Mitgliedern des SoftSec Lab an der KAIST in Zusammenarbeit mit dem Cyber Security Research Center (CSRC) an der KAIST entwickelt. Siehe AUTHORS.md für die vollständige Liste der Mitwirkenden.
Wenn du B2R2 in deiner Forschung verwendest, erwäge bitte, unser Paper zu 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
}
Es gibt ein Online-Tutorial für B2R2, das die Grundlagen der Verwendung von B2R2 abdeckt und praktische Beispiele bietet. Schau es dir unter folgendem Link an: https://b2r2.org/tutorial-icst2026/.
Nachfolgend sind Paper aufgeführt, die B2R2 verwenden oder darauf aufbauen. Wenn deine Arbeit aufgenommen werden soll, erstelle bitte einen Pull-Request.
| CPU | Dokumentation | Befehlsparsing | Disassemblierung | Lifting | CFG-Wiederherstellung | Assemblierung |
|---|---|---|---|---|---|---|
| x86 | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :full_moon: |
| x86-64 | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :full_moon: |
| ARMv7 | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| ARMv8 (AArch64) | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| MIPS32 | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| MIPS64 | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| EVM | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :new_moon: |
| TMS320C6000 | :full_moon: | :full_moon: | :full_moon: | :new_moon: | :first_quarter_moon: | :new_moon: |
| AVR | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| PA-RISC | :full_moon: | :full_moon: | :full_moon: | :new_moon: | :first_quarter_moon: | :new_moon: |
| PPC32 | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| SPARC | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| SH4 | :full_moon: | :full_moon: | :full_moon: | :new_moon: | :first_quarter_moon: | :new_moon: |
| RISC-V | :full_moon: | :full_moon: | :full_moon: | :full_moon: | :first_quarter_moon: | :new_moon: |
| S390 | :full_moon: | :full_moon: | :full_moon: | :new_moon: | :first_quarter_moon: | :new_moon: |