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」开始。