pwnfuzz/diffrays
GitHub: pwnfuzz/diffrays
一款基于 IDA Pro 的二进制补丁差异分析工具,支持通过 CVE 自动下载二进制文件并完成端到端差异分析。
Stars: 284 | Forks: 18
# DiffRays - IDA Pro 二进制差异分析引擎
DiffRays 是一款面向研究的**二进制补丁差异分析**工具,旨在辅助**漏洞研究、漏洞利用开发和逆向工程**。它利用 **IDA Pro** 和 **IDA Domain API** 提取函数的伪代码,并在打补丁和未打补丁的二进制文件之间进行结构化差异分析。
## ✨ 功能特性
- 🔎 **补丁差异分析**:比较不同二进制版本的函数以识别代码变更。
- 🧩 **IDA Pro 集成**:使用 IDA Pro 和 IDA Domain API 进行准确的伪代码提取。
- 📂 **SQLite 输出**:将结果存储在 SQLite 数据库中,便于重用和分析。
- 🌐 **Web 界面**:内置服务器模式,可交互式浏览、搜索和可视化差异结果。
- 🤖 **AutoDiff**:自动获取易受攻击和已修补的二进制文件(通过 CVE、文件或月份)并端到端运行差异分析。
- 📊 **面向研究**:旨在支持漏洞研究和漏洞利用开发工作流。
## 🛠️ 系统要求
- [IDA Pro 版本](https://hex-rays.com/ida-pro/)
- IDA Domain 库需要 IDA Pro 9.1.0 或更高版本。
- [IDA Domain API](https://github.com/HexRaysSA/ida-domain)
- Python 3.8+
- 其他 Python 依赖项
## ⚙️ 安装
### 快速安装(推荐)
```
pip install diffrays
```
### 替代方案:从源码安装
如果您想安装最新的开发版本:
```
git clone https://github.com/pwnfuzz/diffrays
cd diffrays
pip install .
```
## 🔧 设置
**设置 IDADIR 环境变量以指向您的 IDA 安装目录:**
```
Windows:
set IDADIR="[IDA Installation Directory]"
Linux:
export IDADIR="[IDA Installation Directory]"
```
## 🚀 用法
```
> diffrays --help
______ _ __ ________
| _ (_)/ _|/ _| ___ \
| | | |_| |_| |_| |_/ /__ _ _ _ ___
| | | | | _| _| // _` | | | / __|
| |/ /| | | | | | |\ \ (_| | |_| \__ \
|___/ |_|_| |_| \_| \_\__,_|\__, |___/
__/ |
|___/ v2.0 Tau
usage: diffrays [-h] {diff,server,autodiff} ...
Binary Diff Analysis Tool - Decompile, Compare, and Visualize Binary Changes
positional arguments:
{diff,server,autodiff}
Command to execute
diff Analyze two binaries and generate differential database
server Launch web server to view diff results
autodiff Auto-download binaries (via CVE or manual input) and run diff
options:
-h, --help show this help message and exit
Examples:
diffrays autodiff --cve CVE-2025-29824
diffrays autodiff -f clfs.sys -m 2025-09
diffrays autodiff -f clfs.sys -m 2025-09 -w 2023-H2
diffrays diff old_binary.exe new_binary.exe
diffrays diff old.so new.so -o custom_name.sqlite --log
diffrays server --db-path result_old_new_20231201.sqlite --debug
For more information, visit: https://github.com/pwnfuzz/diffrays
```
### 🔄 AutoDiff – 自动二进制收集与差异分析
autodiff 命令通过自动获取二进制文件(通过 CVE 或手动参数)并运行差异分析而无需手动下载,从而简化了补丁分析。
**示例 1:通过 CVE 运行**
```
diffrays autodiff --cve CVE-2025-29824
```
这将:
- 在 [Winbindex](https://winbindex.m417z.com/) 的帮助下,自动定位与该 CVE 相关的易受攻击和已修补的二进制文件。
- 运行差异分析引擎。
- 生成结果数据库。
**示例 2:通过文件 + 月份运行**
```
diffrays autodiff -f clfs.sys -m 2025-09
```
这将:
- 从 2025 年 9 月的更新中下载 `clfs.sys`。
- 定位其先前版本并自动运行差异分析。
- 当 `--cve` 未能正确识别易受攻击的组件时提供后备方案(如果 CVE 影响多个二进制文件或元数据不完整,可能会发生这种情况)。
### ⚙️ 手动二进制差异分析
1. 在 IDA 中运行补丁差异分析
```
python diffrays.py diff old_binary.exe new_binary.exe
```
2. 启动 DiffRays 服务器
```
python diffrays.py server --db-path diff_results.sqlite
```
3. 在浏览器中打开 http://localhost:5555 查看结果。
### 👾 分析无符号二进制文件
当对不包含符号或已被剥离的二进制文件进行差异分析时,您可以启用启发式匹配。在启发式模式下,函数是基于代码模式和结构相似性而不是函数名称进行匹配的。
```
python diffrays.py diff old_binary.exe new_binary.exe --heuristic
```
## 🔬 示例工作流
### 手动差异分析 CVE-2025-29824
1. **收集目标二进制文件**
- CVE-2025-1246 影响 **通用日志文件系统驱动程序 (`Clfs.sys`)**。
- 从 Microsoft 的更新包中下载该驱动程序的两个版本(通过 WinBIndex 或您首选的来源):
- 易受攻击的构建版本:**Clfs.sys 10.0.22621.5037** → [在此下载](https://msdl.microsoft.com/download/symbols/clfs.sys/4A2750956f000/clfs.sys)
- 已修补的构建版本:**Clfs.sys 10.0.22621.5189** → [在此下载](https://msdl.microsoft.com/download/symbols/clfs.sys/68C175656f000/clfs.sys)
- 将它们保存到工作目录中:
curl -L -o clfs_10.0.22621.5037.sys https://msdl.microsoft.com/download/symbols/clfs.sys/4A2750956f000/clfs.sys
curl -L -o clfs_10.0.22621.5189.sys https://msdl.microsoft.com/download/symbols/clfs.sys/68C175656f000/clfs.sys
2. **运行 DiffRays**
python diffrays.py diff clfs_10.0.22621.5037.sys clfs_10.0.22621.5189.sys
3. **启动 Web 服务器**
python diffrays.py server --db-path clfs_diff.sqlite
4. **交互式浏览**
- 打开 http://127.0.0.1:5555

5. **浏览差异结果**
- 差异结果页面显示二进制差异分析的结果,并可基于变更进行排序。

6. **查看函数详情**
- 点击函数可显示详细的差异结果。

### 自动差异分析 - CVE-2025-53149
1. 使用 CVE ID 运行 AutoDiff
```
diffrays autodiff --cve CVE-2025-53149
```
2. 自动分析
Diffrays 将:
- 识别受影响的组件。
- 下载易受攻击和已修补的二进制文件。
- 执行差异分析并自动生成结果数据库。

## 📖 用例
- 研究 Microsoft Patch Tuesday 漏洞
- 识别新软件版本中引入的安全修复
- 通过分析已修补与未修补的代码路径来支持漏洞利用开发
- 逆向工程软件更新
## 💡 灵感来源
DiffRays 的灵感来源于二进制差异分析领域的先前研究和工具,包括:
- [BinDiff](https://github.com/google/bindiff) - 快速发现反汇编代码中的差异和相似之处。
- [Diaphora](https://github.com/joxeankoret/diaphoraDiaphora) - Diaphora,最先进的免费开源程序差异分析工具。
- [Ghidriff](https://github.com/clearbluejar/ghidriff) - Python 命令行 Ghidra 二进制差异分析引擎
## ⚠️ 免责声明
本项目仅供教育和研究目的使用。
作者不纵容或鼓励恶意使用此工具。
## 📜 许可证
本项目基于 MIT 许可证授权 - 详见 [LICENSE](https://github.com/pwnfuzz/DiffRays/blob/main/LICENSE) 文件。
标签:CVE分析, Diff工具, IDA Pro, Mutation, Patch Diffing, Python, SQLite, 二进制分析, 二进制安全, 云安全运维, 云资产清单, 伪代码, 可视化, 恶意代码分析, 情报收集, 插件, 无后门, 漏洞研究, 网络调试, 自动化, 补丁对比, 逆向工具, 逆向工程, 配置文件