Urheberrecht 2011–2020 Google LLC
BinNavi ist eine Binäranalyse-IDE – eine Umgebung, die es Benutzern ermöglicht, Kontrollflussdiagramme von disassembliertem Code zu untersuchen, zu navigieren, zu bearbeiten und zu kommentieren, dasselbe für das Aufrufdiagramm der ausführbaren Datei zu tun, Ausführungsspuren zu sammeln und zu kombinieren und allgemein den Überblick zu behalten von Analyseergebnissen innerhalb einer Gruppe von Analysten.
Hinweis: Das BinNavi-Projekt befindet sich nicht mehr in der aktiven Entwicklung.
BinNavi verwendet eine kommerzielle Diagrammvisualisierungsbibliothek eines Drittanbieters (yFiles) zum Anzeigen und Anordnen von Diagrammen. Diese Bibliothek ist immens leistungsfähig und nicht leicht austauschbar.
Um eine direkte Entwicklung mit yFiles durchführen zu können, benötigen Sie eine Entwicklerlizenz dafür. Gleichzeitig möchten wir, dass die Community einen Beitrag zu BinNavi leisten kann, ohne eine kommerzielle yFiles-Lizenz zu benötigen. Um dies zu erreichen und der yFiles-Lizenz zu entsprechen, müssen alle Schnittstellen zu yFiles ordnungsgemäß verschleiert werden.
Um dies zu erreichen, haben wir Folgendes getan:
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
Wir verteilen eine vorgefertigte JAR-Datei mit dem gesamten Code in den yfileswrap
Unterpaketen – vorverlinkt und für yFiles verschleiert. Wenn Sie Code in BinNavi ändern oder hinzufügen möchten und keine yFiles-Lizenz haben, können Sie in den Nicht-yfileswrap-Paketen so ziemlich alles tun, was Sie wollen – Sie können einfach die lib/yfileswrap-obfuscated.jar
in Ihren Klassenpfad einfügen Testen Sie und sehen Sie sich die Ergebnisse an.
Wenn Sie Änderungen an den yfileswrap
Unterverzeichnissen vornehmen möchten, beachten Sie bitte, dass Sie eine gültige yFiles-Lizenz benötigen – und dass jeder Beitrag, den Sie zum BinNavi-Projekt leisten, deren Lizenzvereinbarung einhalten muss. Das bedeutet, dass Sie ihre inneren APIs nicht einfach unter anderen Namen usw. verfügbar machen können.
Wir werden dies durchsetzen – wir sind sehr froh, einen Weg gefunden zu haben, BinNavi mit der yFiles-Abhängigkeit als Open-Source-Version bereitzustellen, und wir werden sicherstellen, dass jeder Code, den wir abrufen, die yFiles-Lizenz respektiert.
Um die yFiles-Wrapper-Bibliothek neu zu erstellen, kopieren Sie zunächst y.jar
und ysvg.jar
third_party/java/yfiles
. Dann neu aufbauen mit:
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 verwendet Maven für sein Abhängigkeitsmanagement, jedoch nicht für den eigentlichen Build. Java 11 ist die mindestens unterstützte Version.
Um von Grund auf neu zu erstellen, verwenden Sie diese Befehle:
mvn dependency:copy-dependencies
ant build-binnavi-fat-jar
Bitte beachten Sie, dass BinNavi eine zentrale PostgreSQL-Datenbank zum Speichern von Disassemblierungen/Kommentaren/Spuren nutzt – daher muss eine solche Instanz an einem für Sie zugänglichen Ort ausgeführt werden. Sie können BinNavi wie folgt starten:
java -jar target/binnavi-all.jar
Das Laden des Codes in Eclipse zur weiteren Entwicklung erfordert ein wenig Konfiguration.
build.xml
PROJECT_LOC/src/main/java
java
**/yfileswrap/**
zur Liste der auszuschließenden Verzeichnisse hinzu.CMain
.Von hier aus sollten Sie startklar sein.
Im Rahmen dieses Projekts vertreiben wir ein IDA Pro-Plugin, das Disassemblies von IDA in das von BinNavi benötigte PostgreSQL-Datenbankformat exportiert. Wenn Sie BinNavi ausführen, konfigurieren Sie einfach den richtigen Pfad für IDA und klicken Sie bei Bedarf auf die Schaltfläche „Plugin installieren“ – Sie sollten nun in der Lage sein, Disassemblies zu importieren.
Im Moment haben wir nur das IDA-Export-Plugin – aber wir hoffen sehr, dass uns in naher Zukunft jemand beim Aufbau der Exportfunktionalität für andere Disassembler hilft.
Bitte beachten Sie, dass derzeit der Maven-Build das maßgebliche Build-System für BinNavi ist. Gradle ist rein experimentell und wird sich wahrscheinlich ändern.
Sie können BinNavi mit Gradle erstellen, indem Sie Folgendes ausführen:
Unter Linux / OS X:
$ ./gradlew clean jar
Unter Windows:
/gradlew.bat clean jar
Dadurch wird das JAR in der Projektroute unter build/libs/
erstellt.
Unter Linux / OS X:
$ ./gradlew eclipse
Unter Windows:
./gradlew.bat eclipse
Im Rahmen des Projekterstellungsprozesses werden die Abhängigkeiten heruntergeladen. Wenn Sie fertig sind, gehen Sie zum Laden in Eclipse wie folgt vor:
Ihr Eclipse-Arbeitsbereich ist jetzt für BinNavi eingerichtet und vollständig.
Unter Linux / OS X:
$ ./gradlew idea
Unter Windows:
./gradlew.bat idea
Im Rahmen des Projekterstellungsprozesses werden die Abhängigkeiten heruntergeladen. Wenn Sie fertig sind, führen Sie zum Laden in IntelliJ Folgendes aus:
Ihre IntelliJ-Umgebung ist jetzt für IntelliJ eingerichtet und vollständig.