Copyright 2011-2020 Google LLC
BinNavi est un IDE d'analyse binaire - un environnement qui permet aux utilisateurs d'inspecter, de naviguer, de modifier et d'annoter des graphiques de flux de contrôle de code désassemblé, de faire de même pour le callgraph de l'exécutable, de collecter et de combiner des traces d'exécution et généralement de suivre des résultats d’analyse au sein d’un groupe d’analystes.
Remarque : Le projet BinNavi n'est plus en développement actif.
BinNavi utilise une bibliothèque commerciale de visualisation de graphiques tierce (yFiles) pour afficher et disposer des graphiques. Cette bibliothèque est extrêmement puissante et difficilement remplaçable.
Afin d'effectuer un développement direct à l'aide de yFiles, vous avez besoin d'une licence de développeur. En même temps, nous voulons que la communauté puisse contribuer à BinNavi sans avoir besoin d'une licence commerciale yFiles. Pour ce faire et se conformer à la licence yFiles, toutes les interfaces vers yFiles doivent être correctement obscurcies.
Pour y parvenir, nous avons procédé comme suit :
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
Nous distribuons un fichier JAR prédéfini avec tout le code des sous-packages yfileswrap
- pré-lié et obscurci par rapport à yFiles. Si vous souhaitez modifier ou ajouter du code dans BinNavi et que vous n'avez pas de licence yFiles, vous pouvez librement faire à peu près ce que vous voulez dans les packages non-yfileswrap - vous pouvez simplement mettre le lib/yfileswrap-obfuscated.jar
dans votre chemin de classe pour tester et voir les résultats.
Si vous souhaitez apporter des modifications aux sous-répertoires yfileswrap
, sachez que vous aurez besoin d'une licence yFiles valide - et toute contribution que vous apportez au projet BinNavi doit respecter leur accord de licence. Cela signifie que vous ne pouvez pas simplement exposer leurs API internes sous différents noms, etc.
Nous appliquerons cela - nous sommes très heureux d'avoir trouvé un moyen d'ouvrir BinNavi avec la dépendance yFiles, et nous veillerons à ce que tout code que nous extrayons respecte la licence yFiles.
Pour reconstruire la bibliothèque wrapper yFiles, copiez d'abord y.jar
et ysvg.jar
dans third_party/java/yfiles
. Puis reconstruisez avec :
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 utilise Maven pour sa gestion des dépendances, mais pas pour la construction proprement dite. Java 11 est la version minimale prise en charge.
Pour créer à partir de zéro, utilisez ces commandes :
mvn dependency:copy-dependencies
ant build-binnavi-fat-jar
Veuillez noter que BinNavi utilise une base de données centrale PostgreSQL pour stocker les désassemblages/commentaires/traces - vous devez donc disposer d'une telle instance exécutée dans un endroit accessible. Vous pouvez lancer BinNavi comme suit :
java -jar target/binnavi-all.jar
Le chargement du code dans Eclipse pour un développement ultérieur nécessite un peu de configuration.
build.xml
PROJECT_LOC/src/main/java
java
**/yfileswrap/**
à la liste des répertoires à exclure.CMain
.Vous devriez être prêt à partir d'ici.
Dans le cadre de ce projet, nous distribuons un plugin IDA Pro qui exporte les désassemblages d'IDA vers le format de base de données PostgreSQL requis par BinNavi. Lors de l'exécution de BinNavi, configurez simplement le bon chemin pour IDA, cliquez sur le bouton "installer le plugin" si nécessaire - vous devriez maintenant pouvoir importer des désassemblages.
Pour l'instant, nous n'avons que le plugin d'exportation IDA - mais nous espérons vraiment que quelqu'un nous aidera à créer une fonctionnalité d'exportation pour d'autres désassembleurs dans un avenir proche.
Veuillez noter qu'à l'heure actuelle, la version Maven est le système de construction faisant autorité pour BinNavi. Gradle est purement expérimental et est susceptible de changer.
Vous pouvez créer BinNavi avec Gradle en exécutant ce qui suit :
Sous Linux/OS X :
$ ./gradlew clean jar
Sous Windows :
/gradlew.bat clean jar
Cela produira le pot dans la route du projet sous build/libs/
.
Sous Linux/OS X :
$ ./gradlew eclipse
Sous Windows :
./gradlew.bat eclipse
Dans le cadre du processus de création du projet, il téléchargera les dépendances. Une fois terminé, procédez comme suit pour charger dans Eclipse :
Votre espace de travail Eclipse est maintenant configuré et terminé pour BinNavi.
Sous Linux/OS X :
$ ./gradlew idea
Sous Windows :
./gradlew.bat idea
Dans le cadre du processus de création du projet, il téléchargera les dépendances. Une fois terminé, procédez comme suit pour charger dans IntelliJ :
Votre environnement IntelliJ est maintenant configuré et terminé pour IntelliJ.