Copyright 2011-2024 Google LLC.
Ce référentiel contient le code source BinDiff. BinDiff est un outil de comparaison open source pour les fichiers binaires permettant de trouver rapidement les différences et les similitudes dans le code désassemblé.
BinDiff est un outil de comparaison open source pour les fichiers binaires, qui aide les chercheurs et ingénieurs en vulnérabilités à trouver rapidement les différences et les similitudes dans le code désassemblé.
Avec BinDiff, les chercheurs peuvent identifier et isoler les correctifs de vulnérabilités dans les correctifs fournis par les fournisseurs. Il peut également être utilisé pour porter des symboles et des commentaires entre les désassemblages de plusieurs versions du même binaire. Cela facilite le suivi des modifications au fil du temps, permet aux organisations de conserver les résultats d'analyse et permet le transfert de connaissances entre les analystes binaires.
Si vous souhaitez simplement commencer à utiliser BinDiff, téléchargez les packages d'installation prédéfinis à partir de la page des versions.
Remarque : BinDiff s'appuie sur un désassembleur distinct. Prêt à l'emploi, il est livré avec la prise en charge d'IDA Pro, Binary Ninja et Ghidra. La page des désassembleurs répertorie les configurations prises en charge.
Un sous-ensemble du manuel existant est disponible dans le répertoire docs/
.
BinDiff contient les composants suivants :
cmake
- Fichiers de construction CMake déclarant des dépendances externesfixtures
- Une collection de fichiers de test pour exercer le moteur principal BinDiffida
- Intégration avec le désassembleur IDA Projava
- Code source Java. Celui-ci contient l'interface utilisateur de comparaison visuelle BinDiff et sa bibliothèque d'utilitaires correspondante.match
- Algorithmes de correspondance pour le moteur principal BinDiffpackaging
- Sources des packages pour les packages d'installationtools
- Exécutables d'assistance fournis avec le produit Les instructions ci-dessous devraient suffire pour créer à la fois le code natif et les composants basés sur Java.
Des instructions de construction plus détaillées seront ajoutées ultérieurement. Cela inclut des Dockerfile
et des scripts prêts à l'emploi pour créer les packages d'installation.
BinDiff utilise CMake pour générer ses fichiers de construction pour les composants constitués de code C++ natif.
Les dépendances de build suivantes sont requises :
Les dépendances de build suivantes sont facultatives :
deps/idasdk
)Les étapes générales de construction sont les mêmes sous Windows, Linux et macOS. Ce qui suit montre les commandes pour Linux.
Téléchargez les dépendances qui ne seront pas téléchargées automatiquement :
mkdir -p build/out
git clone https://github.com/google/binexport build/binexport
unzip -q < path/to/idasdk_pro80.zip > -d build/idasdk
Ensuite, configurez le répertoire de build et générez les fichiers de build :
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 "
Enfin, invoquez la version réelle. Les binaires seront placés dans build/out/bindiff-prefix
:
cmake --build build/out --config Release
(cd build/out ; ctest --build-config Release --output-on-failure)
cmake --install build/out --config Release
Pour construire sans IDA, modifiez simplement l'étape de configuration ci-dessus en
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
La création de l'interface graphique basée sur Java nécessite la bibliothèque commerciale tierce de visualisation de graphiques yFiles pour l'affichage et la mise en page des graphiques. Cette bibliothèque est extrêmement puissante et difficilement remplaçable.
Pour construire, BinDiff utilise Gradle 6.x et Java 11 LTS. Reportez-vous à son guide d'installation pour obtenir des instructions sur la façon d'installer.
En supposant que vous êtes titulaire d'une licence yFiles, définissez la variable d'environnement YFILES_DIR
sur un répertoire contenant les yFiles y.jar
et ysvg.jar
.
Remarque : BinDiff utilise toujours l'ancienne branche 2.x de yFiles.
Invoquez ensuite Gradle pour télécharger les dépendances externes et créer :
Fenêtres :
set YFILES_DIR=<pathtoyfiles_2.17>
cd java
gradle shadowJar
Linux ou macOS :
export YFILES_DIR=<path/to/yfiles_2.17>
cd java
gradle shadowJar
Ensuite, le répertoire ui/build/libs
dans le sous-répertoire java
doit contenir l'artefact autonome bindiff-ui-all.jar
, qui peut être exécuté à l'aide de la commande standard java -jar
.
Les articles originaux décrivant les idées générales derrière BinDiff :
Autres outils dans le même espace problématique :
Projets utilisant BinDiff :
BinDiff est sous licence selon les termes de la licence Apache. Voir LICENCE pour plus d’informations.
Si vous souhaitez contribuer, veuillez lire CONTRIBUTING.md avant d'envoyer des pull request. Vous pouvez également signaler des bogues ou déposer des demandes de fonctionnalités.