用 REA 把 IDA Pro 接入 MCP:GUI 附加与 Headless 数据库双模式完整避坑指南
【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea
REA(Reverse Engineer Anything)是通过 MCP 协议把 AI Agent 接到逆向工程工具的开源项目。下面把对接 IDA Pro 的两条实操路径——GUI 附加模式(复用 GUI 中已打开的数据库)与Headless 数据库模式(无界面自动建库)——从注册 JSON、环境变量到首条分析命令逐一跑通,并给出能力边界与自检排障清单。
接入 REA 之后,你的 IDA Pro 工作流多了什么
- 🤖 单独用 IDA Pro 时,函数分析、字符串搜索都靠人工点击,Agent 无法介入;接入 REA 后,Agent 可以直接调用
analyze_function、search_strings这类 MCP 工具 - 📦 每个结论都附带证据与限制说明,截断、缺失会显式标出,而不是黑盒输出
- 🔀 与 Hopper、Ghidra 共用同一套 CLI,切换分析后端不改工作流
💡 核心定位:REA 不安装、不激活、不升级、不捆绑 IDA Pro,只适配上游 ida-pro-mcp 服务器。你复用已有的 IDA 环境,REA 不改动它的任何配置。
GUI 附加还是 Headless:一张对比表加三问判断
| 维度 | GUI 附加模式 | Headless 数据库模式 |
|---|---|---|
| 使用者 | 人工交互逆向的工程师 | Agent、CI 流水线、批量自动化 |
| 前置条件 | IDA GUI 已打开原始二进制 | 上游装好 database supervisor API,且与 REA 同主机 |
| 适用场景 | 边看边分析;WSL + Windows GUI 混合环境也可用 | 批量分析、Agent 自动调查 |
| 注册文件差异 | 只复制上游command/args/env,无 mode 字段 | 必须写"mode": "headless",也可用url指向本地 HTTP supervisor |
| 关闭后行为 | 只释放连接,不保存、不关闭 GUI 数据库 | 用save: false释放会话,删除私有临时工作区 |
拿不准时按三问判断:① IDA GUI 是否已经开着?是 → 附加;② 目标是批量或自动化吗?是 → Headless;③ 环境是 WSL 混合的吗?是 → 只能用附加。
首次接入步骤:装环境、写注册 JSON、跑首条分析命令
第 1 步:安装 REA 并注册到 Agent。这条命令会完成安装并把 REA 注册到你使用的 Agent 客户端:
npx rea-agents setup第 2 步:写上游 MCP 注册 JSON。这是附加模式的注册文件,把一份可用的 ida-pro-mcp 注册中的command、args和可选env原样复制进来:
{ "command": "python", "args": [ "/absolute/path/to/ida_pro_mcp/server.py", "--ida-rpc", "http://127.0.0.1:13337" ] }第 3 步:设置两个环境变量并跑首条分析命令。下面是完整的最小运行序列:
export REA_IDA_MCP_CONFIG=/absolute/path/to/ida-mcp.json export REA_ANALYSIS_PROVIDER=ida rea function /absolute/path/to/program main --json拿到 JSON 输出即接入成功;Headless 的注册 JSON 差异见下文场景小节。
双场景实操:从注册 JSON 到首条请求
人工交互场景(GUI 附加)
第 1 步:在 IDA GUI 中打开原始输入二进制。注意是原始可执行文件,不是.idb/.i64数据库。REA 会校验原始输入二进制的 SHA-256 与 IDA 记录的输入哈希是否一致,不一致直接失败并给出恢复指引。
⚠️ GUI 的
/mcp端点是内部 RPC 端点,REA 通过上游 stdio 代理连接,不要把这个 URL 当 Streamable HTTP 用。切换分析目标前,先让 REA 关闭当前连接,避免身份校验冲突。
第 2 步:依次执行函数分析与反编译。附加 profile 支持上游 1.4.0 legacy 工具(get_metadata、list_functions、decompile_function等):
rea function /absolute/path/to/program main --json rea decompile /absolute/path/to/program main --json结果是实时读取而非快照回放,你在 GUI 里的外部编辑始终可见。REA 关闭操作只释放 MCP 连接,绝不保存或关闭你的 GUI 数据库。
自动化批量场景(Headless 数据库)
第 1 步:把注册 JSON 改为 Headless 模式。该模式要求上游版本支持 database supervisor API(idb_open、idb_list等),旧版idalib-mcp单文件名 + SSE 模式不适用:
{ "command": "idalib-mcp", "args": ["--stdio", "--max-workers", "1"], "mode": "headless" }如你的 idalib 环境需要,加"env": { "IDADIR": "/absolute/path/to/ida" };已部署本地 HTTP supervisor 时,用"url": "http://127.0.0.1:8745/mcp"替代command即可。
第 2 步:在同主机原生环境运行。下面是 Windows 原生 PowerShell 的完整序列:
$env:REA_IDA_MCP_CONFIG = 'D:\analysis\ida-mcp.json' $env:REA_ANALYSIS_PROVIDER = 'ida' rea function 'D:\samples\program.exe' main --jsonREA 会把被接纳的二进制复制到私有临时目录(POSIX 权限0700),校验摘要后以force_headless申请独占 worker,并把数据库 ID 注入分析请求。关闭或启动失败时,用save: false释放会话、确认上游会话清单中已消失,再删除私有输入与附属文件。
⚠️ Hard 约束:Headless 下 REA 与 supervisor 必须共享同一主机文件系统与原生路径语法。WSL + Windows GUI 的混合场景只有 GUI 附加模式支持。原始二进制永远不会被执行或被覆盖。
Agent 长期接入:MCP 入口环境变量与标准调用序列
这段配置把注册路径写进 REA 的 MCP 入口环境,上游注册文件保持独立不动:
{ "mcpServers": { "rea": { "command": "npx", "args": ["-y", "rea-agents@<version-with-ida>", "mcp"], "env": { "REA_ANALYSIS_PROVIDER": "ida", "REA_IDA_MCP_CONFIG": "/absolute/path/to/ida-mcp.json" } } } }版本号必须是实际包含 IDA 适配器的版本,仓库 main 分支可能领先于 npm 发布版。重连后,Agent 按这个标准序列调用:
{"name": "open_binary", "arguments": {"path": "/absolute/path/to/program", "provider_id": "ida"}} {"name": "analyze_function", "arguments": {"procedure": "main"}} {"name": "search_strings", "arguments": {"pattern": "license"}} {"name": "close_binary", "arguments": {}}❗ MCP 请求
timeoutMs默认 300000ms,大目标请调高 Agent 侧超时;MCP 会话优先用close_binary关闭。想走交互式注册?先设置REA_IDA_MCP_CONFIG,再运行rea setup --client <client>,setup 会把这个文件引用纳入待审查计划。
能力边界核对:REA 能从 IDA 取到什么、取不到什么
两种 profile 共同支持:
- ✅ 函数/字符串清单、字面量与正则搜索
- ✅ 过程解析、伪代码、汇编、原始函数指令
- ✅ 已解析的被调用者、传入地址引用、函数档案(dossier)
附加(legacy)profile 额外支持直接调用者;Headless(modern)profile 无法从 xref 标签证明直接调用者,档案中该字段标记为 unknown。
明确不在覆盖范围:
- ❌ 完整函数体范围、带类型引用边、CFG、被引用数据、源本地变量、注释分类、数据库修订号
- ❌
binary_overview、整库符号清单、变更操作、调试、任意 Python 转发、GUI 导航
❓ 档案中"空的不支持字段"表示unknown(未知),不代表"确认不存在"。
⚡ 经验法则:在组合依赖某个字段的工作流前,先用
binary_session确认工具实际可用性,再跑rea doctor --provider ida --json验证注册——该命令不会启动 IDA。
一键验证与排障:verify:ida 命令和现象原因对照表
在上游服务器已配置的前提下,这条命令走一遍真实 CLI 与 MCP 工具链:
npm run verify:ida -- --target /absolute/path/to/program --procedure main它校验输出契约与 Evidence 完整性、原始输入保全与会话清理,且不在控制台摘要中泄露本地目标数据。
| 现象 | 可能原因 | 解决办法 |
|---|---|---|
| 提示 provider 未识别 | REA_ANALYSIS_PROVIDER未设为ida,或未设REA_IDA_MCP_CONFIG | 核对两个环境变量;CLI 加--provider ida亦可 |
报错REA_IDA_MCP_CONFIG must be absolute | 注册文件路径写了相对路径 | 改为绝对路径后重跑 |
| SHA-256 身份校验失败 | GUI 打开的是.idb/.i64数据库文件而非原始二进制 | 在 IDA 中重新打开原始输入文件 |
| 分析请求超时 | MCPtimeoutMs默认 300000ms,大目标不够 | 调高 Agent 侧超时;超时未完成会保留私有工作区,清理后再重试 |
| Headless 打不开目标路径 | REA 与 supervisor 不在同一主机(WSL 混合环境) | Headless 必须同主机文件系统;WSL 场景改用 GUI 附加模式 |
| 中断后会话残留 | 进程被强杀,worker 未释放 | 检查上游会话清单与保留的工作区诊断信息,再用close_binary规范关闭 |
| 注册通过但缺少 supervisor 能力 | 装的是不带 supervisor API 的旧版idalib-mcp | 安装支持idb_open/idb_list的版本,注册写"mode": "headless" |
下一步建议:该读哪篇文档、该对照哪段源码
两种模式最终共用同一套 CLI 命令与输出契约,差别只在注册文件与生命周期策略。
- 完整生命周期、身份校验与清理语义:docs/ida-provider.md
- 会话与连接管理源码对照:src/ida/,重点看
IdaProvider.ts、IdaWorkspace.ts、IdaMcpConnection.ts - 适配层测试与真实 provider 证据的区别:docs/testing.md
- 确认你安装的 REA 版本是否包含 IDA 适配器(npm 发布可能落后于 main 分支):docs/installation.md
【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考