Copyright 2011-2020 Google LLC
BinNavi es un IDE de análisis binario: un entorno que permite a los usuarios inspeccionar, navegar, editar y anotar gráficos de flujo de control de código desensamblado, hacer lo mismo con el gráfico de llamadas del ejecutable, recopilar y combinar seguimientos de ejecución y, en general, realizar un seguimiento. de resultados de análisis entre un grupo de analistas.
Nota: El proyecto BinNavi ya no está en desarrollo activo.
BinNavi utiliza una biblioteca comercial de visualización de gráficos de terceros (yFiles) para mostrar y diseñar gráficos. Esta biblioteca es inmensamente poderosa y no es fácilmente reemplazable.
Para realizar un desarrollo directo utilizando yFiles, necesita una licencia de desarrollador. Al mismo tiempo, queremos que la comunidad pueda contribuir a BinNavi sin necesidad de una licencia comercial de yFiles. Para poder hacer esto y cumplir con la licencia de yFiles, todas las interfaces de yFiles deben estar ofuscadas adecuadamente.
Para lograr esto, hicimos lo siguiente:
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 distribuyendo un archivo JAR prediseñado con todo el código de los subpaquetes yfileswrap
, previnculado y ofuscado contra yFiles. Si desea cambiar o agregar código en BinNavi y no tiene una licencia de yFiles, puede hacer prácticamente lo que quiera en los paquetes que no son de yfileswrap; simplemente puede colocar lib/yfileswrap-obfuscated.jar
en su classpath para prueba y mira los resultados.
Si desea realizar cambios en los subdirectorios yfileswrap
, tenga en cuenta que necesitará una licencia válida de yFiles, y cualquier contribución que realice al proyecto BinNavi debe respetar su acuerdo de licencia. Esto significa que no puede simplemente exponer sus API internas con nombres diferentes, etc.
Haremos cumplir esto: estamos muy contentos de haber encontrado una manera de abrir BinNavi con la dependencia de yFiles, y nos aseguraremos de que cualquier código que extraigamos respete la licencia de yFiles.
Para reconstruir la biblioteca contenedora yFiles, primero copie y.jar
y ysvg.jar
third_party/java/yfiles
. Luego reconstruya con:
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 la gestión de dependencias, pero no para la compilación real. Java 11 es la versión mínima admitida.
Para construir desde cero use estos comandos:
mvn dependency:copy-dependencies
ant build-binnavi-fat-jar
Tenga en cuenta que BinNavi utiliza una base de datos PostgreSQL central para almacenar desensamblados/comentarios/rastreos, por lo que debe tener dicha instancia ejecutándose en algún lugar accesible para usted. Puede iniciar BinNavi de la siguiente manera:
java -jar target/binnavi-all.jar
Cargar el código en Eclipse para un mayor desarrollo requiere un poco de configuración.
build.xml
PROJECT_LOC/src/main/java
java
**/yfileswrap/**
a la lista de directorios para excluir.CMain
.Deberías estar listo para partir desde aquí.
Como parte de este proyecto, estamos distribuyendo un complemento IDA Pro que exporta desensamblados de IDA al formato de base de datos PostgreSQL que requiere BinNavi. Cuando ejecute BinNavi, simplemente configure la ruta correcta para IDA, haga clic en el botón "instalar complemento" si es necesario; ahora debería poder importar desensamblados.
En este momento, solo tenemos el complemento de exportación IDA, pero tenemos muchas esperanzas de que alguien nos ayude a crear una funcionalidad de exportación para otros desensambladores en un futuro cercano.
Tenga en cuenta que actualmente la compilación Maven es el sistema de compilación autorizado para BinNavi. Gradle es puramente experimental y es probable que cambie.
Puedes compilar BinNavi con gradle ejecutando lo siguiente:
En Linux/OS X:
$ ./gradlew clean jar
En Windows:
/gradlew.bat clean jar
Esto producirá el archivo jar en la ruta del proyecto en build/libs/
.
En Linux/OS X:
$ ./gradlew eclipse
En Windows:
./gradlew.bat eclipse
Como parte del proceso de creación del proyecto, descargará las dependencias. Una vez completado, haga lo siguiente para cargar en Eclipse:
Su espacio de trabajo de Eclipse ahora está configurado y completo para BinNavi.
En Linux/OS X:
$ ./gradlew idea
En Windows:
./gradlew.bat idea
Como parte del proceso de creación del proyecto, descargará las dependencias. Una vez completado, haga lo siguiente para cargar en IntelliJ:
Su entorno IntelliJ ahora está configurado y completo para IntelliJ.