
版权所有 2011-2026 Google LLC。
本仓库包含 BinDiff 的源代码。BinDiff 是一款开源二进制文件比较工具,可快速发现反汇编代码中的差异与相似之处。
BinDiff 是一款开源二进制文件比较工具,可帮助漏洞研究人员和工程师快速发现反汇编代码中的差异与相似之处。
借助 BinDiff,研究人员可以识别并隔离供应商补丁中的漏洞修复。它还可用于在不同版本同一二进制的反汇编结果之间移植符号和注释。这使得跟踪随时间变化的工作更加容易,并允许组织保留分析结果,促进二进制分析师之间的知识传递。
如果你只想快速上手使用 BinDiff,请从发布页面下载预构建的安装包。
注意:BinDiff 依赖于单独的反汇编器。默认情况下,它支持 IDA Pro、Binary Ninja 和 Ghidra。支持的配置列在反汇编器页面中。
BinDiff 包含以下组件:
cmake - CMake 构建文件,声明外部依赖项。fixtures - 用于测试 BinDiff 核心引擎的测试文件集合。ida - 与 IDA Pro 反汇编器的集成。java - Java 源代码。包含 BinDiff 的可视化差异对比用户界面及其对应的工具库。match - BinDiff 核心引擎的匹配算法。packaging - 安装包的打包源码。tools - 随产品一起分发的辅助可执行文件。以下说明应足以构建本地代码和基于 Java 的组件。
更详细的构建说明将在后续补充。这包括用于构建安装包的现成 Dockerfile 和脚本。
BinDiff 使用 CMake 为那些由原生 C++ 代码组成的组件生成构建文件。
需要以下构建依赖项:
在 Windows、Linux 和 macOS 上的通用构建步骤相同。以下展示 Linux 上的命令。
接下来,配置构建目录并生成构建文件:
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
最后,调用实际的构建过程。二进制文件将放在 build/ 目录下:
cmake --build build --config Release
(cd build; ctest --build-config Release --output-on-failure)
cmake --install build --config Release
要构建不含 IDA 的版本,只需将上述配置步骤改为:
cmake -S . -B build/out -G Ninja -DCMAKE_BUILD_TYPE=Release \
-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 下载外部依赖项并构建:
Windows:
set YFILES_DIR=<path\to\yfiles_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 许可协议。更多信息请参见 LICENSE。
如果你想贡献代码,请在发送拉取请求前阅读 CONTRIBUTING.md。你也可以报告 Bug 或提出功能请求。