---
title: 'REA: 和程式設計助手一起做逆向工程'
url: https://rea.tools/zh-TW/
---

和程式設計助手一起做逆向工程

# 弄清楚 軟體如何工作。

向你的程式開發助手提一個關於應用程式、遊戲或網站的問題。REA 為它提供工具，讓它檢查答案背後的程式碼。

[開始使用](https://rea.tools/get-started/)
[看一個例子 ↓](https://rea.tools/zh-TW/#dinosaur)

## 安裝與配置 REA

把這段話複製給程式設計助手：

你的程式設計助手

使用 npx rea-agents@latest setup 安裝 REA，並連線到這個程式設計助手。先展示安裝計劃，等我確認後再執行，然後驗證安裝結果。

也可以在終端執行：

`npx rea-agents@latest setup`

確認安裝計劃後，重啟程式設計助手。


配置方式


其他安裝方式：[curl →](https://rea.tools/get-started/#curl-installation)

第一次使用，還沒安裝 Node.js 或程式設計助手？[跟著安裝指南一步步來 →](https://rea.tools/get-started/)

[建立 RL 環境 →](https://rea.tools/zh-TW/#rl-environments)

錄製 Web 應用程式，用於訓練與測試代理。

[檢視案例 →](https://rea.tools/zh-TW/showcase/)

調查過程與互動示範。

[部落格 →](https://rea.tools/zh-TW/blog/)

方法與軟體重建筆記。

## 如何運作

逆向工程就是透過檢查程式本身，了解軟體如何運作。有了 REA，你的助手可以追蹤程式碼、解釋一個功能，並幫你重新實作它。

1. ### 問一個具體功能

   給助手一個程式或頁面，再提一個問題。
2. ### 檢查程式

   REA 協助你的代理閱讀程式碼，了解程式執行時的行為。
3. ### 理解它，再試著修改

   助手根據這些發現解釋或重新實作這個功能。

展開完整的計算機調查

為什麼計算機中的 200 + 10% 得到 220？

### 一步步閱讀指令

原始 x64 指令節選 

```
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
```



01 · 走哪個分支？

“**0x5b？0x5c？**兩個跳轉去了同一個位置。它們對應哪些運算子？”

查詢命令 ID，再標明分支含義。

0x5b
:   除÷

0x5c
:   乘×

02 · 這些函式呼叫做什麼？

“100 很明確，但函式呼叫只有地址。**哪個負責除法？傳進去的是哪個值？**”

檢查輔助函式，追蹤儲存的數值。

0x64
:   100

…123190
:   除法

03 · 規則是什麼？

“這個分支乘上了另一個輸入。所以在 + 之後，**10% 表示 200 的 10%**。”

確定運算元的含義，並檢查兩條運算路徑。

200 × 10 / 100
**20**

![](https://rea.tools/assets/localized/zh-TW/figures/analyst-thinking.svg)

專家思考過程示意

**你需要讀懂指令、追蹤呼叫，再還原計算過程。**

向助手提同一個問題

示例 prompt · 計算器

用 REA 檢查 Windows 計算器。為什麼 200 + 10% 會得到 220？

示例回答 · 根據分析結果

在 + 之後，% 按鈕計算的是**第一個數的百分比。**

`10% of 200 = 20`**200 + 20 = 220**

REA 提供
:   處理函式的指令、反編譯程式碼和呼叫關係。

程式設計助手解釋
:   走哪個分支、怎樣計算，以及如何重新實現。

彙編節選自已安裝的計算器 DLL。思考過程和回答用於解釋分析結果。[繼續看完整的計算器示例 ↓](https://rea.tools/zh-TW/#calculator)

試兩個例子吧：先改變遊戲速度，再重新實作計算機的 % 按鈕。

示例 01 · Chrome 小恐龍游戲

## 為什麼恐龍變得更快？

遊戲會隨著奔跑越來越快。要重新實作它並加上速度控制，我們先得弄清速度怎麼變化。

### 1. 問一問速度

範例問題 · 恐龍遊戲

用 REA 檢查這個小恐龍游戲。它為什麼會越來越快？找出速度規則，再做一個速度可調的小版本。

### 2. 找到速度規則

REA 讓助手讀到遊戲正在執行的程式碼。速度從 6 開始，低於 13 時，每次更新都會增加一點。

### 3. 玩一玩結果

我們把這條規則用在下面的小遊戲裡，加上了速度滑桿。點擊開始，再選一個自己的速度。

速度 6.0
 使用還原的加速規則

原版規則：速度從 6 開始，逐漸增加到 13。

拖動滑塊，選擇自己的速度。按空格鍵或“跳躍”越過仙人掌。



開啟 JavaScript 就能玩。你仍然可以閱讀規則，並展開下方的原始碼。

[開啟速度實驗室 →](https://rea.tools/zh-TW/examples/dino-lab/)

檢視指令碼、驗證過程和分析步驟

分析目標：[wayou 基於 Chromium 製作的瀏覽器版本](https://wayou.github.io/t-rex-runner/)。

REA · 已載入 index.js · 程式碼節選

```
if (this.currentSpeed < this.config.MAX_SPEED) {
  this.currentSpeed += this.config.ACCELERATION;
}
```

起始速度為 6。速度低於 13 時，每次沒有發生碰撞的更新增加 0.001。

各部分負責什麼

1. 01 · REA

   讀取正在執行的遊戲指令碼

   把實際程式碼和設定交給助手。
2. 02 · 程式設計助手

   重建規則，加入控制

   把還原的加速規則用於帶速度滑塊的小遊戲。
3. 03 · 你

   調整速度，親自試玩

   先體驗原版加速，再選擇自己的節奏。

REA 透過本地除錯連線檢查 HTTP 瀏覽器版本，返回了已載入的 `index.js`，包含原始碼和摘要。

實際指令碼中的設定節選

```
ACCELERATION: 0.001,
MAX_SPEED: 13,
SPEED: 6
```

我們在受控的瀏覽器檢查中呼叫原版更新函式，禁用了障礙物和自動排程。保留一位小數時，更新 4,000 次後的速度為 10.0，更新 10,000 次後為 13.0。

新小遊戲保留了這條速度規則。繪圖、跳躍和碰撞程式碼是簡化的教學實現。[開啟實驗室](https://rea.tools/zh-TW/examples/dino-lab/)，可以檢視新程式碼並執行同樣的速度檢查。

想親自分析？用[小恐龍頁面](https://wayou.github.io/t-rex-runner/)跟著[瀏覽器連線步驟](https://rea.tools/zh-TW/guides/browser/#prepare)操作。把頁面網址和本地除錯地址交給助手，再複製上面的 prompt。

[分析的速度程式碼](https://github.com/wayou/t-rex-runner/blob/5455bfa408ec6b707c7300ff194b7390733a766d/index.js#L565-L571) · [Chromium Authors · BSD 許可證](https://rea.tools/assets/licenses/dinosaur.txt)

示例 02 · Windows 計算器

## 重新實現計算器的 % 按鈕。

% 按鈕在 + 和 × 之後做的事情不同。我們來找出兩條規則，在一個小計算機裡試試。

### 1. 問一問 % 按鈕

範例問題 · 計算機

用 REA 檢查 Windows 計算器的 % 按鈕。還原 + 和 × 後的規則，再做一個同時採用這兩條規則的小計算器。

### 2. 找到兩條規則

REA 幫助助手讀到 % 按鈕背後的程式碼。它使用兩條不同的規則：

在 + 之後
:   取第一個數字的10％。`10% of 200 = 20 → 200 + 20 = 220`

在 × 之後
:   把10%變成0.1。`200 × 0.1 = 20`

### 3. 試試 % 按鈕

我們在下面重新實作了兩條規則。選 + 或 ×，按 %，再按 =。

200 +
**20**

200的10%=20. 則200+20=220。

根據實際分析得到的百分比規則製作的互動示例。

檢視實際程式碼和驗證方式

對於這個例子, `previous = 200` 和 `current = 10`.

% 處理函式的可讀摘要

```
if (operation == multiply || operation == divide) {
  percent = current / 100;
} else {
  percent = current * previous / 100;
}
```

從已安裝的應用，到能執行的 % 按鈕

1. 01 · REA 讀取 calc.exe

   它啟動計算器應用

   程式碼開啟 `ms-calculator:`。助手隨後選擇已安裝應用的庫。
2. 02 · REA 讀取庫

   返回 % 處理函式的程式碼

   函式檢查運算子，並使用常量 `100`。
3. 03 · 程式設計助手解釋

   解釋並復現規則

   對照 Microsoft 的原始碼核實分支，再試試上面的 + 和 ×。

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
```

運算子 ID · Microsoft 原始碼

```
#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 公開原始碼中的名稱，解釋還原的分支。

[百分比實現](https://github.com/microsoft/calculator/blob/d125246a4e19842ce1332e6c7839cf0e110027d8/src/CalcManager/CEngine/scifunc.cpp#L98-L111) · [Microsoft 測試用例](https://github.com/microsoft/calculator/blob/d125246a4e19842ce1332e6c7839cf0e110027d8/src/CalculatorUnitTests/CalculatorManagerTest.cpp#L350-L370) · [原生分析配置指南](https://rea.tools/guides/native/)

## REA 實際案例。

查看已發行應用程式或遊戲中的一個功能，以及相關程式碼和驗證結果。

[檢視案例 →](https://rea.tools/zh-TW/showcase/)

Android · APK 分析

### 驗證器如何生成登入驗證碼

在 Aegis 已發行的 APK 中追蹤六位登入驗證碼，再移動示範時鐘，看看它為什麼每 30 秒變化一次。

[閱讀Android案例研究](https://rea.tools/showcase/aegis/)

Electron · 功能追蹤

### Notion 如何複製文字和 HTML

從 Notion 打包的 JavaScript 追蹤到系統剪貼簿，看看複製如何保留豐富的區塊資料。

[閱讀Notion案例研究](https://rea.tools/zh-TW/showcase/notion/)

原生程式 · 重建

### DX-Ball 的聲像計算

還原一款 1996 年 Windows 遊戲如何把球的位置轉成左右聲道的聲音。

[閱讀DX-Ball案例研究](https://rea.tools/zh-TW/showcase/dx-ball/)

## 建立 RL 環境

將錄製的 Web 應用程式工作階段轉為可執行的環境，用於訓練與測試 AI 代理。

你的代理會記錄瀏覽器送出的請求和應用程式傳回的回應。REA 利用這些資料建立本機環境，讓代理不必執行原應用程式就能練習任務。

若要支援刪除資料夾，記錄必須包含刪除前的資料夾，並確認它在刪除後已不存在。

[建立環境指南](https://rea.tools/guides/rl-environments/) · [在 X 上觀看示範](https://x.com/reatools/status/2112574822584918075?s=20)

在代理中設定好 REA 後，將下方範例的網址與資料夾任務替換為你自己的：

你的程式設計助手

使用 REA 為我的測試 Web 應用程式建立 RL 環境，網址是 `http://127.0.0.1:3000`。 涵蓋列出、建立、重新命名與刪除資料夾。可以建立和刪除測試資料夾， 但不要修改既有資料。 將環境儲存到名為 `my-env` 的資料夾。檢查哪些操作可用，並告訴我如何執行。

範例提示詞。請替換為你的應用程式網址與任務。

第一次調查

## 用一個小應用試試 REA。

下載 Notes 示例，追蹤 CSV 匯出，再修改一個輸入來驗證。

[跟著示例開始](https://rea.tools/zh-TW/first-investigation/)

## 選擇你的目標。

這些指南介紹各類軟體的環境設定和第一次調查。

### 原生二進位制

檢查可執行檔案和庫中的函式、字串、引用和函式呼叫關係。

[原生分析指南](https://rea.tools/guides/native/)

### JavaScript&Electron

追蹤 JavaScript 桌面應用程式內部的程式碼。

[應用分析流程](https://rea.tools/guides/javascript/)

### 瀏覽器與執行時活動

記錄指定的瀏覽器或程序活動，再比較不同執行的結果。

[瀏覽器觀察指南](https://rea.tools/zh-TW/guides/browser/)

試一個更大的專案

示例 prompt · 網站

用 REA 檢查 https://rea.tools/。幫我克隆這個網站。

對，就是這個網站。

示例 prompt · 遊戲重建

用 REA 從這個遊戲的可執行檔案重建遊戲。用 C 還原遊戲邏輯，並對照原版測試。

[檢視 DX-Ball 案例 →](https://rea.tools/zh-TW/showcase/dx-ball/)

## 有什麼問題嗎？

[閱讀常見問題](https://rea.tools/zh-TW/faq/)，取得安裝協助與常見問題解答。

[加入 Discord](https://discord.gg/GkcryMnJDM)，取得協助並討論你的分析。

在 [GitHub Issues](https://github.com/morluto/rea/issues/new/choose) 中回報錯誤或提出功能需求。
