Copyright 2011-2024 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 para encontrar rápidamente diferencias y similitudes en el código desensamblado.
BinDiff es una herramienta de comparación de código abierto para archivos binarios que ayuda a los investigadores e ingenieros de vulnerabilidades a encontrar rápidamente diferencias y similitudes en el código desensamblado.
Con BinDiff, los investigadores pueden identificar y aislar soluciones para vulnerabilidades en los parches proporcionados por los proveedores. También se puede utilizar para transferir símbolos y comentarios entre desensamblajes de múltiples versiones del mismo binario. Esto facilita el seguimiento de los cambios a lo largo del tiempo, permite a las organizaciones retener los resultados del análisis y permite la transferencia de conocimientos entre analistas binarios.
Si desea comenzar a usar BinDiff, descargue paquetes de instalación prediseñados desde la página de lanzamientos.
Nota: BinDiff depende de un desensamblador independiente. Fuera de la caja, viene con soporte para IDA Pro, Binary Ninja y Ghidra. La página de desensambladores enumera las configuraciones admitidas.
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 central BinDiffida
- Integración con el desensamblador IDA Projava
: código fuente de Java. Contiene la interfaz de usuario visual diff de BinDiff y su biblioteca de utilidades correspondiente.match
- Algoritmos de coincidencia para el motor central BinDiffpackaging
: fuentes de paquetes para los paquetes de instalacióntools
: ejecutables auxiliares que se envían con el producto Las instrucciones siguientes deberían ser suficientes para crear tanto el código nativo como los componentes basados en Java.
Se agregarán instrucciones de construcción más detalladas en una fecha posterior. Esto incluye Dockerfile
y scripts listos para usar para crear los paquetes de instalación.
BinDiff usa CMake para generar sus archivos de compilación para aquellos componentes que constan de código C++ nativo.
Se requieren las siguientes dependencias de compilación:
Las siguientes dependencias de compilación son opcionales:
deps/idasdk
)Los pasos generales de compilación son los mismos en Windows, Linux y macOS. A continuación se muestran los comandos para Linux.
Descargue dependencias que no se descargarán automáticamente:
mkdir -p build/out
git clone https://github.com/google/binexport build/binexport
unzip -q < path/to/idasdk_pro80.zip > -d build/idasdk
A continuación, configure el directorio de compilación y genere archivos de compilación:
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 "
Finalmente, invoque la compilación real. Los binarios se colocarán en 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
Para compilar sin IDA, simplemente cambie el paso de configuración anterior a
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 creación de la GUI basada en Java requiere la biblioteca comercial de visualización de gráficos de terceros yFiles para la visualización y el diseño de gráficos. Esta biblioteca es inmensamente poderosa y no es fácilmente reemplazable.
Para compilar, BinDiff usa Gradle 6.x y Java 11 LTS. Consulte su guía de instalación para obtener instrucciones sobre cómo instalar.
Suponiendo que es titular de una licencia de yFiles, configure la variable de entorno YFILES_DIR
en un directorio que contenga yFiles y.jar
y ysvg.jar
.
Nota: BinDiff todavía usa la rama 2.x anterior de yFiles.
Luego invoca Gradle para descargar dependencias externas y compilar:
Ventanas:
set YFILES_DIR=<pathtoyfiles_2.17>
cd java
gradle shadowJar
Linux o Mac OS:
export YFILES_DIR=<path/to/yfiles_2.17>
cd java
gradle shadowJar
Luego, el directorio ui/build/libs
en el subdirectorio java
debe contener el artefacto bindiff-ui-all.jar
autónomo, que se puede ejecutar usando el comando java -jar
estándar.
Los artículos originales que describen las ideas generales detrás de BinDiff:
Otras herramientas en el mismo espacio problemático:
Proyectos que utilizan BinDiff:
BinDiff tiene licencia según los términos de la licencia Apache. Consulte LICENCIA para obtener más información.
Si desea contribuir, lea CONTRIBUTING.md antes de enviar solicitudes de extracción. También puede informar errores o presentar solicitudes de funciones.