☰
REA 逆向分析引擎拆解实录:从 npm 包到本地引擎的完整逻辑
2026/10/12 2:17:36 网站建设 项目流程

REA 逆向分析引擎拆解实录:从 npm 包到本地引擎的完整逻辑

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

REA 解决的是"AI Agent 做不了逆向活"的问题:安装 npm 包rea-agents后,Agent 和终端共用同一个 CLI + MCP 服务器,把原生二进制、JavaScript/Electron 应用、.NET 程序集、安卓 APK 和网页的分析能力接到本地工作流里,结果附带证据与局限,全程在本机运行。

它到底能干什么

一个 npm 包,把 Hopper、Ghidra、IDA 这类重量级逆向工具变成 Agent 可调用的 MCP 工具目录。

  • 📦 CLI 与 MCP 双通道共享同一套分析工作流,行为一致
  • 🖥️ 本地静态分析:JavaScript 应用分析无需任何原生分析引擎
  • 🧾 每个结论附带证据、局限性与未知项,可复现可对比
  • 🎯setup一条命令注册 MCP 服务并下发工作流技能包

仓库结构走读

仓库顶层是六个各司其职的目录。src/是核心 TypeScript 源码,scripts/rea.mjs 负责分发;bridge/放跑在外部工具进程里的适配代码;scripts/是构建、验证与 CI 检查脚本;tests/是 Vitest 测试与边界测试套件;docs/是官方文档与契约;third_party/记录上游工具(pwntools、pwndbg、evmole 等)的边界说明。

src/内部的依赖方向是一条因果链,完整定义见 docs/architecture.mermaid。最外面是入口与适配:src/main.ts 加src/main/管理 MCP stdio 服务器的启动、会话与优雅关闭,src/server/把 MCP 请求翻译成内部工具调用。往里是src/application/,约两百个文件的"工作流大脑",管理会话路由、证据账本与快照缓存,也包含Doctor健康检查和Setup引导安装。再往里是 Provider 适配层,每种分析目标一个模块,负责把统一的工作流翻译成对应引擎的方言:

模块分析对象外部依赖
src/hopper/Mach-O/ELF/PE 原生二进制Hopper(Unix 套接字协议)
src/ghidra/原生二进制 + 函数反编译本机 Ghidra + JDK
src/ida/IDA 当前目标(只读)上游 ida-pro-mcp
src/browser/网页、Electron、CDP 捕获Chrome 系浏览器 / Playwright
src/dotnet/.NET 程序集(PE/CLI)无,纯静态元数据解析
src/android/APK 静态分析自带 headless JADX
src/firmware/Linux 固件分区Binwalk / Unblob 适配
src/process/受控进程行为捕获本地 PTY 后端

最内层是 src/contracts/ 与 src/domain/:前者用 Zod 定义所有工具对外可见的输入输出 Schema,后者是两百多个纯函数模块——证据比较、规范化摘要、应用图计算都在这里,无副作用,是结果"可审计"的根基。

如何让 Agent 用得上 Hopper 与 Ghidra

问题在于:Hopper、Ghidra 各有各的进程模型和 API,Node.js 没法从外面直接指挥它们。REA 的方案是把一小段代码"住"进引擎进程内部,对外只开一条认证过的本地私有通道。

以 Hopper 为例:bridge/hopper_bridge.py 通过 Hopper 自带的 Python 启动选项在其进程内运行;src/hopper/BridgeLauncher.ts 在注入脚本时写入随机会话套接字路径和一次性 token,桥脚本在 Hopper 的专用 Python 线程里监听本地套接字,用 HMAC 校验请求,再把 REA 的操作翻译成 Hopper 的 Python API。Ghidra 侧则是 bridge/ghidra/ReaGhidraBridge.java 打包成 HeadlessScript,在 headless 进程里负责清单、反编译、交叉引用与控制流图,同样经私有 Unix 套接字与 Node 侧对话。效果是 Node 侧的 Provider 只需要实现一种套接字协议,换引擎不用改上层。

之所以要配进程治理,是因为外部引擎本质上是子进程:src/process/统一管理进程组、超时 deadline、私有工作目录与清理,避免分析工具"跑野";macOS 侧的原生 UI 捕获由 bridge/native/ReaNativeUI.swift 这类辅助进程补齐。

分发器如何把 CLI 与 MCP 接到同一套引擎

两条使用通道共享一个引擎,才能避免"终端里能做、Agent 里不能做"的双份维护。scripts/rea.mjs 按参数分流:rea mcp加载dist/main.js进入长会话模式,其余参数加载 CLI 一次性适配层,两条分支都会先校验编译产物存在。MCP 服务器在 src/main/ 管理进程生命周期,src/server/负责工具注册与结果封装;CLI 的每条命令是独立进程,但两者走的是同一套应用层工作流和证据契约。[package.json](https://link.gitcode.com/i/5b4094046be9f9dac6d1a7978ceb8a3c)里rea与rea-agents两个命令名都指向这个分发器,发布时 npm 只打包files清单里的dist/、桥接脚本与技能包,仓库的测试和文档不会混进用户机器。

跑起来

  1. npx rea-agents setup—— 选择你的编码 Agent 并审批配置变更,REA 的 MCP 服务与工作流技能包写入配置,原有配置有备份;
  2. 对 Agent 提出任务,例如"弄清目标应用的搜索功能如何工作并展示证据"——Agent 通过 MCP 调用逆向工具,回答里带证据与局限;
  3. npx -y rea-agents@latest analyze-javascript-application /绝对路径/应用 --json—— 纯静态逆向分析,无需任何原生引擎,输出应用图、模块导入关系及证据;
  4. 配好 Hopper 或 Ghidra 后,rea analyze /绝对路径/二进制 --provider ghidra --json进入原生二进制分析,结果含快照、函数与交叉引用。

诊断是独立入口:rea doctor --json按任务范围检查引擎可用性与注册状态,rea doctor --provider <id> --json定位单个 Provider 的问题;必需检查失败时退出码为 1。

设计取舍

  • 分发器 + 分层架构:scripts/rea.mjs 一个入口分流,底下入口适配、应用、Provider、契约/领域四层职责分明;替换分析引擎只需换一层 Provider 和一段桥接代码,上层工作流零改动。
  • 桥接插件模式:不改造外部工具,把认证过的代码送进对方进程,用私有套接字对话;外部引擎升级不污染 Node 侧,src/process/的进程组与超时治理保证子进程可控,这是多引擎接入能稳定并行的前提。
  • 证据优先的纯函数领域层:src/domain/ 无副作用,结论可比较、可复现、可对比,错误契约见 docs/mcp-contracts.md——这正是"给 Agent 用"的工具与"给人看"的 GUI 的本质差异 🔧

顺着 docs/architecture.mermaid 的依赖链读 src/,每条请求如何变成一条可审计的证据链就一目了然了。

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

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

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

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

立即咨询