Direitos autorais 2011-2024 Google LLC.
Este repositório contém o código-fonte BinDiff. BinDiff é uma ferramenta de comparação de código aberto para arquivos binários para encontrar rapidamente diferenças e semelhanças em código desmontado.
BinDiff é uma ferramenta de comparação de código aberto para arquivos binários, que auxilia pesquisadores e engenheiros de vulnerabilidade a encontrar rapidamente diferenças e semelhanças em código desmontado.
Com o BinDiff, os pesquisadores podem identificar e isolar correções para vulnerabilidades em patches fornecidos pelo fornecedor. Também pode ser usado para portar símbolos e comentários entre desmontagens de múltiplas versões do mesmo binário. Isso facilita o rastreamento de alterações ao longo do tempo e permite que as organizações retenham os resultados da análise e permite a transferência de conhecimento entre analistas binários.
Se você quiser apenas começar a usar o BinDiff, baixe os pacotes de instalação pré-construídos na página de lançamentos.
Nota: BinDiff depende de um desmontador separado. Pronto para uso, ele vem com suporte para IDA Pro, Binary Ninja e Ghidra. A página de desmontadores lista as configurações suportadas.
Um subconjunto do manual existente está disponível no diretório docs/
.
BinDiff contém os seguintes componentes:
cmake
- arquivos de compilação do CMake declarando dependências externasfixtures
- Uma coleção de arquivos de teste para exercitar o mecanismo principal BinDiffida
- Integração com o desmontador IDA Projava
- código-fonte Java. Ele contém a interface de usuário do diferencial visual BinDiff e sua biblioteca de utilitários correspondente.match
- Algoritmos de correspondência para o mecanismo principal BinDiffpackaging
- Fontes de pacotes para os pacotes de instalaçãotools
- Executáveis auxiliares fornecidos com o produto As instruções abaixo devem ser suficientes para construir o código nativo e os componentes baseados em Java.
Instruções de construção mais detalhadas serão adicionadas posteriormente. Isso inclui Dockerfile
prontos e scripts para construir os pacotes de instalação.
BinDiff usa CMake para gerar seus arquivos de construção para os componentes que consistem em código C++ nativo.
As seguintes dependências de compilação são necessárias:
As seguintes dependências de compilação são opcionais:
deps/idasdk
)As etapas gerais de construção são as mesmas no Windows, Linux e macOS. A seguir mostramos os comandos para Linux.
Baixe dependências que não serão baixadas automaticamente:
mkdir -p build/out
git clone https://github.com/google/binexport build/binexport
unzip -q < path/to/idasdk_pro80.zip > -d build/idasdk
Em seguida, configure o diretório de compilação e gere os arquivos de compilação:
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 a compilação real. Os binários serão colocados em 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 construir sem IDA, basta alterar a etapa de configuração acima para
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
Construir a GUI baseada em Java requer a biblioteca comercial de visualização de gráficos de terceiros yFiles para exibição e layout de gráficos. Esta biblioteca é imensamente poderosa e não é facilmente substituível.
Para construir, BinDiff usa Gradle 6.xe Java 11 LTS. Consulte o guia de instalação para obter instruções sobre como instalar.
Supondo que você seja titular de uma licença yFiles, defina a variável de ambiente YFILES_DIR
para um diretório contendo yFiles y.jar
e ysvg.jar
.
Nota: BinDiff ainda usa o ramo 2.x mais antigo do yFiles.
Em seguida, invoque o Gradle para baixar dependências externas e construir:
Windows:
set YFILES_DIR=<pathtoyfiles_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 artefato bindiff-ui-all.jar
independente, que pode ser executado usando o comando java -jar
padrão.
Os artigos originais que descrevem as ideias gerais por trás do BinDiff:
Outras ferramentas no mesmo espaço do problema:
Projetos usando BinDiff:
BinDiff é licenciado sob os termos da licença Apache. Consulte LICENÇA para obter mais informações.
Se você quiser contribuir, leia CONTRIBUTING.md antes de enviar solicitações pull. Você também pode relatar bugs ou enviar solicitações de recursos.