Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
diaphora-mcp — MCP server 用于自动化二进制差异比较。 | Kitploit
工具/GitHubGitHub/xteardx/diaphora-mcp
静态分析漏洞分析逆向工程调试器模糊测试二进制分析二进制利用
GitHubxteardx/diaphora-mcp

diaphora-mcp

MCP server 用于自动化二进制差异比较。

查看仓库
17311个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Читать на русском языке

Diaphora MCP

Diaphora MCP 是一个用于自动二进制差异分析的 MCP(模型上下文协议)服务器。它通过 MCP 协议连接 Diaphora(差异分析引擎)和 IDA Pro(反汇编器),使得 AI 代理(如 Claude Code)能够执行二进制文件比较、发现安全补丁并分析变更。

特性

  • 导出:将分析后的 .i64 / .idb 数据库转换为 Diaphora SQLite 格式(通过 idat.exe 无头模式)
  • 差异分析:比较两个导出的数据库,按匹配类型和比率过滤结果
  • 漏洞分析:使用关键词匹配和启发式方法搜索与安全相关的变更
  • 补丁检测:自动检测新增的边界检查、空指针检查、错误处理和加密变更
  • 排名:根据 CFG、复杂度跳跃和安全指标对变更函数进行重要性排序
  • 调用图:比较调用路径(BFS,最多 N 层),检测调用级联中的根因变更
  • 元数据传递:准备在两个数据库之间传递的名称、注释和原型
  • IDA Pro MCP 集成:所有工具返回的地址和数据库路径可直接传递给 IDA Pro MCP 工具

安装

1. 依赖项

  • Python 3.10+
  • IDA Pro 8.x / 9.x(用于通过 idat.exe 进行无头导出)
  • 在 IDA 中安装 Diaphora 插件
  • Claude Code(或任何其他兼容 MCP 的客户端)

2. 安装包

root@kitploit:~
git clone https://github.com/xTeardx/diaphora-mcp.git
cd diaphora-mcp
pip install -e .

3. 路径配置

本包会尝试自动查找标准安装位置中的 IDA Pro 和 Diaphora。如果未找到,您可以设置以下环境变量:

对于 Claude Code,您可以在 ~/.claude.json(或您所用 MCP 客户端的相应配置文件)中指定它们:

root@kitploit:~
{
  "mcpServers": {
    "diaphora": {
      "command": "python",
      "args": ["path/to/repo/diaphora_mcp_server.py"],
      "env": {
        "IDAT_PATH": "C:\\Program Files\\IDA Pro 9.3\\idat.exe",
        "DIAPHORA_DIR": "C:\\Program Files\\IDA Pro 9.3\\plugins\\diaphora-3.4.1"
      },
      "timeout": 7200
    }
  }
}

注意: 对于非常大的二进制文件(>100 MB),请确保 timeout 至少为 7200(即 2 小时)。

3.1. Codex 和无头 IDA MCP

Codex 通常使用两个互补的 MCP 服务器:

  • diaphora-mcp — 本项目:导出、Diaphora 差异分析和结果分析;
  • ida-pro-mcp — 上游 IDA 检查服务器,用于 idb_open、反编译和地址级分析。

idalib-mcp 是 ida-pro-mcp 的无头后端,不是一个独立的 Diaphora 服务器。安装后,重新启动 Codex:

root@kitploit:~
uv run ida-pro-mcp --install codex --transport streamable-http --scope global --ida-rpc http://127.0.0.1:8745/mcp

对于本项目,stdio 配置就足够了:

root@kitploit:~
[mcp_servers.diaphora-mcp]
command = "python"
args = ["D:\\path\\to\\diaphora-mcp\\diaphora_mcp_server.py"]
startup_timeout_sec = 120

4. 准备用于差异分析的数据库

IDA Pro 必须先分析二进制文件(创建 .i64 或 .idb 文件)。之后:

root@kitploit:~
┃ export_idb_to_diaphora(idb_path="old_version.i64")
┃ export_idb_to_diaphora(idb_path="new_version.i64")

或者一步运行完整流程:

root@kitploit:~
┃ batch_export_and_diff(idb1="old.i64", idb2="new.i64")

不要将 .i64 直接传递给结果工具:它是 IDA 数据库,不是 SQLite。请先将其导出。

快速开始

root@kitploit:~
┃ # 1. 完整流程:导出两个 .i64 → 差异分析 → 摘要报告
┃ batch_export_and_diff(idb1="v1.0.i64", idb2="v1.1.i64")
 
