Hacker News 中文摘要

RSS订阅

REA Reverse – Engineer Anything

逆向工程(Reverse Engineering)可与编码智能体(coding agent)配合,REA 为智能体提供检查程序并解释其功能的工具。安装 REA 时,在编码智能体粘贴指令或在终端运行 npx rea-agents@latest setup,安装并连接智能体,展示并批准设置计划后重启并验证。逆向工程是通过检查程序本身了解软件如何工作,目标是理解某个功能,以便解释、修改或重建。为什么计算器(Calculator)在 200 + 10% 时给出 220?用 REA 之前,你只能自己查看汇编指令调查。

正文

用你的编码 agent 做逆向工程

了解软件如何工作

REA 为你的 agent 提供工具,用来检查程序并解释它的行为。

安装 REA

把下面这句话复制到你的编码 agent 里:使用 npx rea-agents@latest setup 安装 REA,并把它连接到当前编码 agent;先让我看安装计划并批准,然后验证安装。或者在终端里运行 npx rea-agents@latest setup,批准安装计划后重启你的 agent。

什么是逆向工程?

通过检查程序本身来搞清楚软件如何工作。目标是能把一个功能理解到足以解释、修改或重建它。

一个问题是:为什么 Calculator 在算 200 + 10% 时给出 220?

在 REA 之前 · 你自己调查

你会看到类似 MOV EAX, dword ptr [R13 + 0x18]、CMP EAX, 0x5c、JZ ...、MOV EDX, 0x64、以及一串 CALL ... 的汇编指令。

你得解码这些指令、跟踪调用并还原计算过程。

有了 REA · 你问你的 agent

一个提示

用通俗的话问你的 agent。

用 REA 检查 Windows Calculator。为什么 200 + 10% 会得到 220?

基于发现的示例回答

在 + 之后,% 按钮取的是第一个数的百分比。200 的 10% 是 20,于是 200 + 20 = 220。

REA 提供处理函数的指令、反编译代码和调用。你的 agent 则解释适用哪个分支、它计算了什么,以及如何重建它。

这里选出的汇编来自已安装的 Calculator DLL,思路和回答说明了这些发现。

我们来试两个例子。 先改一个游戏的速度,再回到 Calculator,重建它的 % 按钮。

示例 01 · Chrome 的恐龙游戏

恐龙为什么会变快?

目标:重建一个速度可调的游戏。

为什么要逆向?要复现它的加速,需要拿到运行中游戏里的规则:起始多快、每次加多少、什么时候停止。

在重建版里,按 Play 然后跳过仙人掌;拖动滑块可以自己设定速度,空格或 Jump 也能跳过仙人掌。初始速度是 6.0,采用的就是恢复出来的加速规则。

REA 返回了页面里真正在运行的脚本。agent 读取它的更新函数和速度设置,然后把这条规则用在新游戏里。

用 REA 检查这个恐龙游戏。它为什么会变快?给出速度规则,然后做一个速度可调的小版本。

检查目标:wayou 的 Chromium 衍生浏览器版。

关键代码是:如果当前速度小于 config.MAX_SPEED,就把 config.ACCELERATION 加到当前速度上(if (this.currentSpeed < this.config.MAX_SPEED) { this.currentSpeed += this.config.ACCELERATION; })。

从 6 开始,只要没碰撞且速度低于 13,每次更新就加 0.001。

各部分的作用:

  1. 01 · REA:读取运行中游戏的脚本,把它的真实代码和设置返回给 agent。
  2. 02 · 你的 agent:重建规则并加上控件,在一个带速度滑块的小游戏里使用恢复出来的加速度。
  3. 03 · 你:改变速度并试玩,先试试原来的加速度,再选自己的节奏。

下面是脚本、检查以及如何自己尝试分析。REA 通过本地调试连接检查了 HTTP 浏览器版,返回已加载的 index.js,包括其源码和摘要。

配置是 ACCELERATION: 0.001, MAX_SPEED: 13, SPEED: 6。

我们在受控浏览器检查里调用了原游戏的更新函数,禁用障碍物和自动调度。4,000 次更新后速度是 10.0;10,000 次后是 13.0(保留一位小数)。

新小游戏保留了这条速度规则;它的绘制、跳跃和碰撞代码是一个小的教学实现。打开 lab 可以看到新代码并跑同样的速度检查:Open the lab。

想自己检查该目标,可按浏览器连接步骤,使用恐龙页面。把该页面 URL 和你的本地调试端点给 agent,然后复制上面的提示。

被检查的速度代码 · Chromium Authors · BSD license

示例 02 · Windows Calculator

重建 Calculator 的 % 按钮

我们已经看到为什么 200 + 10% 得到 220。现在来恢复 + 和 × 两种情况下的规则,并试一下。

目标:做一个能正确处理 + 和 × 的小计算器。

为什么要逆向?同一个按钮在 + 和 × 之后用的是不同规则。我们检查已安装的应用,找出百分比到底作用在哪个数上。

试算一下:输入 200 + 10,按 % 看 10 会变成什么。这是被检查百分比规则的交互演示。

REA 返回的结果:一个分支只是除以 100,另一个还会再乘上第一个数。agent 用这两条规则重建 % 按钮。

在这个例子中,previous = 200,current = 10。

用 REA 检查 Windows Calculator 的 % 按钮。恢复 + 和 × 之后的规则,然后做一个同时使用这两条规则的小计算器。

恢复出的代码逻辑是:如果操作符是乘法或除法,percent = current / 100;否则 percent = current * previous / 100(完整代码:if (operation == multiply || operation == divide) { percent = current / 100; } else { percent = current * previous / 100; })。

在 + 的情况下,取第一个数的 10%:200 的 10% 是 20,于是 200 + 20 = 220。

在 × 的情况下,把 10% 变成 0.1:200 × 0.1 = 20。

从已安装应用到可用的 % 按钮:

  1. 01 · REA 读取 calc.exe:它启动 Calculator 应用,代码打开 ms-calculator:,随后 agent 选择已安装应用的库。
  2. 02 · REA 读取该库:返回 % 处理函数的代码。该函数检查操作符,并使用常量 100。
  3. 03 · 你的 agent 进行解释:说明并复现规则,用 Microsoft 的源码交叉验证该分支,然后按上面试 + 和 ×。

下面是真实代码以及答案是如何被验证的。对应汇编会先 0x180124945: MOV EAX, dword ptr [R13 + 0x18],然后 0x180124949: CMP EAX, 0x5c、0x18012494c: JZ 0x180124aba,再 0x180124952: CMP EAX, 0x5b、0x180124955: JZ 0x180124aba,接着 0x18012495b: MOV EDX, 0x64。

其中 0x5c 是乘法按钮 IDC_MUL(92),0x5b 是除法按钮 IDC_DIV(91),0x76 是百分号按钮 IDC_PERCENT(118);0x64 = 100。

检查环境为 REA 4.1.0:Windows Calculator 11.2508.4.0,x64。可读性总结使用了 Microsoft 公开源码中的命名来解释恢复出的分支。

百分比实现 · Microsoft 的测试用例 · Native 安装指南

在一个小应用上试用 REA

下载我们的 Notes 示例,跟踪它的 CSV 导出,并检查一个被改动的输入。试试引导示例

想更进一步?

告诉你的 agent 你想理解或构建什么。有了 REA,你们可以一起做任何事,从克隆这个网站,到从可执行文件重建一个游戏。

比如对 agent 说:用 REA 检查 https://rea.tools/,把这个网站克隆给我。agent 回答:是的,就是它。再让它用 REA 从这个可执行文件重建这个游戏,恢复出 C 语言写的游戏逻辑,并与原版对照测试。

查看 DX-Ball 案例研究 →

评论

多数人对这个开源逆向工程代理(REA)表示欢迎或想尝试,认为它能降低逆向门槛,并保留在模型日益封锁下继续学习、重建甚至“开源”闭源程序的能力。少数人则质疑它的实际增量,反复追问它比直接让编码代理安装 Ghidra 或 radare2 强在哪里;同时,关于代理安装方式的调侃与逆向闭源软件的法律风险也形成了次要争议。

认为它能降低逆向门槛并保留重建/开源闭源程序的能力

  • 多数人感谢作者开源并关注该项目,准备用于 OpenBFME 等项目;也有人期待从可执行文件重建老游戏,或认为现在“没有借口”不逆向任天堂、NVIDIA CUDA 等著名闭源二进制并让它们“开源”。(认可度:较多人)
  • 需要引用时,只用一句中文意译: > 这些模型训练于人类全部智识产出这一全球公有领域,却被用来反过来封闭它,这让我感到奇怪。(@areoform)

认为它相比现有编码代理加逆向工具缺乏明显增量

  • 有用户质疑:这和直接让编码代理(如 Claude)在本机安装并配置一套含 Ghidra 的完整逆向环境再开工,有什么本质区别?也有人问它比直接给代理 radare2 好在哪里。核心疑问是项目到底做了哪些现有逆向方法论做不到的事。(认可度:少数人)
  • 需要引用时,只用一句中文意译: > 这和直接让编码代理在本机安装并配置一套含 Ghidra 的完整逆向环境再开工相比,到底强在哪里?(@ethin)

认为闭源逆向仍会招来资金雄厚公司的诉讼风险

  • 技术门槛降低不代表法律风险消失;即使现在“没有借口”不逆向任天堂、NVIDIA CUDA 等闭源软件并公开,相关公司的律师仍会提起诉讼,而这些公司资金雄厚、并不在乎技术上的可行性。(认可度:少数人)
  • 需要引用时,只用一句中文意译: > 唯一的问题是,这些公司的律师会随时提起诉讼,而他们钱多到根本不在乎。(@rvz)

认为让代理执行的安装方式只是 curl 管道 bash 的进化版

  • 有用户把“把安装指令复制进编码代理执行”的指引戏称为安装方式的下一代进化——也就是 curl 管道 bash,暗示对这种让代理自动安装的方式感到讽刺或不安,属于纯玩笑但代表部分社区情绪。(认可度:少数人)
  • 需要引用时,只用一句中文意译: > 我们终于把安装方式进化成了下一代的“curl 管道 bash”。(@mb7733)

有价值的补充

  • 法律背景:讨论中提到美国 DMCA 第 1201 条的豁免规定(含第 1201(a)(1) 条豁免)、《计算机欺诈与滥用法》(CFAA),以及“意图/目的/犯意”在法律判断中的关键作用;豁免例子包括农场主维修自己拥有的拖拉机、过时 Kindle 等,配图是美国国会图书馆的 DMCA 例外页面。(@areoform)
  • 模型护栏误伤:有用户向 Claude 阐述上述 DMCA/逆向法律观点时,被 Opus 5.5 的安全护栏以“安全”为由拒绝,详情被归为网络安全类,反映前沿模型封锁或护栏可能误判非攻击性的逆向/法律讨论。(@areoform)
  • 复古计算场景:有人希望从可执行文件重建老游戏,并询问是否支持 Motorola MC68010 架构,目标是 4K 运行《Stun Runner》。(@nailer)