REA 逆向分析工具指南:让 AI Agent 读懂原生二进制
【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea
REA(npm 包名 rea-agents)是一个面向 AI Agent 的本地逆向分析工具:把 Hopper、Ghidra、IDA 等逆向引擎与脚本化工作流封装成 MCP 服务与 CLI,让不熟悉二进制逆向的开发者用自然语言看懂原生应用、Electron 程序、.NET 程序集和固件的内部实现。
痛点场景:逆向分析前的三道坎
- 对手只给安装包。你看到竞品 App 的某个功能想了解其实现路径,但没有源码,更不知道一次功能调用会穿过哪些模块,只能靠猜。
- 逆向引擎门槛高。Hopper、Ghidra、IDA 界面各异、版本不受你控制,反编译、交叉引用、控制流要一点点手工点;不常用根本翻不动。
- 结论没法交给 AI。手工整理的逆向结果没有证据、不可复现,Agent 无法判断可信度,分析结论很难直接落进开发流程。
能力速览:从静态结构到运行时行为
- 静态还原 JavaScript/Electron,无需任何引擎。
analyze-javascript-application对 JS 目录或 ASAR 包做静态分析,还原模块图、导入关系与 IPC 边界,只读文件、不运行目标。 - 原生二进制由引擎自动接管。指定
--provider ghidra(或 hopper、ida)后自动启动引擎,产出反编译伪代码、交叉引用与控制流,你只描述想查什么。 - .NET 与 APK 各走独立通道。.NET 程序集是纯静态元数据解析,零引擎依赖;Android APK 由自带 headless JADX 反编译,但需要本机有完整 JDK。
- 固件解包。Linux 固件分区交给自带的 Binwalk/Unblob 做区域划分与解包,这两个工具需调用者自备。
- 观察运行时行为。挂接 Chrome 系浏览器捕获页面脚本与网络请求;也可用本地 PTY 受控运行目标进程,记录终端输出、交互与退出码,用于对比两次运行。
- 轻量二进制元数据。Go/Rust 二进制的编译器版本与依赖清单直接读出,不需要安装对应工具链。
安装步骤:从 setup 到第一条分析命令
前置条件:Node.js 22.19+、24.11+ 或 26+,以及 npm。先跑安装注册,它会为你选定的 Agent(Claude Code、Cursor、Codex、Gemini CLI 等)写入 MCP 服务器注册与配套工作流指令,改动前逐项审批,完成后重启 Agent:
npx rea-agents setup接着用一条不需要任何引擎的静态分析命令做验证,输出包含模块、导入、Electron 边界及各自的证据:
npx -y rea-agents@latest analyze-javascript-application /绝对路径/应用 --json最后做环境自检。doctor严格只读,按你要做的任务范围检查前置条件与注册状态,也可用--provider ghidra、--client codex缩小检查范围:
npx -y rea-agents@latest doctor --json工作机制:一次请求的分层流转
终端里的rea和 Agent 发出的 MCP 调用,第一站都在同一个入口:
| 层 | 职责 | 关键路径 |
|---|---|---|
| 入口分发 | 只做路由:mcp参数加载编译产物启动 stdio 服务器,其余参数走一次性 CLI | scripts/rea.mjs |
| 请求接入 | 把 MCP 的tools/call翻译成内部工具调用,按类别注册工具,共 94 个文件 | src/server/ |
| 工作流编排 | 会话路由、证据账本、快照缓存,以及 Doctor/Setup/Update,共 336 个文件 | src/application/ |
| 分析 Provider | 每种目标类型一个实现,负责与外部引擎对话,如 src/hopper/(28 个文件)、src/ghidra/(71 个文件)、src/ida/、src/dotnet/ | |
| 引擎内桥接 | 脚本在引擎进程内执行,经带认证的本地私有套接字回传结果 | bridge/ |
| 契约与领域 | Zod 校验输入输出 Schema(88 个文件);纯函数计算摘要与证据比较(612 个文件) | src/contracts/、src/domain/ |
以原生分析为例:请求经 server 层进入会话后,application 层检查 Provider 可用性并启动引擎,Provider 通过 bridge/hopper_bridge.py 或 bridge/ghidra/ 下的 Java 脚本向引擎发指令,取回的反编译结果经契约层校验后,连同证据、局限与未知项一起封装返回。
设计取舍:三个值得聊的决策
- CLI 与 MCP 共享同一份编译产物。现象:
rea doctor和 Agent 调 MCP 工具走的是 dist/ 下同一批产物,入口脚本只负责分发。原因:两条通道行为必须严格一致,修复逻辑只有一处。意味着你在终端看到的结果就是 Agent 拿到的结果,调试时不必怀疑 MCP 那边另有一套逻辑。 - 把桥接脚本送进引擎,而不是直接调用。现象:hopper_bridge.py、ReaGhidraBridge.java 这类脚本在引擎进程内执行,结果经本地私有套接字回传。原因:Node 指挥不了 Hopper 或 Ghidra,各家 API 各异且版本不受你控制。意味着它不改造任何外部工具,引擎升级后只需维护桥接层,且通信全程不出本机。
- 每个结论都带证据,边界也写明白。现象:结果固定包含 evidence、limitations、unknowns 三块;src/domain/ 层是 612 个无副作用的纯函数,tests/boundary/ 下 740 个边界测试文件守着这套行为。原因:给 Agent 用的工具,结论必须可复现、可对比、可审计。意味着任何回答都可以追问“凭什么”。同时把适用边界说在前面:静态分析不等于全量覆盖,例如 .NET 解析器不解包单文件宿主、NativeAOT 方法体需要原生分析;深度原生分析必须安装 Hopper、Ghidra 或 IDA 之一;浏览器通道要求 Chrome 系浏览器,包捕获与信号通道还需自备 TShark、sigrok-cli 等工具。
把逆向分析做成 Agent 可直接消费、结论可审计的本地工具链,是 REA 区别于传统逆向 GUI 的地方。如果你维护 AI 编码工作流又常碰到二进制问题,可以先装一条命令跑 doctor,看本机各通道是否就位。新目标类型的接入进度见 docs/roadmap.md,命令与输出契约见 docs/cli.md。🧭
【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考