
Trova rapidamente differenze e somiglianze nel codice disassemblato.

Copyright 2011-2026 Google LLC.
Questo repository contiene il codice sorgente di BinDiff. BinDiff è uno strumento open-source di confronto per file binari, che consente di individuare rapidamente differenze e somiglianze nel codice disassemblato.
BinDiff è uno strumento open-source di confronto per file binari che assiste ricercatori di vulnerabilità e ingegneri nell'individuare rapidamente differenze e somiglianze nel codice disassemblato.
Con BinDiff, i ricercatori possono identificare e isolare le correzioni per le vulnerabilità nelle patch fornite dai vendor. Può anche essere utilizzato per trasferire simboli e commenti tra disassemblazioni di più versioni dello stesso binario. Questo rende più semplice monitorare le modifiche nel tempo e consente alle organizzazioni di conservare i risultati delle analisi, favorendo il trasferimento di conoscenze tra gli analisti di binari.
Se vuoi semplicemente iniziare a usare BinDiff, scarica i pacchetti di installazione precompilati dalla pagina delle release.
Nota: BinDiff dipende da un disassemblatore separato. Di serie, include il supporto per IDA Pro, Binary Ninja e Ghidra. La pagina dei disassemblatori elenca le configurazioni supportate.
Una parte del manuale esistente è disponibile nella directory docs/.
BinDiff contiene i seguenti componenti:
cmake - File di build CMake che dichiarano le dipendenze esternefixtures - Una raccolta di file di test per esercitare il motore principale di BinDiffida - Integrazione con il disassemblatore IDA Projava - Codice sorgente Java. Contiene l'interfaccia utente di diff visivo di BinDiff e la relativa libreria di utilità.match - Algoritmi di corrispondenza per il motore principale di BinDiffpackaging - Sorgenti dei pacchetti per i pacchetti di installazionetools - Eseguibili di supporto forniti con il prodottoLe istruzioni seguenti dovrebbero essere sufficienti per compilare sia il codice nativo sia i componenti basati su Java.
Istruzioni di compilazione più dettagliate verranno aggiunte in seguito. Ciò include Dockerfile già pronti e script per la creazione dei pacchetti di installazione.
BinDiff usa CMake per generare i propri file di build per i componenti costituiti da codice C++ nativo.
Sono richieste le seguenti dipendenze di build:
I passaggi generali di build sono gli stessi su Windows, Linux e macOS. Di seguito vengono mostrati i comandi per Linux.
Quindi, configura la directory di build e genera i file di build:
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
Infine, avvia la build effettiva. I binari verranno inseriti in build/:
cmake --build build --config Release
(cd build; ctest --build-config Release --output-on-failure)
cmake --install build --config Release
Per compilare senza IDA, modifica semplicemente il passaggio di configurazione precedente in
cmake -S . -B build/out -G Ninja -DCMAKE_BUILD_TYPE=Release \
-DBINEXPORT_ENABLE_IDAPRO=OFF
La creazione della GUI basata su Java richiede la libreria commerciale di terze parti per la visualizzazione di grafi yFiles per la visualizzazione e il layout dei grafi. Questa libreria è estremamente potente e non facilmente sostituibile.
Per la build, BinDiff usa Gradle 6.x e Java 11 LTS. Fai riferimento alla sua guida all'installazione per le istruzioni su come installarlo.
Supponendo che tu sia un possessore di licenza di yFiles, imposta la variabile d'ambiente YFILES_DIR su una directory che contiene i file yFiles y.jar e ysvg.jar.
Nota: BinDiff usa ancora il ramo 2.x più vecchio di yFiles.
Quindi invoca Gradle per scaricare le dipendenze esterne e compilare:
Windows:
set YFILES_DIR=<path\to\yfiles_2.17>
cd java
gradle shadowJar
Linux o macOS:
export YFILES_DIR=<path/to/yfiles_2.17>
cd java
gradle shadowJar
Successivamente, la directory ui/build/libs nella sotto-directory java dovrebbe contenere l'artefatto autonomo bindiff-ui-all.jar, che può essere eseguito usando il comando standard java -jar.
Gli articoli originali che delineano le idee generali alla base di BinDiff:
Altri strumenti nello stesso ambito:
Progetti che usano BinDiff:
BinDiff è concesso in licenza secondo i termini della licenza Apache. Vedi LICENSE per maggiori informazioni.
Se vuoi contribuire, leggi CONTRIBUTING.md prima di inviare pull request. Puoi anche segnalare bug o richiedere funzionalità.