BinDiffHelper
Ghidra-Erweiterung, die BinDiff auf Ihr Ghidra-Projekt anwendet, um übereinstimmende Funktionen zu finden und sie automatisch umzubenennen (BinDiff 6, 7, 8 unterstützt).
Lesen Sie das BinDiff-Handbuch, um zu erfahren, wie es funktioniert und wie es Funktionen / Basisblöcke abgleicht. Mit dieser Erweiterung wird BinDiff jedoch automatisch aus Ghidra heraus ausgeführt, sodass Sie Ihre Binärdateien nicht selbst diffen müssen.
Bitte melden Sie Fehler über die Issue-Funktion auf GitHub
Changelog
v0.7.1
- Aktualisierung für Ghidra 12
v0.7.0 (Ghidra-Versionen >= 11.4)
- Keine Änderungen außer der Ghidra-Versionskompatibilität
v0.6.4 (Ghidra-Versionen < 11.4)
- Unterstützung für den Export von Namespaces
- Behebung eines endlosen Hängens beim Diffing
v0.6.3
- Tabellensortierung ermöglicht
v0.6.2
- Behebung eines Fehlers, bei dem das Diffing mit BinDiff 8 endlos hängt
- Beim Doppelklick auf ein Symbol wird es sowohl in der primären als auch in der sekundären Codeauflistung verfolgt
v0.6
- Aktualisierung der SQLite-Treiberbibliothek, sollte nun auf Apple Silicon laufen
- Unterstützung externer textueller Diffs zwischen dekompilierten Funktionen (siehe https://github.com/ubfx/BinDiffHelper/pull/24)
- UI-Aktualisierungen
v0.5
- Unterstützung für BinDiff 8
- Release für Ghidra 11.1
Ältere Änderungen
### v0.4.3
* Release für Ghidra 11.0
v0.4.2
- Funktion zum Importieren aller Funktionen hinzugefügt (nicht nur der in der Tabelle markierten)
- Funktion zum Umschalten der Checkbox für mehrere Elemente in der Tabelle hinzugefügt
- Aktualisierung zur Unterstützung von Ghidra 10.3
v0.4.1
- Aktualisierung zur Unterstützung von Gradle 7.5 und Ghidra 10.1
v0.4.0
- Unterstützung für BinDiff 7 und Ghidra 10
v0.3.2
- Behebung eines Fehlers, bei dem das Diffing mit einer anderen Datei aus demselben Projekt nicht funktionierte
- Behebung eines Fehlers, bei dem Dateien mit kurzen Namen (< 3 Zeichen>) nicht gediffed werden konnten
v0.3.1
- Behebung eines Absturzes beim Öffnen einer Datei über die Option "from project"
v0.3
- Einfärbung übereinstimmender Funktionen in der Auflistung
- Hinzufügen von Kommentaren zu übereinstimmenden Funktionen in der Auflistung mit Verweis auf die andere Binärdatei
- Behebung eines Fehlers, bei dem die Protobuf-Bibliothek in einigen Builds fehlte
- Neues Dateilade-Menü
v0.2
- Behebung eines Fehlers, bei dem die zu importierende Datei ausgecheckt werden musste.
- Vergrößerung des Dialogfensters zur Auswahl von Projektdateien
v0.1
- BinDiff der in Ghidra geöffneten Binärdatei mit einer anderen Binärdatei aus demselben Ghidra-Projekt, Anzeige der Ergebnisse und Import der Funktionsnamen
- Öffnen einer mit BinDiff 6 erstellten BinDiff-Datei aus zwei .BinExport-Dateien und Import der übereinstimmenden Funktionsnamen in Ghidra
Installation
Laden Sie entweder die .zip-Datei aus dem Release herunter, sofern sie mit Ihrer Ghidra-Version kompatibel ist, andernfalls siehe How to build unten.
- Öffnen Sie Ghidra
- Im Hauptfenster: Gehen Sie zu File->Install Extensions...
- Klicken Sie auf die +-Schaltfläche oben rechts und wählen Sie die BinDiffHelper-Zip-Datei aus
- Schließen Sie den Plugin-Manager. Starten Sie Ghidra neu, um das neue Plugin zu laden
- Siehe Usage unten
Ohne diese können Sie nur .BinDiff-Dateien importieren und nicht automatisch aus Ihrem Ghidra-Projekt exportieren und diffen
Verwendung
Stellen Sie sicher, dass das Plugin im Code Explorer geladen ist, indem Sie eine Datei in Ghidra öffnen und im Code Explorer zu File->Configure gehen
Klicken Sie auf das kleine Stecker-Symbol oben rechts:

und stellen Sie sicher, dass das Kontrollkästchen neben BinDiffHelperPlugin aktiviert ist.

Externe .BinDiff importieren
Die entsprechenden .BinExport-Dateien müssen sich im selben Ordner befinden.
Öffnen Sie die Datei, in die Sie Namen importieren möchten, im Code Browser und gehen Sie dann zu Window->BinDiffHelper

Verwenden Sie die Schaltfläche Open from BinDiff oder den Menüeintrag und wählen Sie Ihre .BinDiff-Datei aus.

Wählen Sie alle Funktionsnamen aus, die Sie importieren möchten, und klicken Sie auf die Schaltfläche Import function names oben rechts oder den Menüeintrag.
Vergleich zwischen Dateien im Ghidra-Projekt
Gehen Sie zu Window->BinDiffHelper, stellen Sie sicher, dass keine Warnungen bezüglich BinExport oder BinDiff vorliegen, und klicken Sie dann auf die Schaltfläche Open from project.
Wählen Sie die andere Datei aus dem Baum aus und klicken Sie auf OK.

How to build
Voraussetzungen:
- Ghidra-Installation (https://ghidra-sre.org) oder aus dem Quellcode kompiliert
- Ein JDK. Es kann bestimmte Einschränkungen geben, je nachdem, wie Ihr Ghidra erstellt wurde und welche anderen Plugins Sie verwenden. Ich empfehle Temurin 21 LTS, da dies derzeit sowohl mit BinExport als auch mit BinDiffHelper zu funktionieren scheint.
- gradle (getestet mit 7.5, 8.10)
Repository klonen
Klonen Sie das Repository rekursiv, da es für die jeweilige Protocol-Buffer-Definition von BinExport abhängt.
git clone --recurse-submodules https://github.com/ubfx/BinDiffHelper.git
Build
Sie müssen die Umgebungsvariable GHIDRA_INSTALL_DIR auf das Ghidra-Installationsverzeichnis setzen.
Wenn Sie verschiedene JDKs installiert haben, stellen Sie sicher, dass die Umgebungsvariable JAVA_HOME auf dasjenige zeigt, das Ihre Ghidra-Installation verwendet.
Die Erweiterung wird speziell für diese Ghidra-Version erstellt.
Gehen Sie dann in Ihrer Shell zum BinDiffHelper-Ordner und führen Sie aus
gradle
Dies erstellt sowohl BinExport im jeweiligen Submodul als auch BinDiffHelper im übergeordneten Verzeichnis. Im dist-Verzeichnis sollte eine .zip-Datei erstellt worden sein. Verwenden Sie diese .zip-Datei zur Installation gemäß den obigen Anweisungen.
Entwicklung / Debugging-Setup
Manchmal ist es nützlich, die Erweiterung zusammen mit Ghidra debuggen zu können. Hier sind einige Hinweise dazu: