REA(Reverse Engineer Anything)逆向工程指南:让 AI 无源码追查应用行为与原生二进制
【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea
REA(Reverse Engineer Anything)是一个面向 AI 逆向工程的开源项目,以本地 MCP 服务器和 CLI 双形态工作,让 AI agent 在没有源码的前提下检查 JavaScript/Electron 应用、.NET 程序集、Android APK 与原生二进制,并返回可核验的证据。分析全程在本地完成,适合需要研究未发布产品、内部工具或竞品实现的一线工程师。
它解决什么问题,适合谁
传统逆向流程是"人开 Ghidra/IDA → 手动翻符号 → 人脑拼结论",agent 只能看文本。REA 把这套工具链接到 agent 的 MCP 协议上,agent 发起工具调用,拿到"发现 + 证据"后继续追问或写实现(来源:README.md "How REA works")。
| 维度 | 说明 |
|---|---|
| 适合 | 想无源码弄清某应用/二进制行为的研究者;需要给 agent 配本地逆向工具链的团队;CI 里做静态分析回归 |
| 不适合 | 期望模型直接输出"真相"而不看证据的场景;目标运行在远程机器、无法本地访问文件的情况 |
| 核心产出 | 模块/导入图、伪代码与汇编、函数卷宗、交叉引用,以及每条结论附带的 Evidence 记录 |
官方对工作流的描述是:"Your agent calls REA through MCP to inspect the target and trace relevant code. REA returns findings with their evidence."(来源:README.md)——agent 用这些发现去解释行为、写代码并测试,CLI 走的是同一套工作流。
上图是 REA 驱动已安装 Hopper 分析原生二进制的实例:右侧面板可见文件路径、Mach-O Loader、CPU 架构与具体地址定位,说明结论来自对真实引擎的实时调用,而非模型叙述。
3 步跑起第一次分析:环境前置与核心命令
前置条件只有一条:Node.js 22.x(>=22.23.4)、24.x(>=24.22.1)或 26.12.1+,外加 npm(来源:README.md "What you can analyze" 节开头)。Linux 上另有要求:Ghidra、JADX、固件工具与静态 JavaScript/Electron 分析依赖PATH中一个 procps 兼容的ps(来源:README.md "Quick start")。
给 agent 注册工具链用npx rea-agents setup(交互式,会预览变更并要求批准);而在终端做一次性静态分析,只需这一条命令:
npx -y rea-agents@latest analyze-javascript-application /absolute/path/to/app --json目标换成解包后的应用目录或 ASAR 文件即可。官方承诺:"The result includes modules, imports, Electron boundaries and their evidence."(来源:README.md)拿到 JSON 后,人工核验三类点:
- 模块与导入图的分布是否与目标文件实际目录结构吻合;
- Electron 边界声明(preload/主进程划分)是否成立;
- 每条结论附带的 evidence 中工件身份、来源位置是否指向真实文件。
一个实用提醒:完整应用 Evidence 对真实应用可达数百 MB,官方建议先落盘、再投影摘要视图,而不是一眼扫原始输出(来源:docs/cli.md "Run a command")。例如 334 MB 的 Obsidian 应用 Evidence 文件可投影出约 10 KB 的 summary 视图(来源:docs/cli.md)。
能力全景:33 类分析目标的输入与产出
README.md 的 "What you can analyze" 表列出 33 类目标,按依赖分三档:内置静态检查(零额外安装)、调用方自带工具、需要独立逆向引擎。
| 目标类型 | 输入 | 产出 | 前置依赖 |
|---|---|---|---|
| JavaScript / Electron | 解包目录 / ASAR | 模块、导入、Source Map、路由、IPC 与原生插件关系 | 仅 Node.js + npm |
| 原生二进制 | 二进制文件 | 伪代码、汇编、字符串、符号、调用与引用 | Hopper、Ghidra、IDA 或 Kuna 之一 |
| .NET 程序集 | PE/CLI 程序集 | 元数据、CIL 指令、声明的原生依赖、构建对比 | 无(纯静态) |
| Android APK | APK 文件 | 清单声明、类、反编译方法、引用 | Headless JADX + 完整 JDK |
| 固件 | 固件镜像 | 区域检查、提取结果、原生分析交接 | Binwalk / Unblob(Linux) |
| Go / Rust 二进制 | ELF / PE / thin Mach-O | 编译器版本、模块与构建设置 / crate 依赖边 | 内置静态检查,无需对应工具链 |
| 网站 | 目标站点 | 页面结构、脚本、网络观察、截图 | Chrome 系浏览器 |
| PyInstaller 可执行文件 | EXE | CArchive 成员、Python 版本、入口脚本、提取的字节码 | 无(纯静态) |
(以上摘自 README.md "What you can analyze" 表,完整清单共 33 行)
引擎侧的关键边界:
- 引擎故障不自动换人:"A selected provider is never replaced automatically after a runtime failure."(来源:docs/mcp-contracts.md)打开二进制的 provider 绑定写入会话后不可变。
- 引擎输出不当源码:"pseudocode is never treated as original source or Hopper-equivalent text."(来源:docs/installation.md)
- 静态分析不碰目标进程:"Static JavaScript and .NET inspection read the supplied files without running the application."(来源:README.md)运行时抓取则以你的用户权限运行或交互,各运行时指南单独描述其副作用。
- 对 objdump、Rizin 等离线原生 provider,"REA does not install or update either provider"(来源:README.md),即只复用、不捆绑。
结果凭什么可信:证据机制与未知项表述
每条工具调用的返回都不只是结论。契约原文:"Evidence records retain artifact identity, source locations, observations, inferences and unresolved findings."(来源:docs/cli.md)。设计文档进一步要求区分 unsupported 操作与空结果、未测试路径(来源:docs/tool-design.md "Exercise the analyst workflow")——这是观察 / 推导 / 推断不混写的底层机制。
对"查不到"的表述,官方同样给出硬规则:"Missing coverage is unknown, not absence."(来源:docs/tool-design.md)。具体到实现:Rust 二进制.dep-v0段缺失被定义为 null 元数据而不是"无依赖"的证明(来源:docs/cli.md);浏览器运行时观察中,已加载脚本未出现在采样里时,覆盖状态保持 unknown,而不是断言该脚本不存在(来源:docs/web-runtime.md)。
可校验点落在三处:
- 工件身份:Evidence 记录目标文件的身份与来源位置,可逐条对照目标文件;
- 引擎版本绑定:成功的深度打开会暴露 "one immutable provider, concrete version, selection source"(来源:docs/mcp-contracts.md),失败则按原始原因返回而不是含糊带过;
- 环境自检:
rea doctor --json给出结构化环境诊断,严格只读,不修改任何配置(来源:README.md "Documentation"、docs/installation.md)。
数据安全与引擎边界:本地处理与 provider 复用策略
官方 FAQ 回答得很直接:"REA analyzes targets locally. Your agent receives the tool results, and its model provider has its own data policy."(来源:README.md "FAQ")待分析文件不离开你的机器,但 agent 会收到工具结果,模型服务商的数据策略需自行评估。
引擎复用是"用你已有的,而不是替你装":
- 原生分析:"Native analysis can use an existing Hopper, Ghidra, IDA or Kuna installation"(来源:README.md);setup 可以在批准后安装 Hopper,但 Ghidra、IDA、Kuna 一律使用你现有的安装。
- 与 Ghidra 的进程通信不开公网端口,Linux 与 macOS 使用 "a current-user-only local bridge socket and descriptor"(来源:docs/installation.md),即仅限当前用户的本地 socket 与描述符;实验性 Windows 传输走认证过的 IPv4 loopback。
- Ghidra 会话默认用临时项目加
-readOnly、-deleteProject参数,隔离且不写回你的已有工程(来源:docs/installation.md)。
两条边界红线值得单独记住:静态路径永不执行目标应用;provider 选择后永不自动替换。两者共同保证了"结论可归因到具体引擎与具体工件"这一可信度前提。
延伸阅读:docs 链接清单
| 文档 | 内容 |
|---|---|
| 安装与引擎配置:docs/installation.md | agent 注册、provider 配置、doctor 诊断 |
| 全量 CLI 命令与 Evidence:docs/cli.md | 命令、provider 选择、快照、导入导出与退出码 |
| MCP 工具输出契约:docs/mcp-contracts.md | 工具结果结构、会话与 provider 绑定 |
| 工具设计原则:docs/tool-design.md | 观察/推导/推断分离、未知项表述规则 |
| 原生分析交接:docs/native-investigation.md | 引擎选择与原生工作流 |
| 架构地图:docs/architecture.mermaid | 分层与依赖路径 |
【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考