BinDiffHelper
Estensione di Ghidra che utilizza BinDiff sul tuo progetto Ghidra per trovare funzioni corrispondenti e rinominarle automaticamente (BinDiff 6, 7, 8 supportati).
Consulta il manuale di BinDiff per vedere come funziona e come confronta funzioni / blocchi di base. Tuttavia, con questa estensione, BinDiff è automatizzato dall'interno di Ghidra, quindi non devi confrontare i tuoi binari manualmente.
Segnala i bug tramite la funzione issue su github
Changelog
v0.7.1
- Aggiornamento per Ghidra 12
v0.7.0 (versioni di Ghidra >= 11.4)
- Nessuna modifica eccetto la compatibilità con la versione di Ghidra
v0.6.4 (versioni di Ghidra < 11.4)
- Supporto all'esportazione dei namespace
- Risolto il blocco indefinito durante il diffing
v0.6.3
- Consenti l'ordinamento della tabella
v0.6.2
- Risolto un bug per cui il diffing si bloccava all'infinito su BinDiff 8
- Facendo doppio clic su un simbolo, lo si segue sia nel listato del codice primario che in quello secondario
v0.6
- Aggiornata la libreria driver sqlite, ora dovrebbe funzionare su Apple silicon
- Supporto ai diff testuali esterni tra funzioni decompilate (vedi https://github.com/ubfx/BinDiffHelper/pull/24)
- Aggiornamenti dell'interfaccia utente
v0.5
- Supporto a BinDiff 8
- Rilascio per Ghidra 11.1
Modifiche precedenti
### v0.4.3
* Rilascio per Ghidra 11.0
v0.4.2
- Aggiunta la funzione per importare tutte le funzioni (non solo quelle selezionate nella tabella)
- Aggiunta la funzione per attivare/disattivare la casella di controllo per più elementi nella tabella
- Aggiornamento per supportare Ghidra 10.3
v0.4.1
- Aggiornamento per supportare Gradle 7.5 e Ghidra 10.1
v0.4.0
- Supporto a BinDiff 7 e Ghidra 10
v0.3.2
- Risolto un bug per cui il diffing con un file diverso dello stesso progetto non funzionava
- Risolto un bug per cui i file con nomi brevi (< 3 caratteri>) non potevano essere confrontati
v0.3.1
- Risolto un crash durante l'apertura di un file tramite l'opzione "from project"
v0.3
- Colorazione delle funzioni corrispondenti nel listato
- Aggiunta di commenti alle funzioni corrispondenti nel listato con collegamento all'altro binario
- Risolto un bug per cui la libreria protobuf mancava in alcune build
- Nuovo menu di caricamento file
v0.2
- Risolto un bug per cui il file di destinazione dell'importazione doveva essere estratto (checked out).
- Aumentata la dimensione della finestra di selezione del file di progetto
v0.1
- Esegui il BinDiff del binario aperto in Ghidra con un altro binario dello stesso progetto Ghidra, mostra i risultati e importa i nomi delle funzioni
- Apri un file BinDiff, creato con BinDiff 6, da due file .BinExport e importa i nomi delle funzioni corrispondenti in Ghidra
Come installare
Scarica il file .zip dalla release, se è compatibile con la tua versione di Ghidra, altrimenti vedi Come compilare di seguito.
- Apri Ghidra
- Nella Main Window: Vai su File->Install Extensions...
- Clicca il pulsante + in alto a destra e seleziona il file zip di BinDiffHelper
- Chiudi il plugin manager. Riavvia Ghidra per caricare il nuovo plugin
- Vedi Utilizzo di seguito
Altri strumenti consigliati
Senza questi, potrai solo importare file .BinDiff e non esportare e confrontare automaticamente dal tuo progetto Ghidra
Utilizzo
Assicurati che il plugin sia caricato nel Code Explorer aprendo un file in Ghidra e nel Code Explorer vai su File->Configure
Clicca la piccola icona a spina in alto a destra:

e assicurati che la casella di controllo accanto a BinDiffHelperPlugin sia selezionata.

Importare .BinDiff esterni
I file .BinExport corrispondenti devono trovarsi nella stessa cartella.
Apri il file in cui vuoi importare i nomi nel code Browser, poi vai su Window->BinDiffHelper

Usa il pulsante Open from BinDiff o la voce di menu e seleziona il tuo file .BinDiff.

Seleziona tutti i nomi di funzione che vuoi importare e clicca il pulsante Import function names in alto a destra o la voce di menu.
Confrontare file nel progetto Ghidra
Vai su Window->BinDiffHelper, assicurati che non ci siano avvisi riguardanti BinExport o BinDiff, poi clicca il pulsante Open from project.
Seleziona l'altro file dall'albero e clicca OK.

Come compilare
Requisiti:
- Installazione di Ghidra (https://ghidra-sre.org) o compilata dal sorgente
- Un jdk. Potrebbero esserci alcune restrizioni a seconda di come è stata compilata la tua Ghidra e di quali altri plugin stai usando. Consiglio di usare Temurin 21 LTS, poiché attualmente sembra funzionare sia con BinExport che con BinDiffHelper.
- gradle (testato con 7.5, 8.10)
Clona il repository
Clona il repository in modo ricorsivo, poiché dipende da BinExport per la rispettiva definizione del protocol buffer.
git clone --recurse-submodules https://github.com/ubfx/BinDiffHelper.git
Compilalo
Devi impostare la variabile d'ambiente GHIDRA_INSTALL_DIR alla directory di installazione di Ghidra.
Se hai installato JDK diversi, assicurati che la variabile d'ambiente JAVA_HOME punti a quello usato dalla tua installazione di Ghidra.
L'estensione sarà compilata specificamente per quella versione di Ghidra.
Poi vai nella cartella BinDiffHelper nella tua shell ed esegui
gradle
Questo compilerà sia BinExport nel rispettivo sottomodulo che BinDiffHelper nella directory padre. Dovrebbe essere stato creato un file .zip nella directory dist. Usa quel file .zip per installare secondo le istruzioni sopra.
Configurazione per sviluppo / debug
A volte è utile poter eseguire il debug dell'estensione insieme a Ghidra, ecco alcune note a riguardo: