夜雨聆风学习资料网

ARTICLE · 1178623

REA:让 AI Agent 帮你逆向分析软件

REA:让 AI Agent 帮你逆向分析软件

REA 可以理解成“给 AI Agent 用的逆向分析工作台”。它把程序分析、浏览器观察、证据记录和功能复现串起来,让 Codex、Claude Code、Cursor 等 Agent 不只是写代码,也能先弄清楚一个软件到底是怎么工作的。

它不是把软件丢进去就自动还原源码的工具。更实际的用法是:提出一个具体问题,让 Agent 读取目标、追踪相关代码、展示证据,再根据已经确认的规则做一个自己的版本。

用一个恐龙游戏理解 REA

最近一篇实操文章选了 Chrome 恐龙游戏作为例子:先查清楚它为什么会越来越快,再让 Codex 做一个带速度滑块的新版本。

这个案例里的分工很清楚:

  • REA 负责连接浏览器、读取页面脚本并追踪程序逻辑;
  • Codex 负责提出分析步骤、解释规则和编写新游戏;
  • 操作者负责提出问题、确认结果、打开页面和试玩。

作者在 Mac 上使用 REA 6.4.0,先启动一个带远程调试端口的独立 Chrome,再把 http://127.0.0.1:9222 交给 Codex。Agent 先不写代码,而是只回答一个问题:原游戏的速度规则是什么。

分析得到的关键结果是:初始速度为 6;每次符合条件的游戏更新增加 0.001;在速度低于 13 时继续加速。这里的“更新”是游戏逻辑推进一次,不等于现实中的一秒。

从分析规则到自己写一个版本

规则确认后,再让 Codex 创建一个单文件网页小游戏:

  • 恐龙可以跳跃,仙人掌会从右侧移动过来;
  • 提供开始、跳跃、重开按钮,空格键也能跳跃;
  • 增加 2 到 18 的速度滑块;
  • 提供自动加速选项,并从速度 6 开始;
  • 注明哪些部分沿用了原游戏规则,哪些是重新编写的。

最后让 Agent 做一次脱离试玩的数值检查:分别计算 0、1000、4000 和 10000 次更新后的速度,参考结果为:

0 次更新       → 6.000 1000 次更新    → 7.000 4000 次更新    → 10.000 10000 次更新   → 13.001

最后一个结果略微超过 13,是因为程序采用“先判断当前速度是否低于 13,再执行加法”的逻辑,同时还会受到浮点数计算误差影响。这样的校验比只看 Agent 说“已经实现”更可靠。

REA 具体能分析什么

  • 原生程序:
    字符串、符号、汇编、伪代码、函数、调用关系和交叉引用。
  • 浏览器页面:
    页面结构、脚本、source map 和经过许可的运行证据。
  • Electron 应用:
    ASAR、BrowserWindow、preload、contextBridge、IPC 和原生扩展。
  • JavaScript 应用:
    入口文件、模块、worker、接口、存储和应用关系图。
  • 托管 PE/CLI:
    部分文件元数据、CIL、P/Invoke 和 native boundary 信息。
  • 跨版本比较:
    对比文件、函数、调用关系和已经记录的 Evidence。

它的重点不是工具数量,而是把分析结果保存成可以继续追问、复查和比较的证据。结论里如果存在缺失、矛盾或多个可能解释,也会保留为未知,而不是强行给出一个确定答案。

怎么安装

项目要求 Node.js 22.19+ 或更新版本,支持 macOS 12+、Ubuntu 24.04+、Fedora 41+、64 位 Arch Linux;Windows x64 目前属于实验性的 Ghidra 原生 PE 分析边界。

npx --yes rea-agents@latest setup npx -y rea-agents@latest doctor npx -y rea-agents@latest analyze /Applications/Notes.app

想长期使用,也可以全局安装:

npm install --global rea-agents rea setup rea doctor rea analyze /Applications/Notes.app

setup 会检测 Claude Code、Claude Desktop、Codex、Cursor、Gemini CLI 和 Windsurf 等客户端。它会先展示要修改的配置、目标路径和外部影响,确认后才执行;写入时会备份并回读验证。

Hopper、Ghidra 和浏览器观察

深度原生分析可以使用 Hopper,也支持用户自己提供 Ghidra。Hopper 是独立软件,有自己的授权和演示模式;REA 不会偷偷下载 Ghidra,也不会替用户安装 Java。

浏览器观察默认关闭,需要本地 CDP 地址和明确允许的页面来源。被动观察不会自动点击、导航或执行页面 JavaScript;如果使用会产生变化的浏览器场景,也需要单独授权。

项目强调本地分析:目标应用不会被上传到 REA 的托管分析服务。但逆向前仍要确认自己拥有目标文件或获得了必要授权,不能因为工具方便,就随意分析或复制商业软件、带 DRM 的内容和第三方数据。

适合怎样的问题

不要一上来就说“帮我完整逆向这个软件”。更好的提问方式是锁定一个功能:

请调查这个应用的搜索功能:先说明入口在哪里,再追踪数据处理路径和关键函数。每一步列出证据来源,把已确认事实、推断和未知部分分开。最后给出一个不复制原代码、但能在我的技术栈中实现类似功能的方案。

问题越具体,证据链越容易检查,Agent 也越不容易输出一份看起来完整、实际无法验证的分析报告。

限制和结论

  • REA 不保证恢复原始源码,也不会自动克隆应用。
  • 部分深度分析依赖 Hopper、Ghidra 或特定平台。
  • 混淆、缺失符号、动态代码和不完整运行时信息都会留下未知项。
  • 不同分析提供商的能力不同,REA 不会无提示地在提供商之间切换。

如果你经常研究桌面软件、Electron、浏览器功能或原生库,REA 值得试试。它最适合“我想弄明白某个具体功能”的场景:先查清楚,再决定怎样实现,而不是把它当成一键破解工具。

项目地址:https://github.com/morluto/rea

相关学习资料