
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.
Se quiser contribuir, por favor leia CONTRIBUTING.md antes de enviar pull requests. Também pode reportar bugs ou solicitar funcionalidades.