-
Notifications
You must be signed in to change notification settings - Fork 6
Value Search zh TW
Value Search 分頁掃描反射的 (UPROPERTY) 欄位,遍歷所有 UObject 實例以尋找符合謂詞的值 — 本質上是 Cheat Engine 的 Find First Scan 針對 UE 的物件圖進行的改編。使用它來確定遊戲值的儲存位置,然後透過 Live Walker 檢查擁有該欄位的物件並提取指標鏈。
預設模式:在所有物件中尋找單一值的所有實例。
- 從 Type 下拉式選單中選擇資料型別:
Int32、Float、FString、FVector等。如果不確定,請從 NumericNoByte 開始(它在一次傳遞中掃描 word/dword/qword/float/double;排除 1 位元組欄位,以免小值泛濫結果)。 - 從 Scan 中選擇謂詞:
- Exact — 值等於你的輸入(例如 HP = 100)。
- Bigger / Smaller — 數值排序(例如 level > 50)。
- Between — 範圍(例如 mana 25..75)— 輸入兩個邊界後顯示即時預覽。
- Contains / StartsWith / EndsWith — 字串的子字串比對。
-
輸入值(例如
100、"PlayerName"、1.5,2.5,3.5用於 FVector)。 - 點擊 First Scan。DLL 遍歷所有 GObject 實例及其 TArray 元素,針對謂詞測試反射的數值 UPROPERTY 欄位,並返回符合項目。
- 使用 Next Scan 進行精煉:變更謂詞或值(例如 HP 變更為 95),點擊 Next Scan。DLL 重新讀取現有候選項,並保留仍然符合的項目。
- 在精煉時使用 Changed / Unchanged / Increased / Decreased 與前一次掃描進行比較(不需明確的值 — 值框會隱藏)。
| Control | Behavior |
|---|---|
| Game classes only | 預設開啟。跳過引擎套件(/Script/Engine、/Script/CoreUObject 等);遊戲類別 + Actor/Pawn/Component 衍生物始終保留。掃描更快,結果更清晰。 |
| Parallel scan | 預設開啟。First Scan 使用背景工作執行緒(快速)。關閉 = 單執行緒,對反篡改更隱蔽。Next Scan 已是單執行緒。 |
| Batch read | 預設開啟。在一個讀取主體中讀取每個物件的固定欄位(更少的系統呼叫、更好的快取)。關閉 = 每個欄位一次讀取(精確位元組邊界)。僅限 First Scan。 |
| Deep (nested containers) | 預設關閉。也掃描深度嵌套容器內部(例如 SaveSlot[1].ItemList[3].Mods[N].Value)。較重,但找到陣列/結構中掺藏的值,淺層掃描會遺漏。 |
| Native-C (raw) | 預設關閉。選擇性加入。請參閱下方Native-C fields。 |
| Newest first | 預設關閉。由高索引走至低索引(最近分配的優先),使截斷保留新實例而非舊樣板。當 Native-C 開啟時自動啟用。何時取消勾選:如果值存在於遊戲開始時生成的主角上(低索引)。 |
| Skip Engine/System noise | 預設關閉。預先過濾:在掃描時跳過純引擎/系統類別(UI 小工具、紋理、聲音、Niagara、動畫實例)— 永不進入結果。與下面的類別選擇器不同(後者在之後過濾)。遊戲護欄保留 Actor/Pawn/Component/PlayerState/GameInstance 衍生物。在 First Scan 上鎖定。 |
| Max | 預設 50k。命中計數達到此時停止;如果結果被截斷則提高。 |
| Timeout | 預設 25s。掃描的截止時間;對於超時的 400K+ 物件遊戲,提高此值。Next Scan(精煉)快速 — 對兩種模式都使用此值。 |
Round(預設)、Trunc、Ceil — 分數浮點數/雙精度數目標如何被化簡為遊戲顯示的整數以供比較:
- Round:10.9 → 11;Between 10.9–11.1 → 11–11。
- Trunc:10.9 → 10;Between 10.9–11.1 → 10–11。
- Ceil:10.1 → 11;Between 10.1–11.1 → 11–12。
整數欄位和 Float/Double 欄位值不受影響;僅在輸入時會強制轉換分數目標。(取代了舊的 ± 容差帶。)
欄位:Class.Field | Type | Origin(Reflected vs Native-C)| Value | Offset | Address | Instance(物件名稱)。
每列的動作按鈕:
- Live — 跳至 Live Walker,聚焦於此欄位在實例中的位移。
- inst — 開啟 Instance Finder,預先填入此欄位的擁有類別。
- Addr — 複製欄位的絕對記憶體位址。
- 🔗 — 在 Related 分頁中顯示此實例的相關物件(元件、GAS AttributeSet 等)。
-
🌍 — Locate in GWorld:從全域
GWorld查找至此實例的最短指標路徑,在 Live Walker 中開啟。 - ⚙ — Locate in GameEngine:與 GWorld 相同但從 UGameEngine 為根(可以到達 GWorld 無法到達的引擎擁有的物件)。
- 📊 Pivot (實驗性) — 把這個欄位送到 Class Pivot 分頁,作為跨該類別實例的投影值(projected value)(Class Pivot 依身分或另外選定的 key 欄位分組,而非依這個欄位)。僅在實驗性 Class Pivot 分頁可用時顯示。
Filter & Sort(底列,在完整結果集上的伺服器端):
- 關鍵詞過濾(任何欄位,不區分大小寫)。
- 排序選擇器:Scan order、Value、Class、Field、Type、Offset、Address、Instance;Desc 切換。
- 頁面載入:初始顯示前 1,000 列;Load More 取得下一頁。
尋找同時在不同位移處保留 2–4 個值的物件 — 比單個單值掃描更具選擇性。例如:透過同時符合 Str=24、Def=18、Dex=15、Int=20一起來定位統計物件。
- 在頂部切換 Single value ↔ Multiple values (group)。
-
輸入 2–4 個值 — 每列一個。每列具有:
- Data type(預設 NumericNoByte)。
- Scan type(Exact / Bigger / Smaller / Between / Changed / Unchanged / Increased / Decreased — 與單值相同)。
- Value 框;對於前值型別隱藏。
- ..to 框(僅限 Between)。
- 即時 Between 範圍預覽。
- 點擊 Group First Scan 以尋找一次符合所有值的物件。
- 點擊 Group Next Scan 進行精煉 — 例如輸入新值或切換至 Unchanged 以進一步縮小範圍。
| Control | Behavior |
|---|---|
| Deep (nested containers) | 預設關閉。每個數值 TArray / 結構陣列元素都成為其自己的符合區塊;在深度嵌套容器內尋找分組。 |
| Cross-object (owned components) | 預設關閉。將每個 actor 的擁有子物件(元件、GAS AttributeSet)折入 actor 的符合區塊,以便找到分佈在 {actor、其元件、屬性集} 中的分組。 |
| Native-C (raw) | 預設關閉。包括每個物件區塊中的非受管漏洞。 |
| Newest first | 預設關閉。由新至舊走(使用 Native-C 時自動啟用)。如果目標是早期生成、低索引物件,則取消勾選。 |
| Skip Engine/System noise | 預設關閉。與單值相同的預先過濾。 |
| Rounding mode | 與單值共享;應用於所有槽。 |
| Timeout | 與單值共享。 |
頂級網格:列 = 符合的物件。欄:Class | Instance | Matched values(摘要)。
選擇一列以展開並查看下方的詳細面板:
- Locked offset table(當所有槽都已匯聚到單個位移時)— 例如 "🔒 Class — Str@0x20, Def@0x24, Dex@0x28, Int@0x2C"。
- 各槽符合的欄位項目:Lock status | Class.Field path | Value | 按鈕(Live / Addr / 🌍 / ⚙ / 📊 Pivot (實驗性——把該槽送到 Class Pivot,僅在該分頁可用時顯示))。
所有切換(Live、Locate、Copy)重複使用單值事件;跨物件槽開啟擁有的子物件(元件/AttributeSet)。
Filter & Sort(伺服器端):關鍵詞過濾(class/instance/field/value)、按 Scan order / Class / Instance / First value / First offset 排序。
預設情況下,Value Search 只看得見 UPROPERTY 反射的欄位。許多遊戲將遊戲值(HP、MP、耐力、統計)儲存為純 C++ 成員沒有 UPROPERTY() 巨集 — 這些對反射不可見。
- **問題:**反射的欄位走針器僅讀取屬性元資料;非受管位元組被跳過。Cheat Engine 的原始掃描可以找到它們;Value Search 無法找到。
-
解決方案:啟用 Native-C (raw) 以也掃描非受管漏洞 — 每個物件內的位元組範圍(從 UObject 標頭之後到類別的
PropertiesSize)沒有 UPROPERTY 涵蓋。掃描器使用「Guess What」啟發式將原始位元組解釋為 Int32/Float/等。
- 開啟 Native-C (raw)(單一或分組模式)。
- 選擇你的資料型別(僅限數值:Int32、Float 等 — 無字串、向量或布林值)。
-
First Scan 故意很嘈雜 — 漏洞位移處任何符合的 4 個位元組都是命中。通過以下方式縮小範圍:
- Game classes only 切換(跳過引擎噪聲)。
- 結果下方的類別選擇器(排除明顯的非目標)。
- 或簡單地切換至 Newest first 保留新實例(自動啟用)。
- **Next Scan 以匯聚:**變更值或使用 Changed / Unchanged / Increased / Decreased 重新讀取並精簡嘈雜的第一個結果。
符合的列顯示 Origin 欄:
- Reflected — 普通 UPROPERTY 欄位。
- Native-C (Int32) — 解釋為 Int32 的原始漏洞;「?」後綴(Int32?)表示不確定的信心。
當同時啟用 Deep 和 Native-C 時,原始掃描另外進入結構陣列元素內部 — 例如沒有 UPROPERTY 成員的 USTRUCT 的 TArray 內的值。更重且更嘈雜;配合獨特的值 + Next Scan 精煉。
成功掃描後,點擊結果列上的 🌍 Locate in GWorld 以尋找從全域 GWorld 下到該實例的最短指標路徑,並在 Live Walker 中顯示該鏈的位置。
🌍 GWorld — 可到達世界根物件(Pawns、NPC、物品、可摧毀物件等)。
⚙ GameEngine — 改為到達引擎擁有的物件(UI、GameInstance、LocalPlayer、引擎系統)。當實例不在世界圖中時使用。
如果實例自掃描以來已移動或被釋放,路徑搜尋會報告「no path」或「invalid」。
-
Containers(TArray、TSet、TMap) — 每個元素都被掃描並顯示為
FieldName[index]。超過 10,000,000 個元素的陣列作為損壞防護被跳過。 - Instance selection — 掃描後,點擊 Load More 來取得其他頁面(伺服器端分頁)。Filter/Sort 在 DLL 中的完整工作階段上運行;網格始終顯示目前視窗。
- Session lifetime — 工作階段會一直存在,直到你點擊 New Scan 或切換分頁。Next Scan 重新讀取目前候選集;New Scan 丟棄它並為新查詢重置。
- Value2(Between) — 當 Scan type 是 Between 時,需要上限;即時預覽在你所選的進位模式下顯示強制轉換的整數 + 實字浮點數範圍。
- Case sensitivity — 僅影響字串型別(FString、FName、FText);預設不區分大小寫(Cheat Engine 風格)。
-
String vectors — 輸入 FVector 為
X,Y,Z(例如10.5,20.3,30.1)。 - Small values + NumericAll — 使用 NumericAll(包括 1 位元組欄位)搜尋 0、1 或 255 將符合所有物件中大量欄位;使用 NumericNoByte 或更大/更獨特的值以避免泛濫。
- Native-C first scans truncate — 在大型遊戲上,嘈雜的原始掃描可能在掃描所有物件前達到結果上限。Newest first 確保倖存者是最近分配的(最新遊戲實例),而不是古老的 CDO。Game classes only 預先過濾噪聲。在縮小範圍後使用 Next Scan 匯聚。
- Instances — 按名稱/屬性模式尋找特定類別的實例。
- Live Walker — 檢查 UObject 並走其指標鏈;匯出 Cheat Engine 指令碼。
- Home — 概述和功能索引。
請參閱儲存庫 README 以取得編譯及使用說明。