
Encontre rapidamente diferenças e similaridades em código desassemblado.

Copyright 2011-2026 Google LLC.
Este repositório contém o código-fonte do BinDiff. O BinDiff é uma ferramenta de comparação de código aberto para ficheiros binários que permite encontrar rapidamente diferenças e semelhanças em código desassemblado.
BinDiff é uma ferramenta de comparação de código aberto para ficheiros binários, que ajuda investigadores e engenheiros de vulnerabilidades a encontrar rapidamente diferenças e semelhanças em código desassemblado.
Com o BinDiff, os investigadores podem identificar e isolar correções para vulnerabilidades em patches fornecidos por fornecedores. Também pode ser usado para transferir símbolos e comentários entre desassemblagens de múltiplas versões do mesmo binário. Isto facilita o acompanhamento de alterações ao longo do tempo e permite que as organizações retenham resultados de análise e possibilita a transferência de conhecimento entre analistas de binários.
Se quiser apenas começar a usar o BinDiff, descarregue os pacotes de instalação pré-construídos a partir da página de lançamentos.
Nota: O BinDiff depende de um desassemblador separado. De fábrica, ele vem com suporte para IDA Pro, Binary Ninja e Ghidra. A página de desassembladores lista as configurações suportadas.
Um subconjunto do manual existente está disponível no diretório docs/.
O BinDiff contém os seguintes componentes:
cmake - Ficheiros de compilação CMake que declaram dependências externasfixtures - Uma coleção de ficheiros de teste para exercitar o motor principal do BinDiffida - Integração com o desassemblador IDA Projava - Código-fonte Java. Contém a interface de utilizador de diff visual do BinDiff e a sua biblioteca de utilitários correspondente.match - Algoritmos de correspondência para o motor principal do BinDiffpackaging - Fontes de pacotes para os pacotes de instalaçãotools - Executáveis auxiliares que são enviados com o produtoAs instruções abaixo devem ser suficientes para construir tanto o código nativo como os componentes baseados em Java.
Instruções de construção mais detalhadas serão adicionadas numa data posterior. Isto inclui Dockerfiles pré-construídos e scripts para construir os pacotes de instalação.
O BinDiff usa CMake para gerar os seus ficheiros de compilação para os componentes que consistem em código C++ nativo.
As seguintes dependências de compilação são necessárias:
Os passos gerais de compilação são os mesmos no Windows, Linux e macOS. O seguinte mostra os comandos para Linux.
De seguida, configure o diretório de compilação e gere os ficheiros de compilação:
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
Finalmente, invoque a compilação propriamente dita. Os binários serão colocados em build/:
cmake --build build --config Release
(cd build; ctest --build-config Release --output-on-failure)
cmake --install build --config Release
Para construir sem IDA, simplesmente altere o passo de configuração acima para
cmake -S . -B build/out -G Ninja -DCMAKE_BUILD_TYPE=Release \
-DBINEXPORT_ENABLE_IDAPRO=OFF
Construir a GUI baseada em Java requer a biblioteca comercial de visualização de grafos de terceiros yFiles para exibição e layout de grafos. Esta biblioteca é imensamente poderosa e não é facilmente substituível.
Para construir, o BinDiff usa Gradle 6.x e Java 11 LTS. Consulte o seu guia de instalação para instruções sobre como instalar.
Assumindo que é um detentor de licença yFiles, defina a variável de ambiente YFILES_DIR para um diretório que contenha os ficheiros y.jar e ysvg.jar do yFiles.
Nota: O BinDiff ainda usa o ramo mais antigo 2.x do yFiles.
Depois invoque o Gradle para descarregar dependências externas e construir:
Windows:
set YFILES_DIR=<path\to\yfiles_2.17>
cd java
gradle shadowJar
Linux ou macOS:
export YFILES_DIR=<path/to/yfiles_2.17>
cd java
gradle shadowJar
Posteriormente, o diretório ui/build/libs no subdiretório java deve conter o artefacto auto-contido bindiff-ui-all.jar, que pode ser executado usando o comando padrão java -jar.
Os artigos originais que descrevem as ideias gerais por trás do BinDiff:
Outras ferramentas no mesmo espaço de problema:
Projetos que usam BinDiff:
O BinDiff está licenciado sob os termos da licença Apache. Consulte LICENSE para mais informações.