Heretek-RE/re-angr
GitHub: Heretek-RE/re-angr
为 angr 二进制分析平台提供 MCP 接口,支持符号执行、CFG 构建和到达定义分析,用于在逆向工程中交叉验证其他分析工具的结果。
Stars: 0 | Forks: 0
# re-angr
用于 [angr](https://github.com/angr/angr) (UC Santa Barbara, BSD) 的 MCP server — 符号执行 + CFG + 到达定义。这是一款“我遇到了复杂的约束问题,需要参考第二意见”的工具。
## 为什么使用它
其他的 RE-AI MCP server 能够很好地处理大多数 RE 任务。但在两种情况下,angr 的方法与 `re-triton` 的方法有本质不同:
- **CFG 构建。** angr 的 CFG 是静态构建的(无需执行,无需模拟),是开源领域中最准确的之一。`re-rizin.analyze_function` 速度更快,但使用了不同的启发式方法;与 angr 进行交叉验证可以捕获边缘情况。
- **到达定义。** angr 的数据流分析是 `re-mba-deobfuscate` 可靠性的基石。像 `x + y == (x & y) + (x | y)` 这样的 MBA 恒等式*看起来*像真正的算术运算,但到达定义图揭示了 `(x & y)` 和 `(x | y)` 是由同一个源定义的——这个恒等式是一个无效替换(no-op substitution)。
`re-angr` 提供了上述两项功能,同时配合 `re-triton` 处理相同的约束问题。这两者结合在一起,能为分析人员提供比单独使用任何一个都强得多的信号。
## 架构
Python MCP server 是对由 install.sh 安装的 `angr-cli` Python 助手的轻量级封装:
```
Claude Code (MCP stdio)
│
▼
re-angr server (Python, this directory)
│ subprocess.run(...)
▼
angr-cli (small Python script, wraps the angr API)
│
└─ angr>=9.2 (pip-installed, the actual binary analysis platform)
```
这种子进程边界是有意为之:angr 会保持长生命周期的 `AngrProject` 对象,而这些对象在跨 JSON-RPC 调用时无法干净地保留。该助手为每次调用生成一个新的 Python 进程,这与 MCP server 使用的按工具调用模型相匹配。
## 工具
| 工具 | 功能 |
|---|---|
| `check_angr` | 健康检查 — 返回 angr + cle 版本 |
| `build_cfg` | 构建二进制文件(或单个函数)的控制流图 |
| `symbolic_exec` | 从指定地址开始运行 angr 符号执行 |
| `reaching_definitions` | 计算函数的定义-使用图(def-use graph) |
## 安装
`./install.sh` 会从 PyPI 安装 `angr>=9.2`。
若要独立安装:
```
pip install 're-angr[core]'
```
## 环境要求
- Python 3.11+
- angr>=9.2 (BSD 许可证, 位于 PyPI)
- 无系统依赖
## 降级模式
如果未安装 `angr-cli`,所有工具都会返回 `{"status": "WARN", "error": "angr-cli not installed; run install.sh", ...}`。Python MCP server 本身始终会加载,以便 Claude Code 能够提示安装信息。
## 配合 `re-triton` 使用
`re-triton` 是快速的首次调用符号执行器(使用带有 Quarkslab 绑定的 Triton 1.0)。`re-angr` 则是交叉验证环节:
- 使用 `re-triton.solve_constraint` 来查询“什么输入能到达此分支?”(速度快,进程内执行)。
- 使用 `re-angr.symbolic_exec` 来确认“另一个符号执行器是否同意?”(速度较慢,但相互独立)。
- 使用 `re-angr.reaching_definitions` 来确定“这个变量是在哪里定义的?”(Triton 无法计算此项——这是一项静态数据流分析)。
对于 MBA 混淆算术:`re-triton.solve_constraint` 用于求解符号方程;`re-angr.reaching_definitions` 用于显示该变量是一个无效替换。两者结合能提供强烈的“这是一个已知恒等式”信号。
对于 CFG 构建:`re-rizin.analyze_function` 是快速的首次调用;`re-angr.build_cfg` 是交叉验证环节。差异(例如 angr 看到了 rizin 未检测到的间接调用)值得深入研究。
标签:MCP服务器, 二进制分析, 云安全运维, 控制流图, 符号执行, 逆向分析, 逆向工具