google/bindiff
GitHub: google/bindiff
Google 开源的工业级二进制比对工具,通过图论算法快速分析反汇编代码的差异与相似性,帮助研究人员定位补丁修复点并移植分析成果。
Stars: 3034 | Forks: 226

版权所有 2011-2024 Google LLC。
# BinDiff
此代码库包含 BinDiff 的源代码。BinDiff 是一个开源的
二进制文件比较工具,用于快速找出反汇编代码中的
差异与相似之处。
## 目录
- [关于 BinDiff](#about-bindiff)
- [快速开始](#quickstart)
- [文档](#documentation)
- [代码结构](#codemap)
- [从源码构建](#building-from-source)
- [许可证](#license)
- [参与贡献](#getting-involved)
## 关于 BinDiff
BinDiff 是一个开源的二进制文件比较工具,旨在帮助
漏洞研究人员和工程师快速找出反汇编代码中的
差异与相似之处。
借助 BinDiff,研究人员可以识别并隔离供应商提供的补丁中
漏洞的修复措施。它还可用于在相同二进制文件的
多个版本的反汇编代码之间移植符号和注释。这
使得随着时间的推移跟踪修改变得更加容易,并允许组织保留分析
结果,同时促进二进制分析师之间的知识传递。
### 用例
* 比较支持 x86、MIPS、ARM、PowerPC 及流行[反汇编器](docs/disassemblers.md)所支持的其他架构的二进制文件。
* 识别不同二进制文件中相同和相似的函数
* 将函数名称、注释和局部名称从一个反汇编文件移植到另一个
* 检测并突出显示同一函数的两个变体之间的更改
## 快速开始
如果您想直接开始使用 BinDiff,请从
[发布页面](https://github.com/google/bindiff/releases)下载预构建的安装
包。
注意:BinDiff 依赖于单独的反汇编器。开箱即用时,它附带了对 IDA Pro、Binary Ninja 和 Ghidra 的支持。[反汇编器页面](docs/disassemblers.md)列出了受支持的配置。
## 文档
现有[手册](https://www.zynamics.com/bindiff/manual)的子集可在
[`docs/` 目录](docs/README.md)中找到。
## 代码结构
BinDiff 包含以下组件:
* [`cmake`](cmake) - 声明外部依赖的 CMake 构建文件
* [`fixtures`](fixtures) - 用于测试 BinDiff
核心引擎的测试文件集合
* [`ida`](ida) - 与 IDA Pro 反汇编器的集成
* [`java`](java) - Java 源代码。包含 BinDiff 可视化差异
用户界面及其对应的实用程序库。
* [`match`](match) - BinDiff 核心引擎的匹配算法
* [`packaging`](packaging) - 安装包的打包源文件
* [`tools`](tools) - 随产品一起提供的辅助可执行文件
## 从源码构建
以下说明足以构建原生代码和
基于 Java 的组件。
更详细的构建说明将在稍后添加。这包括
用于构建安装包的现成 `Dockerfile` 和脚本。
### 原生代码
BinDiff 使用 CMake 为那些由
原生 C++ 代码组成的组件生成构建文件。
需要以下构建依赖项:
* [BinExport](https://github.com/google/binexport) 12,BinDiff 的配套插件,
也包含大量共享代码
* Boost 1.83.0 或更高版本(BinExport 中附带 1.83.0 的部分副本,
将自动使用)
* [CMake](https://cmake.org/download/) 3.14 或更高版本
* [Ninja](https://ninja-build.org/) 用于加速构建
* Linux/macOS 上的 GCC 9 或最新版本的 Clang。在 Windows 上,请使用
Visual Studio 2019 编译器和 Windows 10 的 Windows SDK。
* Git 1.8 或更高版本
* 将被下载的依赖项:
* Abseil、GoogleTest、Protocol Buffers (3.14) 和 SQLite3
* Binary Ninja SDK
以下构建依赖项是可选的:
* 仅限 IDA Pro:IDA SDK 8.2 或更高版本(解压至 `deps/idasdk`)
在 Windows、Linux 和 macOS 上的一般构建步骤是相同的。以下
展示了 Linux 的命令。
下载不会自动下载的依赖项:
```
mkdir -p build/out
git clone https://github.com/google/binexport build/binexport
unzip -q -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 的情况下构建
要在不包含 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
构建基于 Java 的 GUI 需要商业第三方图形
可视化库 [yFiles](https://www.yworks.com/products/yfiles) 用于图形
显示和布局。这个库非常强大,且不易被
替代。
为了构建,BinDiff 使用 Gradle 6.x 和 Java 11 LTS。请参阅其
[安装指南](https://docs.gradle.org/6.8.3/userguide/installation.html)
了解有关安装的说明。
假设您是 yFiles 许可证持有者,请将 `YFILES_DIR` 环境
变量设置为包含 yFiles 的 `y.jar` 和 `ysvg.jar` 的目录。
注意:BinDiff 仍然使用较旧的 yFiles 2.x 分支。
然后调用 Gradle 以下载外部依赖并进行构建:
Windows:
```
set YFILES_DIR=
cd java
gradle shadowJar
```
Linux 或 macOS:
```
export YFILES_DIR=
cd java
gradle shadowJar
```
之后,`java` 子目录下的 `ui/build/libs` 目录应
包含自包含的 `bindiff-ui-all.jar` 构件,可以使用
标准的 `java -jar` 命令运行它。
## 延伸阅读 / 类似工具
概述 BinDiff 背后一般思想的原始论文:
* Thomas Dullien 和 Rolf Rolles。*Graph-Based Comparison of Executable
Objects*。[bindiffsstic05-1.pdf](docs/papers/bindiffsstic05-1.pdf)。
SSTIC ’05, Symposium sur la Sécurité des Technologies de l’Information et des
Communications。2005。
* Halvar Flake。*Structural Comparison of Executable Objects*。
[dimva_paper2.pdf](docs/papers/dimva_paper2.pdf)。第 161-173 页。Detection of
Intrusions and Malware & Vulnerability Assessment。2004.3-88579-375-X。
同一问题领域的其他工具:
* [Diaphora](https://github.com/joxeankoret/diaphora),一个实现了许多相同理念的
高级程序 diffing 工具。
* [TurboDiff](https://www.coresecurity.com/core-labs/open-source-tools/turbodiff-cs),一个现已停止维护的 IDA Pro 程序 diffing 插件。
使用 BinDiff 的项目:
* [VxSig](https://github.com/google/vxsig),一个能够从一组相似二进制文件中
自动生成 AV 字节特征码的工具。
## 许可证
BinDiff 根据Apache许可证的条款获得许可。有关
更多信息,请参见 [LICENSE](LICENSE)。
## 参与贡献
如果您想做出贡献,请在发送 pull request 之前阅读 [CONTRIBUTING.md](CONTRIBUTING.md)。您也可以报告 bug 或提交功能
请求。
标签:Bash脚本, Binary Ninja, BinDiff, DAST, Ghidra, Google, Hakrawler, IDA Pro, JS文件枚举, MIPS, Nuclei, PowerPC, x86, 二进制分析, 二进制发布, 二进制对比, 云安全运维, 云资产清单, 代码差异分析, 反汇编代码, 后台面板检测, 域名枚举, 开源工具, 恶意软件分析, 情报收集, 漏洞研究, 相似度检测, 符号移植, 补丁对比, 逆向工程