pwnfuzz/diffrays

GitHub: pwnfuzz/diffrays

一款基于 IDA Pro 的二进制补丁差异分析工具,支持通过 CVE 自动下载二进制文件并完成端到端差异分析。

Stars: 284 | Forks: 18

DiffRays Logo

PyPI - Downloads

# 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, 二进制分析, 二进制安全, 云安全运维, 云资产清单, 伪代码, 可视化, 恶意代码分析, 情报收集, 插件, 无后门, 漏洞研究, 网络调试, 自动化, 补丁对比, 逆向工具, 逆向工程, 配置文件