Tools

REA 速评:给你的编码 Agent 装上一套逆向工程眼睛

DOC
N°039
DATE
Oct 11, 2026
READ
5 min read
TAGS
逆向工程, 编码 Agent, 开发者工具, Show HN, 程序分析

HN 10 月 10 日的首页冠军是一个名字直白到不像创业产品的工具:REA,Reverse Engineer Anything,逆向任何东西。近七百个赞同的背后是一个正在成形的共识——编码 Agent 已经会写代码、会跑测试、会操作浏览器,唯独对「别人家已编译好的程序里到底发生了什么」一无所知。REA 补的就是这块能力:把逆向工程从人类专家的手艺,变成 Agent 的一次调用。

一、它解决什么问题:程序本身也是可读数据

REA 官网开篇的例子选得极好:为什么 Windows 计算器算 200 + 10% 会得到 220?

任何试过的人都知道这个行为反直觉——10% 不是 0.1,而是「第一个数的 10%」。在没有 REA 的世界里,搞清楚这件事要么读微软开源的计算器仓库,要么自己拆二进制。而 REA 的用法是:对 Agent 说「用 REA 检查 Windows 计算器,为什么 200 + 10% 等于 220」。

Agent 拿回来的是实打实的底层证据:安装版计算器库里的 x64 汇编片段,两个跳转目标相同的比较指令,对应命令 ID 0x5b(除)与 0x5c(乘)。结合分支逻辑恢复出的规则是:

if (operation == multiply || operation == divide) {
  percent = current / 100;
} else {
  percent = current * previous / 100;
}

加法之后取「第一个数的百分比」(10% of 200 = 20,200+20=220),乘法之后才退化为普通百分比(200 × 0.1 = 20)。更妙的是验证环节:Agent 把恢复出的分支与微软公开源码交叉核对,操作符常量、除以 100 的逻辑逐条吻合,连官方单元测试链接都附上了。

二、第二个例子:恐龙游戏为什么越跑越快

浏览器端的演示展示了另一类检查路径。REA 通过本地调试连接读取页面实际加载的脚本,从 Chrome 恐龙游戏(Chromium 衍生的浏览器版)的运行时代码里摘出加速逻辑:

if (this.currentSpeed < this.config.MAX_SPEED) {
  this.currentSpeed += this.config.ACCELERATION;
}

参数原样返回:初始速度 6、每次更新加速 0.001、上限 13。Agent 还在受控浏览器环境里调用了原游戏的更新函数做行为核对——4000 次更新后速度 10.0、10000 次后 13.0,与代码逻辑一致。随后用恢复出的规则重建了一个带速度滑杆的小游戏,你可以亲手验证「重建的逻辑和原版一模一样」。

这两个例子的分工很讲究:浏览器例子展示「读到真实运行时」,原生例子展示「拆到指令级再交叉验证」。合起来是同一句话——Agent 的解释不再依赖猜测,每一句都有可复现的证据支撑。

三、接入方式:连安装都交给 Agent

REA 的 setup 也按 Agent 优先的思路设计。终端用户可以直接跑安装命令;更「正统」的用法是把官网准备好的提示词贴给你的编码 Agent,让它自己完成安装、把计划呈请你审批、验证安装,然后重启 Agent。工具的元工作也交给了被赋能的对象,这个设计自洽得有点禅意。

对使用者的实际门槛,剩下的只有逆向工程本身的合规意识。官网的选例很克制——开源的恐龙游戏、微软自己开源源码的计算器——但工具能力是中性的,用它分析什么、产出物怎么用,边界要自己把握。

四、谁最需要它:三个真实场景

第一个场景是遗留系统维护。没有源码、没有文档、原作者早已离职的内部系统,是每个老牌团队的噩梦。以前的做法是用调试器单步跟、凭经验猜数据结构,一查就是几天。现在把「搞清楚这个 DLL 里的导出函数到底做了什么」交给 Agent,它返回的是汇编证据加恢复出的伪代码,人只负责审阅结论。理解成本从「专家数日」降到「半天审阅」。

第二个场景是依赖审计。你依赖的某个闭源库行为与文档不符,issue 区三年没人理。用 REA 让 Agent 直接拆开这个库看真实实现,把「文档说 A、实际做 B」的证据链完整摆出来,再去社区发 issue 时说服力完全不同。安全审计同理:第三方 SDK 是否偷偷上传数据,与其信任隐私政策,不如让 Agent 看一眼它实际调用了哪些网络接口。

