版权所有 2011-2024 Google LLC。
该存储库包含 BinDiff 源代码。 BinDiff 是一个开源的二进制文件比较工具,可以快速查找反汇编代码中的差异和相似之处。
BinDiff是一款开源的二进制文件比较工具,可以帮助漏洞研究人员和工程师快速找到反汇编代码中的差异和相似之处。
借助 BinDiff,研究人员可以识别并隔离供应商提供的补丁中漏洞的修复。它还可用于在同一二进制文件的多个版本的反汇编之间移植符号和注释。这使得跟踪随时间的变化变得更加容易,并允许组织保留分析结果并实现二进制分析师之间的知识转移。
如果您想开始使用 BinDiff,请从发布页面下载预构建的安装包。
注意:BinDiff 依赖于单独的反汇编程序。它开箱即用,支持 IDA Pro、Binary Ninja 和 Ghidra。反汇编程序页面列出了支持的配置。
现有手册的子集可在docs/
目录中找到。
BinDiff 包含以下组件:
cmake
- 声明外部依赖项的 CMake 构建文件fixtures
- 用于测试 BinDiff 核心引擎的测试文件集合ida
- 与 IDA Pro 反汇编程序集成java
- Java 源代码。这包含BinDiff 视觉diff 用户界面及其相应的实用程序库。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 的 GUI 需要商业第三方图形可视化库 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
之后, java
子目录中的ui/build/libs
目录应包含自包含的bindiff-ui-all.jar
工件,可以使用标准java -jar
命令运行该工件。
原始论文概述了 BinDiff 背后的一般思想:
同一问题空间中的其他工具:
使用 BinDiff 的项目:
BinDiff 根据 Apache 许可证条款获得许可。请参阅许可证了解更多信息。
如果您想做出贡献,请在发送拉取请求之前阅读 CONTRIBUTING.md。您还可以报告错误或提交功能请求。