Estou tentando aprender a usar a ferramenta BinDiff , mas consigo ” t descobrir como abrir dois binários para fazer a comparação. Enquanto folheio o manual, parece que preciso do IDA Pro para isso.
Posso usar o BinDiff sem o IDA Pro (digamos, apenas com o IDA grátis)?
Comentários
- related: alternativas ao BinDiff reverseengineering.stackexchange.com/q/26196/3934 ?
Resposta
Sim, agora isso é possível com o Ghidra.
A versão mais recente, BinDiff 6 , tem suporte experimental para o desmontador Ghidra. Ele vem com uma extensão que permite exportar a desmontagem do Ghidra no formato .BinExport necessário para a comparação.
Software necessário
- BinDiff 6 do site do zynamics
- Um Java runtime recente (OpenJDK 11 ou posterior)
- Ghidra 9.1.2 ( https://ghidra-sre.org/releaseNotes_9.1.2.html )
Instalando a extensão Ghidra
Após instalar o BinDiff, localize o “BinExport” extensão em sua pasta de instalação.
Os padrões são
- Windows:
C:\Program Files\BinDiff\extra\ghidra
- Linux:
/opt/bindiff/extra/ghidra
- macOS:
/Applications/BinDiff/Extra/Ghidra
Se você localizou o ghidra_BinExport.zip
arquivo, a extensão pode ser instalada como qualquer outra extensão Ghidra:
- Inicie o Ghidra e selecione
File
|Install Extensions...
. - Clique no botão
+
paraAdd extension
. -
No
Select Extension
caixa de diálogo, navegue até o diretório que contémghidra_BinExport.zip
. -
Selecione o .zip arquivo e clique em
OK
- Clique em
OK
para confirmar e novamente para descartar a mensagem de reinicialização. Em seguida, reinicie o Ghidra.
Uso
Esta versão do exportador baseado em Java para Ghidra tem os seguintes recursos em comparação com a versão C ++ nativa para IDA Pro:
| | Ghidra | IDA | | --------------------------------------- | ------ | --- | | Protocol Buffer based full export | ✓¹ | ✓ | | Statistics text file | - | ✓ | | Text format for debugging | - | ✓ | | BinNavi export into PostgreSQL database | - | ✓ | ¹ No operand trees
Verificando a versão de instalação
- No Ghidra, selecione
File
|Install Extensions...
. - Verifique se
BinExport
está listado e tem oInstall Path
Invocação
- No Ghidra, abra um projeto ou crie um novo.
- Se ainda não tiver feito, abra o binário para exportar em a ferramenta Navegador de código e execute a análise inicial do Ghidra. Você pode querer habilitar a opção “localizador de instrução agressivo” para obter melhor cobertura na exportação.
- Na visualização do projeto, clique com o botão direito do mouse no binário para exporte e selecione
Export...
- Na lista suspensa, selecione
Binary BinExport (v2) for BinDiff
- Selecione um caminho para o arquivo de saída. Este pode ser o nome do arquivo original, como
.BinExport
será anexado. - Clique em
OK
.
BinDiff Arquivos exportados
Os arquivos exportados agora podem ser comparados e os resultados exibidos em sua IU:
- Exporte dois binários seguindo as instruções acima. As etapas a seguir pressupõem
primary.BinExport
esecondary.BinExport
. -
Na linha de comando, execute o mecanismo BinDiff com
bindiff primary.BinExport secondary.BinExport
Isso criará um arquivo
primary_vs_secondary.BinDiff
no diretório atual. O comandobindiff
deve estar no caminho do sistema. -
Inicie a IU do BinDiff por meio de
bindiff --ui
ou usando o iniciador para seu sistema operacional. -
Crie um novo espaço de trabalho ou abra um existente.
-
Selecione
Diffs
|Add Existing Diff...
. -
Em
Choose Diff
, selecione oprimary_vs_secondary.BinDiff
criado na etapa 2. -
Clique em
OK
, seguido porAdd
. O diff agora é mostrado na visualização em árvore à esquerda e pode ser aberto com um clique duplo nele. -
Use o BinDiff normalmente para exibir o gráfico de chamada ou gráficos de fluxo de funções correspondentes .
Código aberto
Finalmente, a extensão BinExport (e também o plugin IDA Pro) é código aberto e está disponível no GitHub . A tag v11
corresponde ao BinDiff 6.
Comentários
- Obrigado. Eu ' d ficaria tão feliz em me livrar da dependência do IDA Pro!