Авторские права принадлежат Google LLC, 2011–2024 гг.
Этот репозиторий содержит исходный код BinDiff. BinDiff — это инструмент сравнения двоичных файлов с открытым исходным кодом, позволяющий быстро находить различия и сходства в дизассемблированном коде.
BinDiff — это инструмент сравнения двоичных файлов с открытым исходным кодом, который помогает исследователям уязвимостей и инженерам быстро находить различия и сходства в дизассемблированном коде.
С помощью BinDiff исследователи могут выявлять и изолировать исправления уязвимостей в исправлениях, поставляемых поставщиками. Его также можно использовать для переноса символов и комментариев между дизассемблированием нескольких версий одного и того же двоичного файла. Это упрощает отслеживание изменений с течением времени, позволяет организациям сохранять результаты анализа и обеспечивает передачу знаний между бинарными аналитиками.
Если вы хотите только начать использовать BinDiff, загрузите готовые установочные пакеты со страницы выпусков.
Примечание. BinDiff использует отдельный дизассемблер. «Из коробки» он поставляется с поддержкой IDA Pro, Binary Ninja и Ghidra. На странице дизассемблеров перечислены поддерживаемые конфигурации.
Часть существующего руководства доступна в каталоге docs/
.
BinDiff содержит следующие компоненты:
cmake
— файлы сборки CMake, объявляющие внешние зависимостиfixtures
— набор тестовых файлов для проверки основного движка BinDiff.ida
— Интеграция с дизассемблером IDA Projava
— исходный код Java. Он содержит пользовательский интерфейс визуального сравнения BinDiff и соответствующую ему служебную библиотеку.match
— алгоритмы сопоставления для основного механизма BinDiff.packaging
— Исходники пакетов для установочных пакетов.tools
— вспомогательные исполняемые файлы, поставляемые вместе с продуктом. Приведенной ниже инструкции должно быть достаточно для создания как собственного кода, так и компонентов на основе Java.
Более подробные инструкции по сборке будут добавлены позже. Сюда входят готовые Dockerfile
и скрипты для сборки установочных пакетов.
BinDiff использует CMake для создания файлов сборки для тех компонентов, которые состоят из собственного кода C++.
Требуются следующие зависимости сборки:
Следующие зависимости сборки являются необязательными:
deps/idasdk
).Общие этапы сборки одинаковы в Windows, Linux и macOS. Ниже показаны команды для Linux.
Загрузите зависимости, которые не будут загружены автоматически:
mkdir -p build/out
git clone https://github.com/google/binexport build/binexport
unzip -q < path/to/idasdk_pro80.zip > -d build/idasdk
Затем настройте каталог сборки и сгенерируйте файлы сборки:
cmake -S . -B build/out -G Ninja
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX=build/out
-DBINDIFF_BINEXPORT_DIR=build/binexport
" -DIdaSdk_ROOT_DIR= ${PWD} build/idasdk "
Наконец, вызовите фактическую сборку. Двоичные файлы будут помещены в build/out/bindiff-prefix
:
cmake --build build/out --config Release
(cd build/out ; ctest --build-config Release --output-on-failure)
cmake --install build/out --config Release
Чтобы выполнить сборку без IDA, просто измените приведенный выше шаг настройки на
cmake -S . -B build/out -G Ninja
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX=build/out
-DBINDIFF_BINEXPORT_DIR=build/binexport
-DBINEXPORT_ENABLE_IDAPRO=OFF
Для создания графического пользовательского интерфейса на основе Java требуется коммерческая сторонняя библиотека визуализации графиков yFiles для отображения и макета графиков. Эта библиотека чрезвычайно мощная, и ее нелегко заменить.
Для сборки BinDiff использует Gradle 6.x и Java 11 LTS. Инструкции по установке см. в руководстве по установке.
Предполагая, что вы являетесь владельцем лицензии yFiles, установите переменную среды YFILES_DIR
в каталог, содержащий yFiles y.jar
и ysvg.jar
.
Примечание. BinDiff по-прежнему использует старую ветку yFiles версии 2.x.
Затем вызовите Gradle для загрузки внешних зависимостей и сборки:
Окна:
set YFILES_DIR=<pathtoyfiles_2.17>
cd java
gradle shadowJar
Linux или MacOS:
export YFILES_DIR=<path/to/yfiles_2.17>
cd java
gradle shadowJar
После этого каталог ui/build/libs
в подкаталоге java
должен содержать автономный артефактbindiff bindiff-ui-all.jar
, который можно запустить с помощью стандартной команды java -jar
.
Оригинальные статьи, в которых излагаются общие идеи BinDiff:
Другие инструменты в той же проблемной области:
Проекты, использующие BinDiff:
BinDiff лицензируется в соответствии с условиями лицензии Apache. См. ЛИЦЕНЗИЮ для получения дополнительной информации.
Если вы хотите внести свой вклад, прочтите CONTRIBUTING.md, прежде чем отправлять запросы на включение. Вы также можете сообщить об ошибках или отправить запрос на добавление функций.