☰
REA 对接 IDA Pro 完整实操指南:3 步让 AI Agent 驱动你的逆向工程
2026/10/12 3:09:10 网站建设 项目流程

REA 对接 IDA Pro 完整实操指南:3 步让 AI Agent 驱动你的逆向工程

【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea

REA(Reverse Engineer Anything)是一个把 AI Agent 与逆向分析工具通过 MCP 协议连起来的开源项目,口号是"用 Agent 逆向一切,从应用行为一路追到原生二进制"。本文带你完整走通 REA 对接 IDA Pro 的两条接入路径:交互式(GUI 附加)模式与无人值守(headless)模式——从写注册配置、跑通第一条分析命令,到让 Agent 永久持有这条 IDA 链路并做完验收排障。

这条链路能替你做什么

配好之后,IDA Pro 就从"只能人肉点鼠标的本地 GUI",变成 AI Agent 可以直接驱动的分析后端:

  • 🤖 Agent 直接调用analyze_function、search_strings这类 MCP 工具,函数分析、字符串搜索、伪代码获取都能自动完成,不用你来回切窗口
  • 📦 每个结论都带证据(Evidence)与限制说明,输出不是黑盒,你清楚知道它看到了什么、没看到什么
  • 🔀 与 Hopper、Ghidra 共用同一套 CLI 命令和工具契约,今天接 IDA,明天换引擎只改一个环境变量
  • 🧪 每条结论都标注证据边界,空字段明确标记为 unknown,避免 Agent 拿"查不到"当"不存在"去下结论

💡 核心理念:REA 不安装、不激活、不捆绑 IDA。它只适配上游现成的 ida-pro-mcp 服务器,让你复用已经装好的 IDA 环境——你的授权、你的插件、你的习惯,一样不动。

完整说明见官方文档 docs/ida-provider.md。

先对号入座:两种接入姿势

在动手前,先花 30 秒确认自己属于哪种场景。两种模式的本质差别在于:你手上是"已经打开的 IDA 数据库",还是"一个冷冰冰的二进制文件"。

维度交互式(GUI 附加)无人值守(headless)
依赖上游 1.4.0 legacy 工具(get_metadata、list_functions等)上游 database supervisor API(idb_open、idb_list等)
IDA 界面必须已在 GUI 中打开目标二进制无需界面,REA 自动建库、自动分析
身份校验你传入的原始二进制 SHA-256 必须与 IDA 记录的输入哈希一致二进制先复制进私有临时副本,做摘要校验并绑定独占 worker
典型场景人工交互式逆向、边看 GUI 边让 Agent 干活批量分析、CI 流水线、Agent 全自动调查
关闭行为只释放 MCP 连接,绝不保存或关闭你的 GUI 数据库以save: false释放会话,确认上游会话清单已移除后清理私有工作区

一句话选型:你现在人坐在 IDA GUI 前 → 交互式;你要让机器自己跑 → 无人值守。

环境准备与最小可运行路径

先装 REA 本体。一条命令完成注册到你的 Agent(Claude Code、Cursor 等)并安装配套逆向工作流指令:

npx rea-agents setup

它会把 REA 的 MCP 服务注册进你已装好的 Agent,并安装逆向工作流技能文件。注意:IDA 适配器需要包含该能力的 REA 版本,仓库 main 分支可能领先 npm 发布版,装完可先rea --version确认。想从源码跑也行:git clone https://gitcode.com/GitHub_Trending/rea2/rea后按 docs/installation.md 构建。

装好后别急着看两种模式的区别,先用最小路径跑通一条命令获得正反馈。以交互式为例,设两个环境变量,发一条分析:

export REA_IDA_MCP_CONFIG=/absolute/path/to/ida-mcp.json export REA_ANALYSIS_PROVIDER=ida rea function /absolute/path/to/program main --json

REA_IDA_MCP_CONFIG指向你的 IDA 注册文件(下文会写),REA_ANALYSIS_PROVIDER=ida声明用 IDA 引擎,rea function就是对main发起一次函数分析。如果返回了带证据的 JSON 而不是报错,恭喜,链路已经通了。