第三个场景是协议与格式逆向。做互操作开发的团队经常需要对私有协议做兼容——游戏私服、老设备通信、行业专有接口。这类工作的传统流程是抓包、比对、猜测字段含义,现在 Agent 可以直接在客户端二进制里找到序列化代码,字段含义从猜测变成注释级的确定。

五、它踩中的趋势:Agent 的能力外沿在扩张

把 REA 放进最近一年的工具演进里看,脉络很清楚。编码 Agent 最初只会改文件;然后学会跑终端命令;接着学会操作浏览器;再接着学会检查自己的 Agent 框架。REA 代表的下一步是:把「理解任意已编译软件」也变成 Agent 的原生能力。

这件事的现实价值集中在几处:维护没有文档的遗留系统时,Agent 可以直接拆开依赖库看真实行为,而不是靠猜;调试「文档与实现不符」的经典难题时,二进制不会撒谎;安全研究里,漏洞分析的第一步永远是看程序实际在做什么。

局限也直白:复杂大型程序的指令空间远超计算器,Agent 的推理窗口能不能跟上,要在真实项目里检验;混淆与加固过的目标会大幅提高难度;「重建」产出的代码质量依赖 Agent 的工程水平,不能不加审查直接用。

但方向已经足够清晰:当逆向工程从数周的手工劳动变成一句提示词,软件世界的「可读性」边界被永久推开了。值得留意的是它的示范效应——REA 证明了「专业领域工具 + Agent 推理」这个组合的可复制性,同样的架构完全可以套到网络协议分析、嵌入式固件、数据库查询计划这些领域。对每个维护遗留系统的团队来说,都值得先试一次——从那句「为什么计算器算 200 加 10% 等于 220」开始。

Frequently asked questions

REA 和传统的 Ghidra、IDA 这类逆向工具有什么区别?
定位不同而非替代。Ghidra 和 IDA 是给人类分析师用的重型平台,界面复杂、学习曲线陡峭;REA 是给编码 Agent 用的工具层,Agent 通过它拿到指令、反编译代码和调用关系,然后用自己的推理能力去解释。你可以理解为 REA 负责「看」,Agent 负责「想」。对已经用 Claude Code 或类似工具的开发者,REA 补的是「程序本身也是可读数据」这块盲区。
它的安装和接入流程是怎样的?
两条路。终端里直接跑 npx rea-agents 的 setup 命令;或者把官网准备好的提示词复制给你的编码 Agent,让它自己执行安装、生成计划请你审批、再验证安装。后者更符合它的设计哲学——装工具这件事本身也交给 Agent 办。安装完重启 Agent 即可,之后所有检查通过自然语言发起,无需记命令行参数。
它能检查哪些类型的程序?
官网演示覆盖两类。浏览器程序通过本地调试连接读取实际加载的脚本,恐龙游戏的例子里直接拿到了页面运行中的 index.js 及其摘要,连加速规则的具体参数都原样返回。原生程序则深入到指令级:Windows 计算器的例子检查的是安装版 DLL 里的 x64 汇编,用 4.1.0 版本对 Calculator 11.2508.4.0 的操作做了记录。从官网导航看,浏览器与原生各有专门的接入指南。
重建出来的逻辑可信吗,怎么交叉验证?
官网的做法值得借鉴:计算器百分号例子中,Agent 恢复出加法与乘法后对百分比的不同处理规则,再用微软开源的计算器源码交叉核对——操作符 ID、除以常数 100 的分支,与公开仓库逐条对上,连微软的单元测试都给了链接。也就是说 REA 的产出是「待验证的假设」,最终可信度取决于你是否做了第二信源的核对。没有源码可对时,就只能靠行为实验,置信度要相应打折。
这类工具的合规边界在哪里?
逆向工程的合法性取决于目的与管辖权:互操作研究、安全审计、学习教学在多数司法辖区可接受,绕过版权保护、盗用专有代码则踩线。REA 演示的对象要么是开源项目,要么是用户本机合法安装的软件,这个选例本身就是合规姿态。使用时建议只分析你有权分析的程序,产出物用于理解与重建个人用途,商用前找法务确认,尤其注意目标软件的最终用户许可协议。
// next.txt ›

Some outbound links in this post are affiliate links — see disclosure.