REA:逆向一切(3)

举报
power233 发表于 2026/10/27 12:36:17 2026/10/27
【摘要】 上手与使用场景——从一条命令到三个案例

前两部分我们聊了 REA 是什么、里面怎么搭的:它是一个面向逆向工程的 MCP 服务器兼 CLI,让 Claude Code、Codex、Cursor 这类智能体去拆二进制、Electron 应用、安卓包和网站,并且把结论连同证据一起交给你;它的几处设计,比如引擎选择不回退、证据账本里专门给“未知”留位置、大结果先给摘要,都是在对抗同一件事——智能体信心满满地给你一个没依据的结论。

聊了两篇原理,这一篇该动手了。你可能最关心几件很实际的事:怎么装?第一次该问什么?要不要先装一堆软件?它到底做出过什么像样的东西?以及,哪些事它明确不干?下面一个个来。

一、先把它装上:npx rea-agents setup 到底做了什么

README 里最醒目的就是这一行:

npx rea-agents setup

前提是你的机器上有 Node.js 和 npm。版本要求写得很具体:Node.js 22.x(>=22.23.4)、24.x(>=24.22.1),或者 26.12.1 以上。

这条命令不是闷头往你电脑里写东西,而是一个“先出方案、你点头再动手”的流程。按 docs/installation.md 的描述:

  • 它会先让你从支持的智能体里多选。已经注册过 REA 的客户端默认勾上,而新检测到的客户端不会默认勾选。文档的说法很克制:“检测给出上下文,不是许可”——发现你装了某个智能体,不等于可以替你改它的配置。
  • 选完之后,它把准备写入的路径和改动完整列出来,等你批准。拒绝,或者半路按 Ctrl-C,都不会有任何改动。
  • 真正写配置时,会保留你原有的无关条目和注释,创建备份,写完再回读校验。
  • 最后它会告诉你哪些智能体、分析工具、工作流文件通过了最终检查,并提醒你重启对应的智能体。

setup 具体装了两样东西:一是 REA 的 MCP 服务器,二是一份配套的工作流指令(skill),也就是教智能体该怎么用这套工具做协调的说明书。支持的智能体,README 点名了 Claude Code、Codex、Cursor、Gemini CLI、Grok Build 等;installation.md 的列表更长,还有 Claude Desktop、Windsurf、Devin、OpenCode、Antigravity、GitHub Copilot CLI、VS Code、Qwen Code、Kimi Code、Hermes 等,客户端 ID 加起来大约 25 个。

如果想更谨慎,有几个开关可以用:

rea setup --client codex --client cursor --skill=false --dry-run

–client 明确指定要配置谁,–skill=false 表示不装工作流指令,–dry-run 只给你看计划(状态是 planned,退出码 0),什么都不写。做自动化脚本的话,–yes 要配合明确的范围一起用。如果你想只装技能、不想 MCP 注册,也可以走 npx skills add morluto/rea --skill rea-engineer-anything——它只装技能和参考资料,不注册 MCP,也不装任何分析引擎。

还有一个 Linux 用户要注意的前提:Ghidra、JADX、固件工具的启动,以及静态 JavaScript/Electron 分析,都需要 REA 的 PATH 上有一个兼容 procps 的 ps,因为 REA 要靠它做“进程归属检查”——这正是上一部分说的“进程的安全带”的一环。多数发行版装个 procps 或 procps-ng 就行,恢复步骤写在 docs/installation.md 的 “Linux owned-process prerequisite” 一节。

另外有一句提醒,值得在这里重复一遍。README 顶部专门有个 Important 提示:请从 morluto/rea、rea.tools 或 npm 包 rea-agents 这三个官方来源获取 REA;名字相似的仓库、或者抄了 README 的仓库,并不能证明它的下载是官方的。仓库一火,仿冒品就会跟上来,这条提示不啰嗦。

二、第一次提问:对智能体说话,还是直接敲命令

装好、重启智能体之后,最自然的用法就是直接开口。README 给的示例提示词是这样的:

Understand how search works in the Notes app, show me the evidence, and build a similar feature for my project.

意思很直接:弄明白 Notes 这个应用里搜索是怎么做的,把证据给我看,然后在我的项目里做一个类似的功能。你只需要把 Notes 换成你的目标应用、把“搜索”换成你想弄懂的功能。注意这句话里的三个动作——理解、出示证据、动手实现——正好对应前两部分讲的整条链路:智能体通过 MCP 调用 REA 去取证,REA 带着证据和局限把结果交回,智能体再据此解释、实现、测试。

不过 REA 并不强迫你一定通过智能体。同样的工作流,CLI 里也能直接用。README 给的第一个终端例子是检查一个已经解压的 JavaScript/Electron 应用目录,或者 ASAR 包:

npx -y rea-agents@latest analyze-javascript-application /absolute/path/to/app --json

结果会以模型、导入关系、Electron 的边界(也就是渲染进程、preload、主进程之间的分界)以及每一项的证据。Windows 上把路径换成类似 “D:/apps/example” 的写法即可。

如果打算长期用,就装成全局命令:

npm install --global rea-agents
rea --help

这里有一个 cli.md 里写实在的提醒:真实应用的完整证据可能有几百 MB。比如文档里举的例子,一个 334 MB 的 Obsidian 应用证据文件,投影出来的摘要视图只有大约 10 KB。所以不论是你还是智能体,读结果的正确姿势都是“先把完整结果存到文件里,再让 rea inspect-analyze-view 去投影摘要、翻页或者看某个模块”:

rea analyze-javascript-application /absolute/path/to/app --json > app-evidence.json

这就是第二部分讲过的“摘要留在会话里,全量留在保险柜”的设计,落到命令行上的样子。你不用一次把几百 MB 的东西倒进屏幕,也不用担心智能体的上下文被撑爆。

REA 迭代很快,README 直说新版本“包含频繁的缺陷修复”,建议你保持更新。全局安装的用 rea update;用 npx 的,则用 npx rea-agents@latest setup 刷新新智能体注册,之后重启智能体。这里有个小坑:installation.md 说明,持久的 MCP 注册会被固定到执行 setup 时的那个版本,所以光是升级了包,不会自动更新已经跑着的服务器和注册,需要重新走一遍 setup 才行。

三、原生二进制要多一步:先给它配个“发动机”

到这里要分清两类目标,这一点决定了你上手的难度。

第一类是不需要原生分析引擎的。README 的 FAQ 写得明白:静态 JavaScript 和 .NET 检查不需要原生分析引擎。cli.md 里还列了一串开箱即用的静态检查命令,比如:

  • rea inspect-go-binary:读 Go 二进制里嵌的编译器版本、模块和构建设置;
  • rea inspect-rust-binary:读取载入的 cargo-auditable 依赖清单;
  • rea inspect-model-artifact:读 GGUF 或 safetensors 模型文件的元数据,不加载权重;
  • rea inspect-il2cpp-metadata:解 Unity 的 global-metadata.dat;
  • rea inspect-sqlite-database:看 SQLite 数据库的表、列、索引;
  • rea inspect-managed-artifact:看 .NET 程序集。

这些读取器都是内置的,装完 REA 就能用,对新手最友好。

第二类是真正的原生二进制——你要拆的代码、汇编、符号、调用关系和交叉引用。这类深度分析需要 Hopper、Ghidra 或 IDA 三者之一。分工是这样的:setup 可以在你批准之后帮你安装 Hopper;Ghidra 和 IDA 则用你已有的安装。

几个现实的细节:

  • Hopper 是单独的商业软件,有自己的许可证,免费 demo 有厂商定义的限制。REA 在需要的时候会自己启动 Hopper,你不必手动打开。但在 macOS 上,首次运行可能弹出一个对话框,让你选择 demo 模式或者激活许可证。README 要求你在同一个用户会话里先把 Hopper 打开,再去跑一个 CLI/MCP 操作或者无人值守任务。
  • Ghidra:REA 连接的是你已有的安装,接受 Ghidra 12.x(>=12.1)以及它声明所需的 64 位完整 JDK。你用 GHIDRA_INSTALL_DIR 和 JAVA_HOME 这类环境变量告诉它位置。REA 自己不会去装 Ghidra 或 Java。
  • 大二进制可能需要更长的启动时间,可以调 REA_GHIDRA_STARTUP_TIMEOUT_MS 或 REA_HOPPER_STARTUP_TIMEOUT_MS。docs 里提到 Ghidra 的启动期限默认是 330,000 毫秒,Hopper 是 120,000 毫秒。
  • 离线检查原生二进制时,REA 还支持你自备的 GNU objdump 和 Rizin,但它不会替你安装或更新这两者。

配好引擎之后,cli.md 给的命令长这样(把路径和函数名换成你自己的):

rea analyze /absolute/path/to/program --provider ghidra --json
rea function /absolute/path/to/program main --provider ghidra --json
rea decompile /absolute/path/to/program 0x1000 --provider ghidra --json
rea xrefs /absolute/path/to/program 0x1000 --provider ghidra --json

analyze 给总览,function 给某个函数的档案,decompile 给伪代码,xrefs 给交叉引用;只想看汇编,用 rea instructions。如果有多个引擎都支持同一个目标,REA 不会替你猜,需要你用 --provider 明确指定,或者设 REA_ANALYZE_PROVIDER;在 MCP 里则是给 open_binary 传 provider_id。这和第二部分讲的“确定性选择、不回退”是一脉相承的。想看当前有哪些引擎可用,rea providers --json 就行。

万一哪里不对,rea doctor 是你的朋友:它只读,检查主机前提、智能体配置、已安装的 skill 和可选引擎,还能限定范围,例如 rea doctor --provider ghidra --json、rea doctor --client codex --json,免得为了一个不相干的引擎没装,被整体“不健康”的结论吓一跳。

README 里的支持表还有很长一串:Go/Rust 二进制、GPU 代码对象、Godot PCK、Linux 内核模块、Erlang BEAM、WASM、EVM 字节码、网站(需要 Chrome 系浏览器)、HAR 抓包、Android APK、Android 设备(需自备 adb)、固件(Binwalk/Unblob、Linux)、PyInstaller 可执行文件等。每一行都标明了“需要什么才能用”,你可以对照自己的目标去查。

要记住一条边界:静态 JavaScript 和 .NET 检查只读你的文件、不运行应用;而运行时捕获会以你的用户权限运行或交互所选目标,每一个运行前都会有明确的影响。

四、三个案例怎么读:从声像计算到弹幕环

光看功能容易没感觉,README 的 Showcases 一节放了三个真实案例,刚好覆盖了三种很不一样的目标。我只讲 README 写了的部分,更多细节要去它们各自的案例页。

DX-Ball:重建一个声像计算

这是原生二进制的例子。流程是:从一次“播放声音”的调用出发,追进位置到声音的辅助函数——也就是把物体在屏幕上的位置换算成左右声道比例的那一小段代码——检查它的指令,再把不完整的代码整理成 C。README 给了很有说服力的验收数字:重建出来的版本通过了 3,205 个原始 x86 用例,并且复现了全部 63 个编译后的函数数字。这不是“看起来差不多”,而是字节对得上。案例页在 rea.tools/showcase/dx-ball/,重建的仓库是 github.com/N0zoM1z0/dx-ball。

Notion:追踪 Electron 的剪贴板粘贴

这是 JavaScript/Electron 的例子,对应前面看到的 analyze-javascript-application。它要回答的问题是:你在 Notion 里复制一段内容,粘贴到应用内部时经历了什么?README 的描述是:先找到剪贴板进程的剪贴板 API,顺着 preload 和 IPC 一路追进主进程,最后检查那份“富贴板”的格式。这条路径正好踩在 Electron 的架构边界上——页面里的代码不能直接操作剪贴板,要通过 preload 和 IPC 去求主进程帮忙——也是 REA 输出里“Electron 边界”这个字段存在的意义。案例页在 rea.tools/showcase/notion/。

TH04:恢复一个 DOS 弹幕环计算

这个最有“考古”味道。目标是一款原版 PC-98 游戏,用的是 16 位指令。REA 检查这 16 位指令,恢复固定弹和“自机狙”两类角度的计算方式,再把重建出来的 C++ 与历史编译结果精确地对齐。案例页在 rea.tools/showcase/th04/,重建仓库是 github.com/N0zoM1z0/th04。README 没有说明更多细节,更完整的描述过程需要去案例页。

把这三个案例放一起,你能看到 REA 的“使用姿势”其实就一套:先提一个具体而小的问题(一个声像函数、一个弹幕角度),让证据把答案一步步托住,最后用可验证的方式收尾(用例通过、字节一致、与编译器输出对齐)。它擅长的不,是“把整个软件一口吞下”,而是把一个功能点从黑盒里抠出来。README 也邀请大家分享自己的案例:通过 issue 或 PR,写明目标、问题、REA 怎么帮上忙、发现了什么。

或者更直接地说,README 里的“构建 RL 环境”。它的想法是,给 AI 智能体一个本地环境去练习任务,比如找一个 issue、新建一个文件等,而不需要运行原应用,可以用于强化学习,或者测试智能体完成任务的水平。做法是把录下来的 API 请求和响应,变成智能体能调用的工具;环境靠录制数据回答,并且只有在录制证实了某种修改的效果时,才支持这种修改。命令行是:

rea environment-build ./session.har ./my-env --name my-env --json
agent-env run ./my-env

前提是你已经有一份记录了浏览器请求和响应的文件,并且运行结果还需要 AgentEnv 和 Docker。导出的环境会带一个基本测试,用来检查它能启动、能响应。想让智能体替你做,README 也给了提示词示例:让 REA 为本地测试 Web 应用 http://127.0.0.1:3000 构建 RL 环境,覆盖文件夹的列出、创建、重命名和删除,保存到 my-env 文件夹。这条线说明 REA 的“证据”不只用来讲给人听,也能用来给智能体练功。

五、适合谁,不适合谁,以及一条不能含糊的线

按上面这些材料,我觉得下面几类人会觉得它顺手:

  • 想弄清某个应用里一个功能是怎么实现的,但拿不到源码的开发者;
  • 做迁移、教学或者 CTF 的人,需要把结果归程序的逻辑还原出来并验证;
  • 已经在用 Claude Code、Codex、Cursor 等智能体,想让它们多一双“看二进制”的眼睛的人;
  • 想要的不只是一个结论,而是“结论加证据加局限”的人。

反过来,如果你的预期是“丢个程序进去,自动给我一份完整源码”,那 REA 的文档本身就在泼冷水:反编译、重建和启发式分析(包括借助 AI 的分析)都可能不完整甚至不正确,需要你自己核对证据;而且拿到“完整源码”的输出,并不意味着你获得了原程序、它的数据或者生成物的任何权利。

接下来是这篇里我觉得最该认真读的部分——DISCLAIMER.md。REA 把自己定位在合法分析与安全研究、恶意软件与事件分析、漏洞研究与协调披露、CTF 与教学、互操作、软件保存,以及为研究提供便利的文档和工具上。同时它也白纸黑字列出了项目不支持、也不帮助做的事:

  • 规避 DRM、许可检查、反作弊或其他技术保护措施;
  • 开发游戏外挂,或者篡改在线服务;
  • 绕过无权测试的系统的认证、机密防护或访问控制;
  • 复制专有软件、或其现已受保护的代码和资源;
  • 规避 AI 模型提供商的使用政策或安全措施;
  • 转售或共享 AI 账号或 API 访问。

违反这条线,在 issue 和讨论区会被不予回应地关闭,还可能被请出社区。文档还特别强调责任在你:你下的命令、配置、脚本,以及你指示智能体做的操作,后果都由你负责;软件是公开的,文件在你手里,调试站点能用在对任何一种不被授权的活动上都行。对运行时、网络和设备安装操作尤其如此,它们可能改变应用状态、文件、账号、设备和服务;“被允许查看一个文件”不等于“被允许执行它、拦截它的流量,或者去碰别人的系统”。文档建议,对不可信的目标,用合适的隔离环境。

商业工具这一条也说得很硬:IDA Pro 与 Hex-Rays 反编译器、Hopper、JEB 这些专有软件,必须由你合法取得并拥有使用权;REA 不提供任何商业工具的许可证、密钥或激活权利。破解版、盗版密钥、未经授权共享密钥、绕过许可限制,一概不被授权。REA 自身的代码是 MIT 许可,第三方材料保留各自的许可,软件按“原样”提供,不附带担保。

六、局限与一点客观评价

最后把它的短板老实一下,全部来自它自己的文档:

  1. 深度原生分析要靠别人的引擎。Hopper、Ghidra、IDA 才是真正干活的分析后端,其中 Hopper、IDA、JEB 是商业软件,许可证由你自己解决。
  2. 环境要求因目标而异。Linux 上要有 procps 的 ps;网站分析要 Chrome 系浏览器;安卓设备要自备 adb;APK 分析要 JADX 和完整 JDK;抓包要 tshark;固件要 Binwalk 或 Unblob。哪些主机、哪些格式支持,也随引擎不同而不同。
  3. 要经常更新。它自己承认发版很快,修复很勤,而 MCP 注册又固定在 setup 时的版本,所以“装一次一劳永逸”在这里不成立。
  4. 结果不一定“完整”。按 cli.md 的说明,退出码为 0 的操作,结果里也可能带有部分证据。警告或部分结果的地方,也是它诚实的地方,也意味着你得读它的“局限字段”。
  5. 数据去向要想清楚。README 的 FAQ 说,REA 在本地分析目标;但你的智能体会收到工具返回的结果,而背后的模型提供商有自己的数据政策。
  6. 没有对比评测。README 没有拿它和其他同类工具做对比评测,所以谁更强、强多少,这里没有数据,我也不打算替它编。你可以做的最朴素的对比,是想想自己直接开着 Ghidra 或 IDA 手工分析一遍要花多少力气,再看智能体加 REA 把它压缩成了几次提问。

本部分小结

三篇走到这里,可以用一句话收束:REA 不是一个“更会猜的智能体”,而是一套让智能体少猜、可查、可复核的工具。

上手的路径其实很短:一条 npx rea-agents setup,批准改动,重启智能体,然后像 README 的示例那样直接开口提问;想贴高能,就用 analyze-javascript-application 这类 CLI 命令,先存文件,再看摘要。碰到原生二进制,就多配一个 Hopper、Ghidra 或 IDA。DX-Ball、Notion、TH04 三个案例,分则展示了原生二进制、Electron 和 16 位 DOS 三种目标上的同一套打法:问一个小问题,用证据托住答案,用可验证的方式收尾。

而 DISCLAIMER.md 划的那条线,是用了它就必须守定的一页:只分析你拥有或获授权的东西,不碰 DRM、反作弊、未授权访问,也别指望它替你解决商业工具的许可。线内,它是个相当扎实的帮手;线外,它不会帮你。

项目信息

  • 仓库:https://github.com/morluto/rea
  • 官网:https://rea.tools/
  • npm 包:rea-agents(package.json 版本 6.7.0;文档示例里已出现 6.8.0)
  • 语言:以 TypeScript 为主(依据 package.json 与 tsconfig 推断,仓库页的语言占比未取到),另含 Python 与 Java 的引擎桥接脚本
  • Star:热点站用快照约 37 万以上、本周新增约 22.9 万(早期快照);仓库页最新显示 392.3k,Fork 98.3k;README 中写有“300,000 GitHub stars — thank you!”
  • 许可证:MIT
  • 社区:README 提供 Discord 社区入口
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。