REA 发布逆向工程工具,让编码智能体解释程序行为
REA Reverse – Engineer Anything
REA 发布面向编码智能体的逆向工程工具,让智能体检查程序并解释其行为。用户可通过 npx rea-agents@latest setup 安装并接入编码智能体,再用自然语言提问。
用你的编码智能体进行逆向工程
了解软件
如何运作。
REA 为你的智能体提供工具,用于检查程序并解释 它的功能。
已经了解 RE? 跳到分析指南 →
设置 REA
把这段内容复制到你的编码智能体中:
使用 npx rea-agents@latest setup 安装 REA 并将其连接到此编码智能体。向我展示设置方案以供批准, 然后验证安装。
或者在终端中运行:
npx rea-agents@latest setup
批准设置方案,然后重启你的智能体。
什么是逆向工程?
通过 检查程序本身来了解软件如何运作。
目标:充分理解某个功能,以便 解释它、 修改它或 重建它。
一个问题: 为什么计算器对 200 + 10% 给出 220?
使用 REA 之前 · 你 自己调查
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
0x180124960: LEA RCX, [RSP + 0x160]
0x180124968: CALL 0x180122650
0x18012496e: LEA RDX, [R13 + 0x160]
0x180124975: LEA RCX, [RSP + 0x78]
0x18012497a: CALL 0x180109720
0x18012497f: MOV RSI, RAX
0x180124982: MOV qword ptr [RSP + 0x28], RAX
0x180124987: LEA RDX, [RSP + 0x160]
0x18012498f: MOV RCX, RAX
0x180124992: CALL 0x180123190
; … value-copy instructions omitted …
0x180124a14: MOV RDX, RDI
0x180124a17: LEA RCX, [RSP + 0xf8]
0x180124a1f: CALL 0x180109720
0x180124a24: LEA R8, [RSP + 0x30]
0x180124a29: MOV RDX, RAX
0x180124a2c: LEA RCX, [RSP + 0xb8]
0x180124a34: CALL 0x180123c10
你解码指令、跟踪调用并重建 计算过程。
使用 REA · 你询问 你的智能体
一个提示词。
用通俗的英语询问你的智能体。
使用 REA 检查 Windows 计算器。为什么 200 + 10% 给出 220?
示例答案 · 基于调查结果
按下 + 后,% 按钮取 第一个数字的百分比。
10% of 200 = 20200 + 20 = 220
- REA 提供
- 处理程序的指令、反编译代码和调用。
- 你的智能体解释
- 哪个分支适用、它计算什么以及如何重建 它。
让我们尝试两个示例。 修改游戏的速度,然后回到计算器并重建它的 % 按钮。
示例 01 · Chrome 的恐龙游戏
为什么恐龙会变快?
- 目标
- 重建游戏,使其具有 可调节的速度。
- 为什么要对它进行逆向工程?
- 为了重现它的加速,我们需要 运行中游戏里的规则:它 起始多快、增加多少以及何时停止。
体验重建版
原始规则:从 6 开始,然后增加到 13。
REA 返回了
页面中实际运行的脚本。 智能体读取其更新函数和速度设置,然后在新游戏中 使用该规则。
使用 REA 来检查这个恐龙游戏。它为什么会变快?展示速度规则,然后用可调节的速度构建一个小版本。
已检查的目标: wayou 的基于 Chromium 的浏览器版本。
if (this.currentSpeed < this.config.MAX_SPEED) {
this.currentSpeed += this.config.ACCELERATION;
}从 6 开始。 在未发生碰撞的情况下每次更新增加 0.001,直到速度低于 13。
各部分的作用
- 01 · REA读取正在运行的游戏脚本将其实际代码和设置返回给智能体。
- 02 · 你的智能体重建规则,添加控制在带有速度滑块的小游戏中使用恢复出的加速度。
- 03 · 你改变速度并游玩先试试原始加速度,然后选择你自己的节奏。
查看脚本、检查项以及如何尝试该分析
REA 通过本地调试连接检查了 HTTP 浏览器版本,并返回了已加载的 index.js,包括其源代码和摘要。
ACCELERATION: 0.001,
MAX_SPEED: 13,
SPEED: 6我们在受控的浏览器检查中调用了原游戏的更新函数,并禁用了障碍物和自动调度。经过 4,000 次更新后,速度为 10.0;经过 10,000 次后,速度为 13.0,四舍五入到一位小数。
新的小游戏保留了该速度规则。其绘制、跳跃和碰撞代码是一个小型教学实现。打开实验室以查看新代码并运行相同的速度检查。
要自行检查目标,请按照浏览器连接步骤操作,使用恐龙页面。将该页面 URL 和你的本地调试端点提供给智能体,然后复制上面的提示词。
已检查的速度代码 · Chromium Authors · BSD 许可证
示例 02 · Windows 计算器
重建计算器的 % 按钮。
我们看到了为什么 200 + 10% 得到 220。 现在让我们恢复 + 和 × 两者的规则,并试一试。
- 目标
- 构建一个小型计算器,能够正确处理 + 和 × 两者。
- 为什么要对它进行逆向工程?
- 同一个按钮在 + 和 × 之后使用不同的规则。 我们检查已安装的应用,以找出百分比被应用到哪个数字上。
尝试计算
200 + 20
200 的 10% = 20。然后 200 + 20 = 220。
REA 返回了
一个分支除以 100。另一个还会乘以第一个数字。 智能体使用两者来重建 % 按钮。
对于此示例,previous = 200 和
current = 10。
使用 REA 检查 Windows 计算器的 % 按钮。恢复 + 和 × 之后的规则,然后构建一个同时使用两者的 小型计算器。
if (operation == multiply || operation == divide) {
percent = current / 100;
} else {
percent = current * previous / 100;
}- 使用 +
-
取第一个数字的 10%。
10% of 200 = 20 → 200 + 20 = 220 - 使用 ×
-
将 10% 变为 0.1。
200 × 0.1 = 20
从已安装的应用到一个可用的 % 按钮
-
01 · REA 读取 calc.exe它启动计算器应用代码打开
ms-calculator:。然后智能体 选择已安装应用的库。 -
02 · REA 读取库返回 % 处理程序的代码该函数检查运算符并使用常量
100。 - 03 · 你的智能体解读它解释并复现规则将该分支与微软的源代码交叉核对,然后尝试上面的 + 和 ×。
查看真实代码以及答案是如何核对的
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#define IDC_MUL 92 // 0x5c
#define IDC_DIV 91 // 0x5b
#define IDC_PERCENT 118 // 0x76
0x64 = 100使用 REA 4.1.0 检查:Windows Calculator 11.2508.4.0,x64。 可读摘要使用微软公开源代码中的名称来 解释恢复的分支。
你的第一次调查
在一个小型应用上尝试 REA。
下载我们的 Notes 示例,追踪其 CSV 导出,并检查一个 更改过的输入。
想深入了解?
告诉你的智能体你想理解或构建什么。借助 REA, 你们可以一起处理任何事情,从 克隆这个网站到 从其可执行文件重建一个游戏。
使用 REA 检查 https://rea.tools/。为我克隆这个网站。
是的,就是这个。
使用 REA 从其可执行文件重建这个游戏。 用 C 恢复游戏逻辑,并针对原始版本进行测试。
有关设置和分析步骤,请选择你的目标:
原生二进制文件
检查可执行文件和库中的函数、字符串、引用和调用关系。
JavaScript 与 Electron
从应用程序文件夹或 ASAR 归档中映射模块、路由、IPC 和原生依赖项。
浏览器与运行时活动
捕获选定的浏览器或进程活动,然后比较 各次运行的结果。
来源:Hacker News · rea.tools