© Google LLC, 2011–2020 гг.
BinNavi — это IDE для двоичного анализа — среда, которая позволяет пользователям проверять, перемещаться, редактировать и аннотировать графы потоков управления дизассемблированного кода, делать то же самое для графа вызовов исполняемого файла, собирать и комбинировать трассировки выполнения и в целом отслеживать результатов анализа среди группы аналитиков.
Примечание. Проект BinNavi больше не находится в активной разработке.
BinNavi использует коммерческую стороннюю библиотеку визуализации графиков (yFiles) для отображения и компоновки графиков. Эта библиотека чрезвычайно мощная, и ее нелегко заменить.
Чтобы осуществлять прямую разработку с использованием yFiles, вам необходима лицензия разработчика. В то же время мы хотим, чтобы сообщество могло вносить свой вклад в BinNavi, не нуждаясь в коммерческой лицензии yFiles. Чтобы сделать это и соответствовать лицензии yFiles, все интерфейсы yFiles должны быть должным образом запутаны.
Чтобы добиться этого, мы сделали следующее:
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
Мы распространяем предварительно созданный JAR-файл со всем кодом в подпакетах yfileswrap
, предварительно связанным и запутанным с помощью yFiles. Если вы хотите изменить или добавить код в BinNavi и у вас нет лицензии yFiles, вы можете свободно делать с пакетами, отличными от yfileswrap, практически все, что захотите — вы можете просто поместить lib/yfileswrap-obfuscated.jar
в свой путь к классам, чтобы протестируйте и посмотрите результаты.
Если вы хотите внести изменения в подкаталоги yfileswrap
, имейте в виду, что вам понадобится действующая лицензия yFiles — и любой вклад, который вы вносите в проект BinNavi, должен соответствовать их лицензионному соглашению. Это означает, что вы не можете просто предоставить их внутренние API под разными именами и т. д.
Мы будем обеспечивать это — мы очень рады, что нашли способ открыть исходный код BinNavi с зависимостью yFiles, и мы позаботимся о том, чтобы любой код, который мы извлекаем, соответствовал лицензии yFiles.
Чтобы перестроить библиотеку-оболочку yFiles, сначала скопируйте y.jar
и ysvg.jar
в third_party/java/yfiles
. Затем перестройте с помощью:
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 использует Maven для управления зависимостями, но не для фактической сборки. Java 11 — минимальная поддерживаемая версия.
Для сборки с нуля используйте следующие команды:
mvn dependency:copy-dependencies
ant build-binnavi-fat-jar
Имейте в виду, что BinNavi использует центральную базу данных PostgreSQL для хранения дизассемблирований/комментариев/трассировок, поэтому вам необходимо, чтобы такой экземпляр работал где-то доступно для вас. Запустить BinNavi можно следующим образом:
java -jar target/binnavi-all.jar
Загрузка кода в Eclipse для дальнейшей разработки требует некоторой настройки.
build.xml
PROJECT_LOC/src/main/java
java
**/yfileswrap/**
в список исключаемых каталогов.CMain
.Вы должны быть готовы уйти отсюда.
В рамках этого проекта мы распространяем плагин IDA Pro, который экспортирует дизассемблеры из IDA в формат базы данных PostgreSQL, который требуется BinNavi. При запуске BinNavi просто настройте правильный путь для IDA, при необходимости нажмите кнопку «Установить плагин» — теперь вы сможете импортировать дизассемблированные файлы.
На данный момент у нас есть только плагин экспорта IDA, но мы очень надеемся, что кто-нибудь поможет нам создать функционал экспорта для других дизассемблеров в ближайшем будущем.
Обратите внимание, что на данный момент сборка Maven является авторитетной системой сборки для BinNavi. Gradle является чисто экспериментальным и, вероятно, изменится.
Вы можете собрать BinNavi с помощью gradle, выполнив следующее:
В Linux/OS X:
$ ./gradlew clean jar
В Windows:
/gradlew.bat clean jar
Это создаст jar в маршруте проекта под build/libs/
.
В Linux/OS X:
$ ./gradlew eclipse
В Windows:
./gradlew.bat eclipse
В процессе создания проекта будут загружены зависимости. После завершения выполните следующие действия для загрузки в Eclipse:
Ваше рабочее пространство Eclipse теперь настроено и готово для BinNavi.
В Linux/OS X:
$ ./gradlew idea
В Windows:
./gradlew.bat idea
В процессе создания проекта будут загружены зависимости. После завершения выполните следующие действия для загрузки в IntelliJ:
Теперь ваша среда IntelliJ настроена и готова для IntelliJ.