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 還原遊戲邏輯,並對照原版測試。