配置解析的源码在 IdaConfiguration.ts,它负责校验注册格式并区分两种 profile,报错信息基本都能对应到里面某条约束。

交互式模式:完整配置与高频坑点

交互式模式的分工是:你的 IDA GUI 负责分析和显示,REA 只通过上游 stdio 代理连进来发请求。三步走:

第 1 步:写注册 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" ] }

它告诉 REA"怎么启动你的上游 stdio 代理"。已有的mcpServers对象里带ida-pro-mcp条目的注册也被接受。记住:要用你自己那套能跑通的上游注册,而不是照抄示例路径。

第 2 步:设环境变量。就是上面最小路径里的export两行。它把"注册文件在哪 + 用哪个引擎"这两件事一次性钉死,后续 CLI 和 MCP 入口都认这两个变量。

第 3 步:发起分析。在 IDA GUI 中打开目标二进制后:

rea function /absolute/path/to/program main --json rea decompile /absolute/path/to/program main --json

第一条拿函数分析结果,第二条拿反编译伪代码。每次请求前,REA 都会核对附加身份与映像基址,保证你问的确实是 GUI 里那个数据库。

⚠️ 三个高频坑,提前看一遍能省大量排查时间:

  1. GUI 里打开"原始输入二进制",不要打开.idb/.i64数据库文件。SHA-256 与 IDA 记录的输入哈希对不上会直接失败,报错里会带恢复指引。
  2. GUI 的/mcp端点是内部 RPC 端点,必须通过上游 stdio 代理连接,不要拿那个 URL 当 Streamable HTTP 地址用。
  3. 切换分析目标前,先让 REA 关闭当前连接(close_binary或等价的 CLI 关闭动作),否则身份校验会撞车。

另有一条 WSL 提示:GUI 在 Windows、REA 在 WSL 时,原始二进制用 WSL 挂载别名读即可,因为绑定的是记录的输入哈希,而不是要求 GUI 打开 WSL 路径。

无人值守模式:完整配置与沙箱行为

headless 模式对上游的要求更高:必须安装支持 database supervisor API(idb_open、idb_list、idb_close、显式database参数)的版本。旧版 1.4.0idalib-mcp——只收一个初始文件名、走 SSE 的那种——不适用。

第 1 步:注册文件里加"mode": "headless"。

{ "command": "idalib-mcp", "args": ["--stdio", "--max-workers", "1"], "mode": "headless" }

这一行mode就是告诉 REA"按 supervisor 协议走"。如果你的 idalib 环境需要指定 IDA 位置,加上"env": { "IDADIR": "/absolute/path/to/ida" };已经部署了本地 HTTP supervisor 的,也可以把 command 换成"url": "http://127.0.0.1:8745/mcp"。

第 2 步:CLI 命令与交互式完全一致。Windows 原生环境下(PowerShell):

$env:REA_IDA_MCP_CONFIG = 'D:\analysis\ida-mcp.json' $env:REA_ANALYSIS_PROVIDER = 'ida' rea function 'D:\samples\program.exe' main --json

同一套rea function/rea decompile,零学习成本切换模式。

第 3 步:理解 REA 替你守住的安全边界。这是 headless 模式最值得花 2 分钟看懂的部分:

  • REA 会把被接纳的二进制复制进私有临时目录(POSIX 下目录权限0700),校验摘要后才申请独占 worker(force_headless)
  • 分析请求中注入的是 supervisor 返回的数据库 ID,而不是"猜一个用户数据库就用"
  • 关闭或启动失败时:以save: false释放会话 → 确认上游会话清单里确实没有残留 → 删除私有输入与附属文件;释放未验证成功时,工作区会被保留并报告"清理不完整"
  • 原始二进制永远不会被执行、也永远不会被覆盖

⚠️ 硬约束:headless 模式下,REA 与 supervisor 必须共享同一主机文件系统和原生路径语法。Windows 上的 supervisor 就配 Windows 上的 REA。WSL + Windows GUI 的混合场景只有交互式模式支持。

