Android · APK 分析
验证器如何生成登录验证码
在 Aegis 已发布的 APK 中追踪六位登录验证码,再移动演示时钟,看看它为什么每 30 秒变化一次。
阅读Android案例研究和编程助手一起做逆向工程
向你的编程助手提一个关于应用、游戏或网站的问题。REA 为它提供工具,让它检查答案背后的代码。
把这段话复制给编程助手:
使用 npx rea-agents@latest setup 安装 REA,并连接到这个编程助手。先展示安装计划,等我确认后再执行,然后验证安装结果。
逆向工程就是通过检查程序本身,了解软件如何工作。有了 REA,你的助手可以追踪代码、解释一个功能,并帮你重新实现它。
给助手一个程序或页面,再提一个问题。
REA 返回代码、引用关系和运行时观察结果。
助手根据这些发现解释或重新实现这个功能。
为什么计算器中的 200 + 10% 得到 220?
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 检查 Windows 计算器。为什么 200 + 10% 会得到 220?
在 + 之后,% 按钮计算的是第一个数的百分比。
10% of 200 = 20200 + 20 = 220
试两个例子吧:先改变游戏速度,再重新实现计算器的 % 按钮。
示例 01 · Chrome 小恐龙游戏
游戏会随着奔跑越来越快。要重新实现它并加上速度控制,我们先得弄清速度怎么变化。
用 REA 检查这个小恐龙游戏。它为什么会越来越快?找出速度规则,再做一个速度可调的小版本。
REA 让助手读到游戏正在运行的代码。速度从 6 开始,低于 13 时,每次更新都会增加一点。
我们把这条规则用在下面的小游戏里,加上了速度滑块。点击开始,再选一个自己的速度。
原版规则:速度从 6 开始,逐渐增加到 13。
分析目标:wayou 基于 Chromium 制作的浏览器版本。
if (this.currentSpeed < this.config.MAX_SPEED) {
this.currentSpeed += this.config.ACCELERATION;
}
起始速度为 6。速度低于 13 时,每次没有发生碰撞的更新增加 0.001。
各部分负责什么
REA 通过本地调试连接检查 HTTP 浏览器版本,返回了已加载的 index.js,包含源码和摘要。
ACCELERATION: 0.001,
MAX_SPEED: 13,
SPEED: 6
我们在受控的浏览器检查中调用原版更新函数,禁用了障碍物和自动调度。保留一位小数时,更新 4,000 次后的速度为 10.0,更新 10,000 次后为 13.0。
新小游戏保留了这条速度规则。绘图、跳跃和碰撞代码是简化的教学实现。打开实验室,可以查看新代码并运行同样的速度检查。
示例 02 · Windows 计算器
% 按钮在 + 和 × 之后做的事情不同。我们来找出两条规则,在一个小计算器里试试。
用 REA 检查 Windows 计算器的 % 按钮。还原 + 和 × 后的规则,再做一个同时采用这两条规则的小计算器。
REA 帮助助手读到 % 按钮背后的代码。它使用两条不同的规则:
10% of 200 = 20 → 200 + 20 = 220
200 × 0.1 = 20
我们在下面重新实现了两条规则。选 + 或 ×,按 %,再按 =。
200的10%=20. 则200+20=220。
对于这个例子, previous = 200 和 current = 10.
if (operation == multiply || operation == divide) {
percent = current / 100;
} else {
percent = current * previous / 100;
}
从已安装的应用,到能运行的 % 按钮
ms-calculator:。助手随后选择已安装应用的库。
100。
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 计算器 11.2508.4.0(x64)。可读摘要采用 Microsoft 公开源码中的名称,解释还原的分支。
查看已发布应用或游戏中的一个功能,以及相关代码和验证结果。
Android · APK 分析
在 Aegis 已发布的 APK 中追踪六位登录验证码,再移动演示时钟,看看它为什么每 30 秒变化一次。
阅读Android案例研究Electron · 功能追踪
从 Notion 打包的 JavaScript 追踪到系统剪贴板,看看复制如何保留丰富的区块数据。
阅读Notion案例研究原生程序 · 重建
还原一款 1996 年 Windows 游戏如何把球的位置转成左右声道的声音。
阅读DX-Ball案例研究第一次调查
下载 Notes 示例,追踪 CSV 导出,再修改一个输入来验证。
这些指南介绍各类软件的环境配置和第一次调查。
用 REA 检查 https://rea.tools/。帮我克隆这个网站。
对,就是这个网站。
用 REA 从这个游戏的可执行文件重建游戏。用 C 还原游戏逻辑,并对照原版测试。