☰
REA(Reverse Engineer Anything)实战:让 AI Agent 直接调用的本地逆向 MCP 服务
2026/11/6 3:33:57 网站建设 项目流程

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 --json

macOS 的.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 APKManifest 声明、类、反编译方法与引用无头 JADX 与完整 JDKAndroid 指南
固件区域、解包结果与原生分析交接Linux 上的 Binwalk / Unblob固件指南
进程行为终端输出、交互、退出与文件系统观察及运行比较Linux/macOS 且需原生 PTY进程捕获
Go 二进制内嵌编译器版本、模块、替换与构建设置内置静态检查,无需安装 GoGo 二进制
WASM 工件校验、段、精确 import/export WAT 形式与解码 WAT调用方自备 WABT 1.0.42WASM 工件

运行时基线是 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),仅供参考

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

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

立即咨询