BinDiffHelper
Extension Ghidra qui utilise BinDiff sur votre projet Ghidra pour trouver les fonctions correspondantes et les renommer automatiquement (BinDiff 6, 7, 8 pris en charge).
Consultez le manuel BinDiff pour voir comment cela fonctionne et comment il met en correspondance les fonctions / blocs de base. Cependant, avec cette extension, BinDiff est automatisé depuis Ghidra, vous n'avez donc pas à différencier vos binaires vous-même.
Veuillez signaler les bugs via la fonctionnalité issue sur github
Changelog
v0.7.1
- Mise à jour pour Ghidra 12
v0.7.0 (versions de Ghidra >= 11.4)
- Aucun changement hormis la compatibilité avec la version de Ghidra
v0.6.4 (versions de Ghidra < 11.4)
- Prise en charge de l'export de namespace
- Correction d'un blocage indéfini lors du diffing
v0.6.3
- Autoriser le tri du tableau
v0.6.2
- Correction d'un bug où le diffing se bloquait indéfiniment avec BinDiff 8
- Lors d'un double-clic sur un symbole, le suivre à la fois dans les listings de code primaire et secondaire
v0.6
- Mise à jour de la bibliothèque du pilote sqlite, devrait désormais fonctionner sur Apple silicon
- Prise en charge des diffs textuels externes entre fonctions décompilées (voir https://github.com/ubfx/BinDiffHelper/pull/24)
- Mises à jour de l'interface
v0.5
- Prise en charge de BinDiff 8
- Version pour Ghidra 11.1
Changements plus anciens
### v0.4.3
* Version pour Ghidra 11.0
v0.4.2
- Ajout d'une fonction pour importer toutes les fonctions (pas seulement celles cochées dans le tableau)
- Ajout d'une fonction pour basculer la case à cocher pour plusieurs éléments du tableau
- Mise à jour pour prendre en charge Ghidra 10.3
v0.4.1
- Mise à jour pour prendre en charge Gradle 7.5 et Ghidra 10.1
v0.4.0
- Prise en charge de BinDiff 7 et Ghidra 10
v0.3.2
- Correction d'un bug où le diffing avec un fichier différent du même projet ne fonctionnait pas
- Correction d'un bug où les fichiers avec des noms courts (< 3 caractères>) ne pouvaient pas être différenciés
v0.3.1
- Correction d'un crash lors de l'ouverture d'un fichier via l'option "from project"
v0.3
- Coloration des fonctions correspondantes dans le listing
- Ajout de commentaires aux fonctions correspondantes dans le listing renvoyant vers l'autre binaire
- Correction d'un bug où la bibliothèque protobuf était manquante dans certaines builds
- Nouveau menu de chargement de fichier
v0.2
- Correction d'un bug où le fichier vers lequel importer devait être extrait (checked out).
- Augmentation de la taille de la boîte de dialogue de sélection de fichier de projet
v0.1
- Diff BinDiff du binaire ouvert dans Ghidra avec un autre binaire du même projet Ghidra, affichage des résultats et import des noms de fonctions
- Ouvrir un fichier BinDiff, créé avec BinDiff 6, à partir de deux fichiers .BinExport et importer les noms de fonctions correspondants dans Ghidra
Téléchargez soit le fichier .zip depuis la release, s'il est compatible avec votre version de Ghidra, sinon voir Comment compiler ci-dessous.
- Ouvrez Ghidra
- Dans la Main Window : Allez dans File->Install Extensions...
- Cliquez sur le bouton + en haut à droite et sélectionnez le fichier zip BinDiffHelper
- Fermez le gestionnaire de plugins. Redémarrez Ghidra pour charger le nouveau plugin
- Voir Utilisation ci-dessous
Autres outils recommandés
Sans ceux-ci, vous ne pourrez qu'importer des fichiers .BinDiff et non exporter et différencier automatiquement depuis votre projet Ghidra
Utilisation
Assurez-vous que le plugin est chargé dans le Code Explorer en ouvrant un fichier dans Ghidra et dans le Code Explorer, allez dans File->Configure
Cliquez sur la petite icône de prise en haut à droite :

et assurez-vous que la case à cocher à côté de BinDiffHelperPlugin est cochée.

Importer un .BinDiff externe
Les fichiers .BinExport correspondants doivent se trouver dans le même dossier.
Ouvrez le fichier dans lequel vous souhaitez importer les noms dans le code Browser, puis allez dans Window->BinDiffHelper

Utilisez le bouton Open from BinDiff ou l'élément de menu et sélectionnez votre fichier .BinDiff.

Sélectionnez tous les noms de fonctions que vous souhaitez importer et cliquez sur le bouton Import function names en haut à droite ou sur l'élément de menu.
Comparer entre fichiers du projet Ghidra
Allez dans Window->BinDiffHelper, assurez-vous qu'il n'y a aucun avertissement concernant BinExport ou BinDiff, puis cliquez sur le bouton Open from project.
Sélectionnez l'autre fichier dans l'arborescence et cliquez sur OK.

Prérequis :
- Installation de Ghidra (https://ghidra-sre.org) ou compilée depuis les sources
- Un jdk. Il peut y avoir certaines restrictions selon la façon dont votre Ghidra a été compilé et quels autres plugins vous utilisez. Je recommande d'utiliser Temurin 21 LTS, car cela semble actuellement fonctionner à la fois avec BinExport et BinDiffHelper.
- gradle (testé avec 7.5, 8.10)
Cloner le dépôt
Clonez le dépôt de manière récursive, car il dépend de BinExport pour la définition de protocol buffer correspondante.
git clone --recurse-submodules https://github.com/ubfx/BinDiffHelper.git
Le compiler
Vous devez définir la variable d'environnement GHIDRA_INSTALL_DIR sur le répertoire d'installation de Ghidra.
Si vous avez différents JDK installés, assurez-vous que la variable d'environnement JAVA_HOME pointe vers celui utilisé par votre installation de Ghidra.
L'extension sera compilée spécifiquement pour cette version de Ghidra.
Puis rendez-vous dans le dossier BinDiffHelper dans votre shell et exécutez
gradle
Cela compilera à la fois BinExport dans le sous-module correspondant et BinDiffHelper dans le répertoire parent. Un fichier .zip devrait avoir été créé dans le répertoire dist. Utilisez ce fichier .zip pour installer selon les instructions ci-dessus.
Configuration de développement / débogage
Il est parfois utile de pouvoir déboguer l'extension avec Ghidra, voici quelques notes à ce sujet :