Urheberrecht 2011–2024 Google LLC.
Dieses Repository enthält den BinDiff-Quellcode. BinDiff ist ein Open-Source-Vergleichstool für Binärdateien, um schnell Unterschiede und Ähnlichkeiten in disassembliertem Code zu finden.
BinDiff ist ein Open-Source-Vergleichstool für Binärdateien, das Schwachstellenforschern und -ingenieuren dabei hilft, schnell Unterschiede und Ähnlichkeiten in disassembliertem Code zu finden.
Mit BinDiff können Forscher Korrekturen für Schwachstellen in vom Anbieter bereitgestellten Patches identifizieren und isolieren. Es kann auch zum Portieren von Symbolen und Kommentaren zwischen Disassemblierungen mehrerer Versionen derselben Binärdatei verwendet werden. Dies erleichtert die Verfolgung von Änderungen im Laufe der Zeit, ermöglicht Organisationen die Aufbewahrung von Analyseergebnissen und ermöglicht den Wissenstransfer zwischen binären Analysten.
Wenn Sie gerade erst mit der Verwendung von BinDiff beginnen möchten, laden Sie vorgefertigte Installationspakete von der Release-Seite herunter.
Hinweis: BinDiff basiert auf einem separaten Disassembler. Ab Werk wird es mit Unterstützung für IDA Pro, Binary Ninja und Ghidra ausgeliefert. Auf der Disassembler-Seite werden die unterstützten Konfigurationen aufgelistet.
Eine Teilmenge des vorhandenen Handbuchs ist im Verzeichnis docs/
verfügbar.
BinDiff enthält die folgenden Komponenten:
cmake
– CMake-Build-Dateien, die externe Abhängigkeiten deklarierenfixtures
– Eine Sammlung von Testdateien zum Trainieren der BinDiff-Kern-Engineida
– Integration mit dem IDA Pro-Disassemblerjava
– Java-Quellcode. Diese enthält die visuelle Diff-Benutzeroberfläche von BinDiff und die entsprechende Dienstprogrammbibliothek.match
– Matching-Algorithmen für die BinDiff-Kern-Enginepackaging
– Paketquellen für die Installationspaketetools
– ausführbare Hilfsdateien, die mit dem Produkt geliefert werden Die folgende Anleitung sollte ausreichen, um sowohl den nativen Code als auch die Java-basierten Komponenten zu erstellen.
Detailliertere Bauanweisungen werden zu einem späteren Zeitpunkt hinzugefügt. Dazu gehören vorgefertigte Dockerfile
und Skripte zum Erstellen der Installationspakete.
BinDiff verwendet CMake, um seine Build-Dateien für die Komponenten zu generieren, die aus nativem C++-Code bestehen.
Die folgenden Build-Abhängigkeiten sind erforderlich:
Die folgenden Build-Abhängigkeiten sind optional:
deps/idasdk
entpacken)Die allgemeinen Build-Schritte sind unter Windows, Linux und macOS gleich. Im Folgenden sind die Befehle für Linux aufgeführt.
Laden Sie Abhängigkeiten herunter, die nicht automatisch heruntergeladen werden:
mkdir -p build/out
git clone https://github.com/google/binexport build/binexport
unzip -q < path/to/idasdk_pro80.zip > -d build/idasdk
Als nächstes konfigurieren Sie das Build-Verzeichnis und generieren Build-Dateien:
cmake -S . -B build/out -G Ninja
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX=build/out
-DBINDIFF_BINEXPORT_DIR=build/binexport
" -DIdaSdk_ROOT_DIR= ${PWD} build/idasdk "
Rufen Sie abschließend den eigentlichen Build auf. Binärdateien werden in build/out/bindiff-prefix
platziert:
cmake --build build/out --config Release
(cd build/out ; ctest --build-config Release --output-on-failure)
cmake --install build/out --config Release
Um ohne IDA zu erstellen, ändern Sie einfach den obigen Konfigurationsschritt in
cmake -S . -B build/out -G Ninja
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX=build/out
-DBINDIFF_BINEXPORT_DIR=build/binexport
-DBINEXPORT_ENABLE_IDAPRO=OFF
Für die Erstellung der Java-basierten GUI ist die kommerzielle Diagrammvisualisierungsbibliothek yFiles eines Drittanbieters für die Diagrammanzeige und das Diagrammlayout erforderlich. Diese Bibliothek ist immens leistungsfähig und nicht leicht austauschbar.
Zum Erstellen verwendet BinDiff Gradle 6.x und Java 11 LTS. Anweisungen zur Installation finden Sie in der Installationsanleitung.
Angenommen, Sie sind Inhaber einer yFiles-Lizenz, legen Sie die Umgebungsvariable YFILES_DIR
auf ein Verzeichnis fest, das die yFiles y.jar
und ysvg.jar
enthält.
Hinweis: BinDiff verwendet weiterhin den älteren 2.x-Zweig von yFiles.
Rufen Sie dann Gradle auf, um externe Abhängigkeiten herunterzuladen und zu erstellen:
Windows:
set YFILES_DIR=<pathtoyfiles_2.17>
cd java
gradle shadowJar
Linux oder macOS:
export YFILES_DIR=<path/to/yfiles_2.17>
cd java
gradle shadowJar
Anschließend sollte das Verzeichnis ui/build/libs
im java
-Unterverzeichnis das eigenständige Artefakt bindiff-ui-all.jar
enthalten, das mit dem Standardbefehl java -jar
ausgeführt werden kann.
Die Originalpapiere, in denen die allgemeinen Ideen hinter BinDiff dargelegt werden:
Andere Tools im gleichen Problembereich:
Projekte mit BinDiff:
BinDiff ist unter den Bedingungen der Apache-Lizenz lizenziert. Weitere Informationen finden Sie unter LIZENZ.
Wenn Sie einen Beitrag leisten möchten, lesen Sie bitte CONTRIBUTING.md, bevor Sie Pull-Anfragen senden. Sie können auch Fehler melden oder Funktionsanfragen stellen.