另外注意:一个 REA 会话独占一个数据库,stdio 注册的IDA_MCP_MAX_WORKERS默认就是 1。可选的workspaceRoot可以让私有工作区落在你指定的已有目录,记得留够输入副本 + IDA 工作文件的磁盘空间。

把这条链路持久化给 Agent

临时用环境变量只适合"今天试一次"。要让 Agent 每次会话都自带 IDA 能力,把注册路径写进 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" } } } }

这段配置让 Agent 的 REA 服务器一启动就自带 IDA 引擎选择,<version-with-ida>换成真正包含该适配器的版本号。

重连后,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": {}}

open_binary会启动所选 provider 的会话(headless 下会等待自动分析完成),close_binary规范收尾。

💡 三个小贴士:

  • MCP 请求的timeoutMs默认 300000ms,大目标分析时请在 Agent 侧把 MCP 请求超时调高;超时未完成时私有工作区会被保留,不能靠会话清单证明请求已停
  • 走交互式注册也可以:先设好REA_IDA_MCP_CONFIG,再跑rea setup --client <client>,setup 会把该文件引用纳入待审查计划,且不会把上游凭据复制进 Agent 配置
  • rea doctor --provider ida --json只校验注册、不会启动 IDA,适合在部署脚本里当只读体检用

能力边界与验收清单

拿证据化输出之前,先知道哪些是"有"、哪些是"没有"、哪些是"未知"。两种 profile 共同支持:

  • ✅ 函数/字符串清单、字面量与正则搜索
  • ✅ 过程解析、伪代码、汇编、原始函数指令
  • ✅ 已解析的被调用者、传入地址引用、函数档案(dossier)

明确的限制:

  • ❌ 完整函数体范围、带类型的引用边、CFG、被引用数据、源本地变量、注释分类、数据库修订号不可用
  • ❌binary_overview、整库符号清单、变更操作、调试、任意 Python 转发、GUI 导航不在适配器覆盖范围
  • ❓ 档案里空着的不支持字段表示unknown(未知),不代表"确认不存在"——让 Agent 下结论时注意这一点

验收分两步走:

npm run verify:ida -- --target /absolute/path/to/program --procedure main

仓库自带的验证脚本,会真实走一遍 CLI 与 MCP 工具链:校验输出契约、Evidence 完整性、原始输入保全与会话清理,且不会在控制台摘要里泄露你的本地目标数据。

rea doctor --provider ida --json

只做注册校验、不启动 IDA,确认"配置对不对"这一层。

⚡ 经验法则:在组合依赖某些字段的工作流之前,先用binary_session确认工具实际可用性,再动手拼流程。注册已经能跑通时,反复跑 doctor/setup 没有必要。

核心会话与连接管理源码集中在 src/ida/ 目录(IdaProvider.ts、IdaWorkspace.ts、IdaMcpConnection.ts 等),报错看不懂时对照源码往往是最快的路。

排障手册

现象解法
提示哈希不匹配GUI 里打开的是.idb/.i64而非原始二进制,重新打开原始文件
WSL 下路径打不开交互式模式可用挂载别名;headless 模式必须 REA 与 supervisor 同主机
headless 启动即失败上游版本太旧(单文件名 + SSE 的 legacyidalib-mcp),升级到支持 supervisor API 的版本
分析请求超时调大 MCPtimeoutMs;注意超时未完成会保留私有工作区待清理
中断后会话残留检查上游会话清单与保留的工作区诊断信息,再用close_binary规范关闭
REA 关闭后担心 IDA 项目被弄坏不用担心:交互式只断连接,数据库完好无损,外部编辑实时可见

写在最后

回到开头那条链路,其实就三步:写好注册 JSON → 设两个环境变量 → 选对 profile 模式。交互式模式陪你坐着人肉看,headless 模式让机器替你跑批,两者共用同一套rea function/rea decompile命令,切换成本只有一个mode字段。加上证据化输出和"绝不执行、绝不覆盖原文件"的沙箱边界,把 IDA Pro 接进 AI Agent 的逆向工作流,这件事可以放心做。

【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询