Direitos autorais 2011-2020 Google LLC
BinNavi é um IDE de análise binária - um ambiente que permite aos usuários inspecionar, navegar, editar e anotar gráficos de fluxo de controle de código desmontado, fazer o mesmo para o gráfico de chamada do executável, coletar e combinar rastreamentos de execução e, geralmente, acompanhar de resultados de análise entre um grupo de analistas.
Nota: O projeto BinNavi não está mais em desenvolvimento ativo.
BinNavi usa uma biblioteca comercial de visualização de gráficos de terceiros (yFiles) para exibir e organizar gráficos. Esta biblioteca é imensamente poderosa e não é facilmente substituível.
Para realizar o desenvolvimento direto usando yFiles, você precisa de uma licença de desenvolvedor para isso. Ao mesmo tempo, queremos que a comunidade possa contribuir com o BinNavi sem precisar de uma licença comercial do yFiles. Para fazer isso e estar em conformidade com a licença do yFiles, todas as interfaces para o yFiles precisam ser ofuscadas adequadamente.
Para conseguir isso, fizemos o seguinte:
com.google.security.zynamics.binnavi
com.google.security.zynamics.binnavi.yfileswrap
com.google.security.zynamics.zylib
com.google.security.zynamics.zylib.yfileswrap
com.google.security.zynamics.reil
com.google.security.zynamics.reil.yfileswrap
Estamos distribuindo um arquivo JAR pré-construído com todo o código nos subpacotes yfileswrap
- pré-vinculados e ofuscados em yFiles. Se você deseja alterar ou adicionar código no BinNavi e não possui uma licença yFiles, você pode fazer praticamente o que quiser nos pacotes não yfileswrap - você pode simplesmente colocar lib/yfileswrap-obfuscated.jar
em seu caminho de classe para teste e veja os resultados.
Se você deseja fazer alterações nos subdiretórios yfileswrap
, esteja ciente de que você precisará de uma licença yFiles válida - e qualquer contribuição que você fizer para o projeto BinNavi deverá honrar seu contrato de licença. Isso significa que você não pode simplesmente expor suas APIs internas sob nomes diferentes, etc.
Vamos fazer cumprir isso - estamos muito felizes por ter encontrado uma maneira de abrir o código-fonte do BinNavi com a dependência do yFiles e garantiremos que qualquer código que extrairmos respeite a licença do yFiles.
Para reconstruir a biblioteca wrapper yFiles, primeiro copie y.jar
e ysvg.jar
para third_party/java/yfiles
. Em seguida, reconstrua com:
mvn dependency:copy-dependencies
ant build-yfiles-wrapper-jar
mvn install:install-file
-Dfile=target/yfileswrap-obfuscated.jar
-DgroupId=com.google.security.zynamics.binnavi
-DartifactId=yfileswrap-obfuscated
-Dversion=6.1
-Dpackaging=jar
-DlocalRepositoryPath=lib
BinNavi usa Maven para gerenciamento de dependências, mas não para a construção real. Java 11 é a versão mínima suportada.
Para construir do zero use estes comandos:
mvn dependency:copy-dependencies
ant build-binnavi-fat-jar
Esteja ciente de que o BinNavi faz uso de um banco de dados PostgreSQL central para armazenar desmontagens/comentários/rastreamentos - então você precisa ter tal instância rodando em algum lugar acessível para você. Você pode iniciar o BinNavi da seguinte maneira:
java -jar target/binnavi-all.jar
Carregar o código no Eclipse para desenvolvimento adicional requer um pouco de configuração.
build.xml
PROJECT_LOC/src/main/java
java
**/yfileswrap/**
à lista de diretórios a serem excluídos.CMain
.Você deve estar pronto para partir daqui.
Como parte deste projeto, estamos distribuindo um plugin IDA Pro que exporta desmontagens do IDA para o formato de banco de dados PostgreSQL exigido pelo BinNavi. Ao executar o BinNavi, basta configurar o caminho correto para o IDA, clicar no botão "instalar plugin" se necessário - agora você poderá importar desmontagens.
No momento, só temos o plugin de exportação IDA - mas esperamos muito que alguém nos ajude a construir funcionalidades de exportação para outros desmontadores em um futuro próximo.
Observe que atualmente a compilação Maven é o sistema de compilação oficial para BinNavi. Gradle é puramente experimental e provavelmente mudará.
Você pode construir o BinNavi com gradle executando o seguinte:
No Linux/OS X:
$ ./gradlew clean jar
No Windows:
/gradlew.bat clean jar
Isso produzirá o jar na rota do projeto em build/libs/
.
No Linux/OS X:
$ ./gradlew eclipse
No Windows:
./gradlew.bat eclipse
Como parte do processo de criação do projeto, ele fará o download das dependências. Depois de concluído, faça o seguinte para carregar no Eclipse:
Seu espaço de trabalho Eclipse agora está configurado e completo para BinNavi.
No Linux/OS X:
$ ./gradlew idea
No Windows:
./gradlew.bat idea
Como parte do processo de criação do projeto, ele fará o download das dependências. Depois de concluído, faça o seguinte para carregar no IntelliJ:
Seu ambiente IntelliJ agora está configurado e completo para o IntelliJ.