目录

BinGraph — 二进制逆向图谱智能体平台

把二进制静态分析结果沉淀为可查询图谱,通过 MCP Server 让 AI 高效审计二进制。

一个 MCP Server → 覆盖全部图谱 → AI 按需 open_graph 加载

项目结构

BinGraph/
├── bingraph/               # 源码包
│   ├── builder/            # 构建器(idalib 无头采集 + 反编译缓存)
│   ├── server/             # MCP 查询服务
│   ├── data/sinks.yaml     # 78 条危险函数知识库
│   ├── query.py            # 查询引擎(NetworkX 内存图)
│   ├── db.py               # SQLite 存储层
│   ├── report.py           # HTML 报告生成
│   └── cli.py              # CLI 入口
├── graphs/                 # 所有图谱产物(gitignore)
│   ├── baby.bingraph/
│   └── re1.bingraph/
├── tests/                  # 测试
│   ├── test_cli.py         # CLI 集成测试
│   └── test_mcp_stdio.py   # MCP 全链路测试
├── pyproject.toml
└── README.md

安装

需要 Python 3.12+、IDA Pro 9.0+,且 idalib 已激活:

cd E:\AIxCC\BinGraph
python -m pip install -e .

激活 idalib(如果尚未):

python "E:\Program Files\IDA Professional 9.0\idalib\python\py-activate-idalib.py" -d "E:\Program Files\IDA Professional 9.0"

使用教程

1. 构建图谱

# 对任意二进制构建图谱,产物统一放入 graphs/
bingraph build path/to/target.exe -o graphs/target.bingraph

# 省略 -o 则在二进制同目录生成 <name>.bingraph/
bingraph build path/to/target.exe

# 跳过反编译只建图(快速,大型二进制适用)
bingraph build target.exe --skip-decompile

2. 查看统计

bingraph inspect graphs/target.bingraph

输出:函数数、边数(含 indirect/unresolved 分类)、字符串数、危险调用点数、反编译成功率。

3. 生成 HTML 报告

bingraph report graphs/target.bingraph
# 输出:graphs/target.bingraph/report.html

打开 report.html 可看到总览卡片、危险调用表格、top 出度函数、字符串列表、可搜索函数表。

4. 启动 MCP 服务(接入 AI)

bingraph serve

服务通过 stdio 运行,供 Claude Code / Cursor / Cherry Studio 等 MCP 客户端调用。

Claude Code 已预配置~/.claude.json 中的 bingraph 条目)。重启 Claude 后即可在对话中使用。

5. 在 AI 对话中使用

AI 工作流示例(审计 re1.exe 的 system 调用风险):

用户: 加载 re1.exe 的图谱,分析 system 调用链

AI → open_graph("E:\AIxCC\BinGraph\graphs\re1.bingraph")
AI → list_dangerous_calls(category="exec")            # 找出所有 exec 类危险
AI → find_call_paths(source="_main", sink="system")   # 查 _main→system 路径
AI → get_pseudocode("_main", max_lines=30)            # 看 _main 源代码
AI → get_subgraph_summary("_main")                    # _main 的邻域关系

典型分析模式

你想知道什么 用什么工具
这个二进制里有什么危险调用 list_dangerous_calls
从入口能到达某个危险函数吗 find_call_paths
某个函数做了什么 get_pseudocode + get_strings
某个函数上下游关系 callers / callees
快速了解一个函数 get_subgraph_summary
搜索特定函数名 search_functions

6. 多图谱切换

不用改配置、不用重启,同一 session 内随时切:

AI → open_graph("E:\AIxCC\BinGraph\graphs\project_a.bingraph")
  ... 分析 project_a ...
AI → close_graph()
AI → open_graph("E:\AIxCC\BinGraph\graphs\project_b.bingraph")
  ... 分析 project_b ...

MCP 工具参考

工具 说明
open_graph(graph_dir) 加载图谱,之后所有查询针对该图谱
close_graph 释放当前图谱
graph_overview 全局统计:函数/边/indirect/危险分类分布
search_functions(pattern, kind) 按函数名(name)或字符串内容(string)搜索
get_function(func) 单函数完整信息 + 关联字符串 + 危险调用
callers(func, depth) 向上 N 跳 caller(默认过滤库函数)
callees(func, depth) 向下 N 跳 callee
find_call_paths(source, sink) BFS 最短调用路径
list_dangerous_calls(category, severity) 危险调用点清单(按类别/严重性过滤)
get_subgraph_summary(func, depth) LLM 友好邻域摘要
get_strings(func) 函数引用的字符串
get_pseudocode(func, max_lines) 分页读取反编译伪代码

图谱目录结构

target.bingraph/
├── graph.db          # SQLite:functions / call_edges / strings / imports / sinks / danger_call_sites
├── pseudocode/       # 反编译缓存 {ea:x}.c
├── meta.json         # 构建元信息 + 统计
├── build_summary.json
└── report.html       # 人类可读报告

危险函数知识库

内置 78 条来自 Microsoft SDL banned.h + CWE 分类的 sink,包含 7 个类别:

类别 示例 用途
buffer_copy strcpy, memcpy, strcat 缓冲区溢出检测
format_string sprintf, printf 格式化字符串漏洞
input_source scanf, recv, ReadFile 污点 source 追踪
exec system, CreateProcess 命令注入检测
injection VirtualAllocEx, WriteProcessMemory 进程注入检测
network connect, URLDownloadToFile 网络行为检测
persistence RegSetValueEx, CreateService 持久化检测

与活 IDA 互补

BinGraph 负责”找对地方”,ida-pro-mcp 负责”动手改”。

  • 查调用链、危险点、子图 → 用 BinGraph(快、全、省 token)
  • 重命名、加注释、看最新反编译 → 用 ida-pro-mcp

二者共存不冲突,地址 ea 统一,可无缝衔接。

已知限制

  • 反编译依赖 Hex-Rays 授权,失败函数标记 decompile_ok=0 并如实返回
  • 间接调用 243 条中大部分为 CRT 内部 dispatch,对外部函数指针调用无特殊标记
  • FLIRT 对静态链接 CRT 识别良好,但部分自定义函数可能误标为 library
  • bingraph serve 后需重启 Claude 客户端才能看到新 MCP 工具
关于
87.0 KB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号