☰
rea-agents 如何把 Hopper、Ghidra 变成 Agent 的工具:完整看懂 REA 逆向分析引擎
2026/10/12 4:18:19 网站建设 项目流程

rea-agents 如何把 Hopper、Ghidra 变成 Agent 的工具:完整看懂 REA 逆向分析引擎

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

REA(npm 包名 rea-agents)是一个逆向分析用的 MCP 服务器兼 CLI:让 AI Agent 直接分析本地二进制、APK 和 Electron 应用,并产出带证据的结论。下文不按目录顺序走,而是用 5 个关键位置和一条完整调用链,带你看完这套逆向分析引擎的内部设计。

为什么 Node.js 进程能指挥重量级引擎

先说一个矛盾:Hopper 是 GUI 程序,Ghidra 是 Java 应用,各自 API 互不相通,Node.js 进程并没有官方通道去指挥它们。REA 的答案是不改造任何外部工具,而是往目标引擎的进程里塞一小段脚本,中间用本地认证 socket 对话。

类比一下,这就像给每家公司派驻一名驻场司机:司机手里有当地的工作许可(进程内权限),总部只负责派活和收结果,双方不需要互相理解内部制度。Node 侧每台引擎对应一个接口统一的 provider 目录,例如 src/hopper/,25 个文件处理引擎启动、socket 协议、请求队列和清理;引擎侧跑的才是桥接脚本。socket 启动时注入随机 token,消息走 HMAC 校验,即使被嗅探也伪造不了指令。

拆开看:5 个关键位置

模块它替你干了什么入口在哪
分发器判断这次运行是长会话 MCP 服务还是一次性命令,并校验编译产物存在scripts/rea.mjs
MCP 工具层把每个工具请求翻译成内部分析调用,封装带字节上限的结果src/server/(56 个顶层文件,每类工具一个 register*Tools.ts)
应用层会话路由、证据账本、快照缓存,外加 Doctor 体检和 Setup 引导安装src/application/(137 个条目)
Provider 层三种原生引擎各有一套客户端:拉起进程、收发协议、管会话生命周期src/ghidra/、src/hopper/、src/ida/
领域层纯函数做证据比较与摘要计算,200 个文件,是结果"可审计"的根基src/domain/,配套 Schema 在 src/contracts/

补充两个值得知道的事实:CLI 命令用 incur 框架拼装,src/cli.ts里 28 个 register* 命令模块全部注册到同一个实例上;仓库里 tests/boundary/ 放了 382 个边界测试文件,专门盯进程、socket、协议这类容易出事故的接缝。

一条 analyze 命令的旅程:逆向引擎如何接单

以分析一个二进制为例,球是这样传的:

scripts/rea.mjs → dist/cli.js(src/cli.ts)→ composition/directAnalysis.ts → Provider(如 src/ghidra/)→ 引擎进程内的桥接脚本 → 证据与 JSON 回到 stdout

  • 接球:分发器看到参数不是mcp,就走一次性 CLI 路径,先确认dist/cli.js等编译产物在位
  • 翻译:createDirectAnalysis为目标打开一个不可变的分析会话,浏览器、固件等辅助能力走独立路由,互不干扰
  • 执行:Ghidra 路线由GhidraClient拉起 Java 进程,把打包成 HeadlessScript 的桥接脚本注入其中完成反编译;Hopper 路线则走 Unix socket 对进程内 Python
  • 回程:原始输出在应用层归一化,领域层算出证据 ID 与局限性说明;CLI 把 JSON 流式写到 stdout,MCP 模式把同一份数据装进 toolResult 从 stdio 返回

换句话说,终端手敲和 Agent 自动调用走的是同一套 composition,行为天然一致,这也是它敢把"双通道"当卖点的原因。

外部引擎是怎么被"收编"的

  • Hopper:引导代码注入REA_SOCKET和随机REA_TOKEN,再通过 Hopper 的--python入口执行 bridge/hopper_bridge.py。脚本全程钉死在 Hopper 专用线程上(注释明说挪到 worker 线程会让 Hopper 死锁),所有 API 调用先过一层薄 facade 再触达真实全局对象
  • Ghidra:桥接打包为 HeadlessScript,负责清单、反编译、交叉引用和控制流图四件套;Node 侧另有 Java 启动、响应路由与超时截止时间管理,大二进制可以用环境变量调高启动期限
  • IDA:姿态最"松",不塞自家桥接,直接适配上游 ida-pro-mcp 的契约,既能挂到运行中的 GUI,也能管一个 headless 数据库
  • 共同纪律:任何被拉起的进程都经过 src/process/ 这个基础层——进程组、私有工作目录、deadline 和清理全在这里兜底;Binwalk、Unblob、JADX 等外部工具则以 git submodule 收在 third_party/,版本和许可一次管住

Agent 侧的工作流指令来自技能包,源文件在 .agents/skills/reverse-engineer-anything/SKILL.md,构建时生成进 skills/ 随 npm 包发布,这就是setup写进你 Agent 配置的那份"作业指南"。

三步跑通它:装完 rea-agents 该敲的第一条命令

⚡npx rea-agents setup—— 选择你的编码 Agent,把 MCP 注册和逆向工作流指令写进配置,原有配置会自动备份

✅npx -y rea-agents@latest analyze-javascript-application /绝对路径/应用 --json—— 零引擎依赖,输出模块图、导入关系、Electron 边界及对应证据

🚀npx rea-agents doctor --json—— 报告 Hopper、Ghidra、IDA 的可用状态与各客户端注册是否对齐,坏在哪一步一目了然

值得偷师的设计判断

  • 分发层与运行时解耦:一个 mjs 决定长会话还是一次性命令,两条通道共用 composition,换引擎只动 Provider 一层
  • 证据是数据而不是文案:每个结论带证据 ID 和局限性,领域层全是纯函数,两次运行可以直接 diff
  • 桥接优于重写:外部工具零改造,token 认证加私有 socket,耦合点既可控又可撤

一句话收束:这套仓库想说的是,给 Agent 做逆向,靠的不是更长的提示词,而是一套本地、可审计、随时能断开的工具链。

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

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

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

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

立即咨询