BinDiffHelper
Extensión de Ghidra que utiliza BinDiff en tu proyecto de Ghidra para encontrar funciones coincidentes y renombrarlas automáticamente (BinDiff 6, 7, 8 compatibles).
Consulta el manual de BinDiff para ver cómo funciona y cómo empareja funciones / bloques básicos. Sin embargo, con esta extensión, BinDiff se automatiza desde dentro de Ghidra, por lo que no tienes que hacer el diff de tus binarios tú mismo.
Por favor, reporta errores a través de la función de issues en github
Registro de cambios
v0.7.1
- Actualización para Ghidra 12
v0.7.0 (versiones de Ghidra >= 11.4)
- Sin cambios excepto la compatibilidad con la versión de Ghidra
v0.6.4 (versiones de Ghidra < 11.4)
- Soporte de exportación de namespace
- Corrección de bloqueo indefinido al hacer diff
v0.6.3
- Permitir ordenación de la tabla
v0.6.2
- Corrección de un error por el que el diff se colgaba indefinidamente en BinDiff 8
- Al hacer doble clic en un símbolo, seguirlo tanto en el listado de código primario como en el secundario
v0.6
- Actualización de la librería del driver de sqlite, ahora debería funcionar en Apple silicon
- Soporte de diffs textuales externos entre funciones descompiladas (ver https://github.com/ubfx/BinDiffHelper/pull/24)
- Actualizaciones de la interfaz
v0.5
- Soporte de BinDiff 8
- Versión para Ghidra 11.1
Cambios anteriores
### v0.4.3
* Versión para Ghidra 11.0
v0.4.2
- Añadir función para importar todas las funciones (no solo las marcadas en la tabla)
- Añadir función para alternar la casilla de verificación de múltiples elementos en la tabla
- Actualización para soportar Ghidra 10.3
v0.4.1
- Actualización para soportar Gradle 7.5 y Ghidra 10.1
v0.4.0
- Soporte de BinDiff 7 y Ghidra 10
v0.3.2
- Corrección de un error por el que el diff con un archivo diferente del mismo proyecto no funcionaba
- Corrección de un error por el que los archivos con nombres cortos (< 3 caracteres>) no se podían comparar
v0.3.1
- Corrección de un fallo al abrir un archivo mediante la opción "from project"
v0.3
- Coloreado de las funciones coincidentes en el listado
- Añadir comentarios a las funciones coincidentes en el listado enlazando al otro binario
- Corrección de un error por el que faltaba la librería protobuf en algunas compilaciones
- Nuevo menú de carga de archivos
v0.2
- Corrección de un error por el que el archivo al que importar tenía que estar extraído (checked out).
- Aumentar el tamaño del diálogo de selección de archivo del proyecto
v0.1
- Hacer BinDiff del binario abierto en Ghidra con otro binario del mismo proyecto de Ghidra, mostrar resultados e importar nombres de funciones
- Abrir un archivo BinDiff, creado con BinDiff 6, a partir de dos archivos .BinExport e importar los nombres de funciones coincidentes en Ghidra
Cómo instalar
Descarga el archivo .zip desde la release, si es compatible con tu versión de Ghidra; de lo contrario, consulta Cómo compilar a continuación.
- Abre Ghidra
- En la Main Window: Ve a File->Install Extensions...
- Haz clic en el botón + en la esquina superior derecha y selecciona el archivo zip de BinDiffHelper
- Cierra el gestor de plugins. Reinicia Ghidra para cargar el nuevo plugin
- Consulta Uso a continuación
Otras herramientas recomendadas
Sin estos, solo podrás importar archivos .BinDiff y no exportar y comparar automáticamente desde tu proyecto de Ghidra
Uso
Asegúrate de que el plugin está cargado en el Code Explorer abriendo un archivo en Ghidra y en el Code Explorer ve a File->Configure
Haz clic en el pequeño icono de enchufe en la esquina superior derecha:

y asegúrate de que la casilla junto a BinDiffHelperPlugin está marcada.

Importar .BinDiff externo
Los archivos .BinExport correspondientes deben estar en la misma carpeta.
Abre el archivo en el que quieres importar nombres en el code Browser, luego ve a Window->BinDiffHelper

Usa el botón Open from BinDiff o el elemento de menú y selecciona tu archivo .BinDiff.

Selecciona todos los nombres de funciones que quieras importar y haz clic en el botón Import function names en la esquina superior derecha o en el elemento de menú.
Comparar entre archivos en el proyecto de Ghidra
Ve a Window->BinDiffHelper, asegúrate de que no hay advertencias relativas a BinExport o BinDiff, luego haz clic en el botón Open from project.
Selecciona el otro archivo del árbol y haz clic en OK.

Cómo compilar
Requisitos:
- Instalación de Ghidra (https://ghidra-sre.org) o compilada desde código fuente
- Algún jdk. Puede haber ciertas restricciones dependiendo de cómo se compiló tu Ghidra y qué otros plugins estés usando. Recomiendo usar Temurin 21 LTS, ya que actualmente parece funcionar tanto con BinExport como con BinDiffHelper.
- gradle (probado con 7.5, 8.10)
Clonar el repositorio
Clona el repositorio de forma recursiva, ya que depende de BinExport para la definición del protocol buffer correspondiente.
git clone --recurse-submodules https://github.com/ubfx/BinDiffHelper.git
Compilarlo
Necesitas establecer la variable de entorno GHIDRA_INSTALL_DIR al directorio de instalación de Ghidra.
Si tienes diferentes JDKs instalados, asegúrate de que la variable de entorno JAVA_HOME apunta al que usa tu instalación de Ghidra.
La extensión se compilará específicamente para esa versión de Ghidra.
Y luego ve a la carpeta BinDiffHelper en tu shell y ejecuta
gradle
Esto compilará tanto BinExport en el submódulo correspondiente como BinDiffHelper en el directorio padre. Debería haberse creado un archivo .zip en el directorio dist. Usa ese archivo .zip para instalar según las instrucciones anteriores.
Configuración de desarrollo / depuración
A veces es útil poder depurar la extensión junto con Ghidra, aquí hay algunas notas al respecto: