REA(Reverse Engineer Anything)实战:让 AI Agent 直接调用的本地逆向 MCP 服务
【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea
没有源码、逆向工具彼此割裂、AI Agent 无处插入时,手工拼接证据是最耗时的部分。REA 把 Hopper、Ghidra、IDA 原生引擎,JavaScript/Electron 静态分析、.NET 检查与浏览器观察汇入同一个本地 MCP 服务:Agent 下达调查指令,返回的发现自带证据与限制说明,分析全程在本机完成。
🧭 一键接入:从注册 MCP 服务器到首次分析
最快上手分两步:让 Agent 注册这个 MCP 服务器,让 CLI 直接跑一次分析。
npx rea-agents setup交互流程是:多选要配置的客户端 → 审阅拟议的精确路径与变更 → 批准后写入,完成后重启 Agent。写入前会保留无关条目与注释、创建备份、原子替换并回读校验;src/application/SetupClients.ts第 9–53 行为每一种失败原因(路径不安全、备份失败、写入失败、写后校验失败等)给出了对应诊断文案。只改脚本可用rea setup --client codex --client cursor --skill=false --dry-run做只读预演,退出码 0 表示计划可执行。npm 的下载批准只覆盖包本身,setup 对 Agent 配置和 Hopper 安装会另行单独征询(docs/installation.md "Supported agents" 一节列出了 26 个受支持的客户端及其--client标识)。
静态分析首跑不需要任何逆向引擎,对已解包的目录或 ASAR 直接执行:
npx -y rea-agents@latest analyze-javascript-application /absolute/path/to/app --json返回应用图与完整 Evidence。日常使用可全局安装后直接用rea;原生分析先配置好引擎,再形如(docs/cli.md 有完整参数):
rea analyze /absolute/path/to/program --provider ghidra --json rea decompile /absolute/path/to/program 0x1000 --provider ghidra --jsonmacOS 的.app包可直接作为目标。更新策略:持久的 MCP 注册钉在执行 setup 的那个版本,安装新指令不会更新运行中的服务器(docs/installation.md "Released package and main" 一节);@latest选的是 npm 发布版,当前仓库 package.json 的version为6.8.0。全局安装用rea update(只更新拥有当前 CLI 的那个 npm/Bun 全局目录),npx 用户重跑npx rea-agents@latest setup并重启 Agent。
它能分析什么:能力矩阵与前置依赖
各目标类型的返回内容与前置依赖见 README.md "What you can analyze" 一节的完整矩阵,下表摘录关键行:
| 目标类型 | 返回内容 | 前置依赖 | 参考指南 |
|---|---|---|---|
| 原生二进制 | 伪代码、汇编、字符串、符号、调用与引用 | Hopper、Ghidra 或 IDA | 原生分析 |
| JavaScript / Electron | 模块、导入、source map、路由、IPC 与原生 add-on 关系 | 仅需 Node.js 与 npm | 应用工作流 |
| .NET 程序集 | 元数据、CIL 指令、声明的原生依赖与构建比较 | 无(纯静态) | 托管代码 |
| 网站观察 | 页面结构、脚本、网络观察与请求的截图 | Chrome 系浏览器 | 浏览器观察 |
| Android APK | Manifest 声明、类、反编译方法与引用 | 无头 JADX 与完整 JDK | Android 指南 |
| 固件 | 区域、解包结果与原生分析交接 | Linux 上的 Binwalk / Unblob | 固件指南 |
| 进程行为 | 终端输出、交互、退出与文件系统观察及运行比较 | Linux/macOS 且需原生 PTY | 进程捕获 |
| Go 二进制 | 内嵌编译器版本、模块、替换与构建设置 | 内置静态检查,无需安装 Go | Go 二进制 |
| WASM 工件 | 校验、段、精确 import/export WAT 形式与解码 WAT | 调用方自备 WABT 1.0.42 | WASM 工件 |
运行时基线是 Node.js22.x(>=22.23.4)、24.x(>=24.22.1)或 26.12.1+加 npm(README.md 同节首行)。安全边界要划清:静态的 JavaScript 与 .NET 检查只读取给定文件、不运行应用;而运行时捕获会以你的用户权限运行或交互选中目标,每条运行时指南都写明其副作用(README.md 矩阵表后紧随的两段)。
它如何工作:入口路由、共享应用层与证据契约
入口是一个薄分发器 scripts/rea.mjs:第 9–11 行注释写明"先于导入业务代码做 MCP 路由",mcp/--mcp加载dist/mcp/main.js独占 stdio(第 47–48 行),mcp doctor走dist/cli-runtime/mcpDoctor.js诊断注册(第 49–50 行),其余参数走dist/cli-runtime/cli.js加流式输出模块(第 51–55、145 行)。分发前检查编译产物存在性,缺失时直接指引"仓库内npm ci && npm run build:cached,或重装已发布包"(第 58–62 行)。
MCP 注册拉起的是什么,看 server.json:服务器标识io.github.morluto/rea,经 npm 注册表分发,传输stdio,启动参数是位置参数mcp。package.json 与之对得上:bin同时注册rea与rea-agents两个入口均指向scripts/rea.mjs(第 41–44 行);依赖里@modelcontextprotocol/server提供 MCP 运行时,playwright-core支撑浏览器观察,@lydell/node-pty对应进程捕获,ajv与zod负责契约校验(第 350–392 行)。files清单暴露了跨语言桥的规模:Python 写的 Hopper 桥与 mitmproxy 抓包脚本、Java 写的 Ghidra 扩展与 JADX 桥接、Swift 写的原生 UI 与进程 token 读取器(第 49–109 行)。
CLI 与 MCP 并非两套实现。src/application/是两侧共享的应用服务层(setup、快照、诊断等模块同时服务两条通道),docs/cli.md 开头三行明确声明 CLI 与 MCP 服务器使用相同的应用工作流与证据契约。
证据契约的模型落在 src/domain/evidence.ts:providerSchema(第 39 行)记录引擎身份(id、name、version);subjectSchema(第 44–49 行)为工件声明名称、SHA-256 摘要与格式枚举,格式全集在 src/domain/evidenceSubject.ts 第 8–53 行,从hopper、mach-o、elf到asar、hap共 45 种;evidenceLocationSchema(第 52 行起)按address、file-offset等五类标注观察的来源位置。src/domain/evidenceBundle.ts 第 45 行的evidenceBundleSchema定义可持久化的 bundle;CLI 提供evidence-import(校验)、evidence-export(导出规范形式)与rea compare(比较两 bundle)三个命令(docs/cli.md "Import, export and compare Evidence" 一节)。
快照机制适合脚本化复用:当目标字节、操作、参数、provider 与设置完全匹配时,同一精确结果被直接复用;快照文件本地保存且使用仅限属主的权限,CLI 的缓存命中发生在启动 provider 进程之前(docs/cli.md "Save and reuse analysis snapshots" 一节)。MCP 侧open_binary接受snapshot_path原子导入,close_binary可带snapshot_path与overwrite: true在释放 provider 资源前先保存;保存失败会保持会话开放,把处置权留给调用方。
🔍 原生引擎怎么选,出错怎么办
选择规则见 docs/cli.md "Choose a provider" 一节:
rea providers --json与rea capabilities --json列出可用引擎及支持的操作;- 自动选择时,REA 使用唯一支持该目标的可用 provider;多个候选需显式
--provider; - 环境变量
REA_ANALYSIS_PROVIDER设置常设偏好,显式--provider覆盖它;MCP 中给open_binary传provider_id; - 选中的 provider 绑定会话,直到显式切换或关闭。
出错时按错误码处置:ambiguous从details.candidate_ids里挑;provider_unavailable按message、remediation.action与details.rejections中记录的拒绝原因走,每个拒绝都标注origin(availability是本地就绪问题,target是拒绝的 kind/format/architecture)。对 Hopper、Ghidra、IDA、JADX、Kuna 五个引擎可跑rea doctor --provider ID --json诊断。大二进制上调启动时限:REA_GHIDRA_STARTUP_TIMEOUT_MS或REA_HOPPER_STARTUP_TIMEOUT_MS(docs/installation.md "Hopper" 与 Ghidra 小节)。
引擎侧的宿主要求:Hopper 是独立商业软件,自动安装器支持 macOS 12+(受当前 Hopper 版本最低系统限制)与 Ubuntu 24.04+、Fedora 41+、Nobara 44+、Arch、CachyOS、Omarchy 等 x86_64 发行版;setup 可在批准后代装(macOS 走官方 DMG 校验与原子安装,Linux 在私有 Xvfb 显示上运行官方 demo 包),无头环境可用rea setup --yes --install-hopper。Ghidra 需现有 12.1.x 安装加 64 位 JDK,并包含宿主架构的原生反编译器;Windows 上的 Ghidra 支持是实验性 P0 边界(docs/windows-ghidra-p0.md),另支持 16 位 DOS 分析(docs/ghidra-dos.md)。IDA 有独立适配器(docs/ida-provider.md)。
📌 真实案例走读
仓库 website/evidence/ 为每个公开案例保留了带工件摘要的取证笔记,结论可用仓库内脚本复验。
DX-Ball:重建声音声像计算
- 问题:Windows i386 可执行文件里"砖块位置→声像"的浮点计算没有源码;
- 追踪路径:跟随声音调用进入
0x406400处 63 字节的辅助函数,逐条检查指令:FILD从[EBP-0xc]读栈参数,FMUL乘 1.5625、FSUB减 500.0,再乘存储的缩放因子后经__ftol转整数(取证笔记第 25–32 行的观察表); - 验证结果:重建通过 3,205 个 original-x86 差分用例,并复现 VC4.0 编译输出的全部 63 个函数字节(dx-ball-sound-pan.md "Validation scope" 一节)。
Notion:追踪 Electron 剪贴板桥
- 问题:渲染进程里看到的剪贴板 API,真实读写发生在哪一侧;
- 追踪路径:定位 tab preload 中暴露的 context bridge(
preload.js第 1 行列 22764–22828)与 IPCinvoke调用(第 1 行列 6486–6522),经主进程 handler 与 receiver 连到 Electron 的 clipboard 调用; - 验证结果:npm 发布包 REA 4.1.0 的检查与独立源码构建返回相同的 API 与 invoke 发现(notion-clipboard.md "Fresh REA result" 一节)。
TH04:恢复 DOS 弹幕环计算
- 问题:PC-98 原作的 16 位 DOS 可执行文件里,固定与瞄准角的弹幕环计算无法阅读;
- 追踪路径:检查
MzLoader、x86:LE:16:Real Mode配置(固定加载段 0x1000),对0x2cfc8处的辅助函数取指令与伪代码,恢复环索引计算与iatan2瞄准角相加; - 验证结果:原始目标 SHA-256 与 MZ 检查通过,重建的 C++ 与历史编译器输出做对比(th04-bullet-ring.md)。
案例背后是可执行的验证基础设施:scripts/verify-real-hopper.mjs跑真实 Hopper 全链路,tests/boundary/ 下 1367 个边界测试文件守住各引擎适配层的回归。
常见问题速查
必须有 Hopper/Ghidra/IDA 吗?只有深度原生分析需要三者之一;静态 JavaScript 与 .NET 检查不需要任何逆向引擎。Setup 可在批准后代装 Hopper,Ghidra 与 IDA 使用你已有的安装(README.md 能力矩阵)。
REA 会上传我的应用吗?不会,分析在本地进行;Agent 拿到的是工具结果,其模型提供商另有自身数据政策。
哪些 Agent 能用?任何支持本地 MCP 服务器的 Agent。docs/installation.md "Supported agents" 表格内的客户端可一键配置,表外走手动 MCP 注册。
只安装 skill 是什么效果?skill 只提供调查指令,不含 MCP 注册与分析引擎;完整路径是npx rea-agents setup注册服务器并装配套指令后重启 Agent。仅装 skill 时静态 JavaScript CLI 检查仍可继续工作。
需要预先启动 Hopper 吗?不需要,REA 在操作需要时自行启动。macOS 首跑可能弹出选择演示模式或激活授权的对话框,需在同一用户会话内完成后再跑无人值守任务(docs/installation.md "Hopper in CI" 一节)。
遇到 bug 怎么办?先更新(rea update或npx rea-agents@latest setup)并重启 Agent 重试;仍复现则附 REA 版本、目标类型、复现步骤与错误输出提 issue。
延伸阅读与仓库地图
- docs/installation.md:Agent 注册、provider 配置、就绪诊断(
doctor)、更新与卸载; - docs/cli.md:命令清单、引擎选择、快照、Evidence 导入/导出与退出状态表;
- docs/mcp-contracts.md 与 docs/mcp-prompts.md:工具结果契约、会话生命周期与引导式调查提示;
- docs/roadmap.md:计划中的工作与能力跟踪;
- docs/architecture.mermaid:整体架构地图。
源码按关注点分层:src/hopper/、src/ghidra/、src/ida/ 是三个原生引擎适配层;src/browser/ 是 CDP/Playwright 浏览器观察层;src/application/ 是 CLI 与 MCP 共享的应用服务层(setup、快照、诊断);src/contracts/ 定义所有工具输入输出契约;src/domain/ 实现 Evidence 数据模型;src/javascript/、src/android/、src/evm/、src/firmware/、src/process/ 分别对应能力矩阵中各目标类型。
⚖️ 合规提示
REA 面向合法的研究、教育、互操作性与软件保存场景,适用于你拥有或已获得检查授权的对象。使用 Hopper、IDA Pro、JEB 等商业工具需自行取得合法许可,REA 不附带任何工具授权。请确保已获得必要授权并遵守当地法律法规。
【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考