
Encuentra rápidamente diferencias y similitudes en código desensamblado.

Copyright 2011-2026 Google LLC.
Este repositorio contiene el código fuente de BinDiff. BinDiff es una herramienta de comparación de código abierto para archivos binarios que permite encontrar rápidamente diferencias y similitudes en código desensamblado.
BinDiff es una herramienta de comparación de código abierto para archivos binarios que ayuda a investigadores de vulnerabilidades e ingenieros a encontrar rápidamente diferencias y similitudes en código desensamblado.
Con BinDiff, los investigadores pueden identificar y aislar correcciones de vulnerabilidades en parches proporcionados por los proveedores. También se puede utilizar para transferir símbolos y comentarios entre desensamblados de múltiples versiones del mismo binario. Esto facilita el seguimiento de cambios a lo largo del tiempo, permite a las organizaciones conservar los resultados del análisis y posibilita la transferencia de conocimiento entre analistas de binarios.
Si quieres empezar a usar BinDiff, descarga los paquetes de instalación precompilados desde la página de versiones.
Nota: BinDiff depende de un desensamblador independiente. De fábrica, incluye soporte para IDA Pro, Binary Ninja y Ghidra. La página de desensambladores enumera las configuraciones compatibles.
Un subconjunto del manual existente está disponible en el directorio docs/.
BinDiff contiene los siguientes componentes:
cmake - Archivos de compilación de CMake que declaran dependencias externasfixtures - Una colección de archivos de prueba para ejercitar el motor principal de BinDiffida - Integración con el desensamblador IDA Projava - Código fuente de Java. Contiene la interfaz de usuario de diff visual de BinDiff y su biblioteca de utilidades correspondiente.match - Algoritmos de coincidencia para el motor principal de BinDiffpackaging - Fuentes de paquetes para los paquetes de instalacióntools - Ejecutables auxiliares que se incluyen con el productoLas instrucciones a continuación deberían ser suficientes para compilar tanto el código nativo como los componentes basados en Java.
Se añadirán instrucciones de compilación más detalladas en una fecha posterior. Esto incluye Dockerfiles ya preparados y scripts para compilar los paquetes de instalación.
BinDiff usa CMake para generar sus archivos de compilación para aquellos componentes que consisten en código C++ nativo.
Se requieren las siguientes dependencias de compilación:
Los pasos generales de compilación son los mismos en Windows, Linux y macOS. Lo siguiente muestra los comandos para Linux.
A continuación, configura el directorio de compilación y genera los archivos de compilación:
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
Finalmente, invoca la compilación real. Los binarios se colocarán en build/:
cmake --build build --config Release
(cd build; ctest --build-config Release --output-on-failure)
cmake --install build --config Release
Para compilar sin IDA, simplemente cambia el paso de configuración anterior a
cmake -S . -B build/out -G Ninja -DCMAKE_BUILD_TYPE=Release \
-DBINEXPORT_ENABLE_IDAPRO=OFF
La compilación de la GUI basada en Java requiere la biblioteca comercial de visualización de grafos de terceros yFiles para la visualización y el diseño de grafos. Esta biblioteca es inmensamente potente y no es fácilmente reemplazable.
Para compilar, BinDiff usa Gradle 6.x y Java 11 LTS. Consulta su guía de instalación para obtener instrucciones sobre cómo instalarlo.
Suponiendo que eres titular de una licencia de yFiles, establece la variable de entorno YFILES_DIR en un directorio que contenga y.jar y ysvg.jar de yFiles.
Nota: BinDiff todavía usa la rama 2.x anterior de yFiles.
Luego invoca Gradle para descargar las dependencias externas y compilar:
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
Después, el directorio ui/build/libs en el subdirectorio java debería contener el artefacto autónomo bindiff-ui-all.jar, que se puede ejecutar con el comando estándar java -jar.
Los artículos originales que describen las ideas generales detrás de BinDiff:
Otras herramientas en el mismo espacio de problema:
Proyectos que usan BinDiff:
BinDiff está licenciado bajo los términos de la licencia Apache. Consulta LICENSE para obtener más información.
Si quieres contribuir, lee CONTRIBUTING.md antes de enviar pull requests. También puedes informar de errores o solicitar nuevas funciones.