┃ # 2. 如果数据库已导出
┃ diff_diaphora_dbs(db1="v1.0.sqlite", db2="v1.1.sqlite")
 
┃ # 3. 差异结果的安全分析
┃ analyze_diff_results(results_path="v1.0_vs_v1.1.diaphora")
 
┃ # 4. 变更的重要性排名
┃ rank_changes(results_path="v1.0_vs_v1.1.diaphora", top_n=20)
 
┃ # 5. 查找根因变更
┃ find_patch_root(results_path="v1.0_vs_v1.1.diaphora")
 
┃ # 6. 检测可能的安全补丁
┃ detect_security_patches(results_path="v1.0_vs_v1.1.diaphora")
 
┃ # 7. 生成完整报告
┃ summarize_patch(results_path="v1.0_vs_v1.1.diaphora")

示例(实时会话记录)

请参阅 examples/basic-session.md 以获取完整的逐步会话记录——从导出两个 IDB 数据库到比较单个函数。另有俄文版。

以下是服务器返回内容的预览:

输入 — 比较两个 SQLite3 DLL(2015 vs 2023):

root@kitploit:~
{"idb1_path": "old.i64", "idb2_path": "new.i64", "use_decompiler": false}

输出 — 导出 + 差异分析后的摘要:

root@kitploit:~
{
  "best_matches": 60,
  "partial_matches": 993,
  "multimatches": 52,
  "unmatched_primary": 2647
}

该会话遍历了 6 个 MCP 工具调用,展示了每一步的精确 JSON 输入/输出,并附有代理的推理过程。

调查单个数据库

root@kitploit:~
┃ # 获取数据库导出信息
┃ get_export_info(db_path="app.sqlite")
 
┃ # 搜索函数
┃ search_export_db(db_path="app.sqlite", name_pattern="%crypt%", min_instructions=50)
 
┃ # 检索伪代码
┃ get_function_pseudocode(db_path="app.sqlite", address="401000")

项目结构

root@kitploit:~
diaphora-mcp/
├── diaphora_mcp_server.py          # 主入口点
├── diaphora_mcp/
│   ├── diaphora_mcp_server.py      # MCP 工具注册
│   ├── config.py                   # 路径配置和自动检测
│   ├── models.py                   # 常量和模型
│   ├── core/
│   │   ├── export.py               # 无头导出,批量流程
│   │   ├── diff.py                 # 差异分析和 .diaphora 结果读取器
│   │   ├── analysis.py             # 函数搜索、比较、解释
│   │   ├── security.py             # 关键词匹配、补丁检测
│   │   ├── ranking.py              # 重要性排名
│   │   ├── graph.py                # 调用图、BFS 调用树、根因
│   │   ├── metadata.py             # 元数据准备(名称、注释)
│   │   └── report.py               # 整体补丁报告生成
│   └── utils/
│       ├── sqlite.py               # SQLite 辅助函数
│       ├── format.py               # 伪代码差异、特征向量提取
│       └── log.py                  # 导出日志工具
├── _diaphora_headless.py           # idat.exe -S 薄封装
└── logs/                           # 自动导出日志(动态创建)

MCP 工具参考(21 个工具)

导出

工具描述
export_idb_to_diaphora使用 IDA 无头模式将 .i64/.idb 数据库导出为 SQLite 格式
batch_export_and_diff完整流程:导出主库 → 导出次库 → 差异分析 → 摘要

差异分析

工具描述
diff_diaphora_dbs对两个导出的 Diaphora SQLite 数据库进行差异分析
get_diff_results读取带过滤器的 .diaphora 差异文件
get_diff_summary返回匹配统计信息

分析

安全

工具描述
detect_security_patches检测可能的安全修复(边界检查、内存安全、反调试等)

排名

工具描述
rank_changes按重要性对变更的函数进行排名(0-100 分)

调用图

工具描述
get_changed_callgraph比较函数的入站和出站调用
compare_call_path从某个函数开始遍历调用图(BFS 调用路径比较,最多 N 层)
find_patch_root检测导致调用级联的根因函数

性能

工具描述
performance_report返回聚合的内存、缓存和连接统计信息

元数据

工具描述
transfer_metadata为批量传输准备名称、注释和原型

IDA Pro GUI 集成(XML-RPC 桥)

该项目内置了与运行中的 GUI IDA Pro 会话的集成,可直接从活动的 IDA 窗口进行即时导出,无需担心数据库锁定冲突。

  1. 自动启动:将 diaphora_gui_listener.py 复制到您的 IDA Pro plugins/ 目录中。它将在 IDA 启动时在端口 28652 上启动一个后台 XML-RPC 服务器。
  2. 智能导出:当调用 export_idb_to_diaphora 时,MCP 服务器会检查端口 28652。如果存在活动会话,则直接在 GUI 中执行导出。否则,它会自动回退到通过 idat.exe 的无头后台执行。

有关配置桥的详细说明,请参阅 GUI_INSTRUCTIONS.md。

处理巨型数据库(10 万+ 个函数)

处理超大型项目时,Diaphora MCP 会应用特定的优化:

  • 递归限制:Python 递归限制自动提升至 100000(sys.setrecursionlimit),以防止在大型调用图遍历期间崩溃。
  • SQLite 事务优化:在您的 diaphora_config.py 中,设置 COMMIT_AFTER_EACH_GUI_UPDATE = False 可减少磁盘写入,将 GUI 导出速度提升 2 到 3 倍。
  • Hex-Rays 微码:当不严格要求反编译器时,禁用微码导出(在 Diaphora 配置中设置 EXPORTING_USE_MICROCODE = False),以加快导出速度。

IDA Pro MCP 集成

analyze_diff_results、compare_functions 和 find_function_match 等工具会返回一个包含地址和路径的 ida_pro_mcp 块。这些信息可以直接传递给 ida-pro-mcp 工具:

root@kitploit:~
┃ # 1. Diaphora 找到一个可疑函数
┃ analyze_diff_results(results_path="diff.diaphora")
┃   → addr1="401000", db1="old.sqlite"
 
┃ # 2. IDA Pro MCP 对其进行反编译
┃ decompile_function(address="401000")

示例

如需查看 Diaphora MCP 的实际运行效果,请参阅以下示例:

  • 基础会话记录:一个真实的 MCP 会话演练,包含每个工具调用的精确 JSON 输入/输出——从导出到函数比较。另有俄文版。

AI 代理指南(重要)

如果您是使用此协议的人工智能编码助手(如 Claude Code),请牢记以下兼容性规则:

  1. GUI 导出与无头导出的模式:

    • 通过活动 GUI 会话(ida_mcp.py 插件)导出将生成一个自定义模式,其中包含 calls、strings、structures 等表,但没有 program 表。
    • 无头导出(通过 idat.exe)将生成官方的 Diaphora 模式,其中包含 program 表。
    • 关键:差异分析引擎(diff_diaphora_dbs)需要官方模式。如果您打算比较/差异分析数据库,请始终使用无头导出。
  2. GUI 中锁定的数据库:

    • 当前在 GUI IDA Pro 中打开的数据库处于锁定状态。尝试对其进行无头导出将失败。
    • 如果您需要对当前打开的数据库进行差异分析,请要求用户在 GUI 中关闭它(或打开一个虚拟数据库)以释放文件锁,然后触发无头导出。
  3. 避免数据库名称冲突:

    • Diaphora 导出数据库默认命名为 <basename>.diaphora.sqlite。
    • 切勿将 <basename>.sqlite 用于 Diaphora 导出,因为这会与 ida-pro-mcp 监控程序创建的内部缓存数据库发生冲突。

验证状态与限制

经过检查的 IDA Pro 9.3 固定装置通过了回归测试套件:16 passed, 1 xpassed。还验证了对两个 SQLite3 DLL 的实际分阶段导出和 Diaphora 差异分析。对于大型或 GUI 打开的 IDB,仍需要空闲的 IDA 锁、有效的 DIAPHORA_OUTPUT_ROOT 以及足够大的 MCP 客户端超时设置。

许可证

MIT

下载工具
变量描述示例
IDAT_PATHidat.exe 的完整路径C:\Program Files\IDA Pro 9.3\idat.exe
DIAPHORA_DIR包含 diaphora.py 的文件夹C:\Program Files\IDA Pro 9.3\plugins\diaphora-3.4.1
DIAPHORA_OUTPUT_ROOT允许新导出文件的根目录D:\\diaphora-outputs
DIAPHORA_PYTHON用于差异分析的 Python 解释器/usr/bin/python3(默认为 sys.executable)
工具描述
analyze_diff_results使用安全关键词和过滤器筛选结果
compare_functions在两个数据库中对函数进行并排比较
find_function_match在第二个二进制文件中匹配函数,附带置信度指标
explain_similarity分解相似性因素(助记符、CFG、常量、原型、哈希)
detect_behavior_change提供函数逻辑变化的自然语言摘要
summarize_patch生成全面的更新报告
search_export_db按名称/指令/复杂度查询导出的函数
get_function_pseudocode获取函数的伪代码和元数据
get_export_info检索通用数据库元数据