Skip to content

Latest commit

 

History

History
138 lines (105 loc) · 7.03 KB

File metadata and controls

138 lines (105 loc) · 7.03 KB

CE-Handwire

CE-Handwire 是一款使用原生 C++ 開發的高效能 Cheat Engine (CE) 插件,旨在消除重複的手工動作並強化記憶體調試流程。不同於 Lua 腳本,CE-Handwire 直接透過 Plugin API 運行,確保最佳的穩定性與執行效率。


Platform C++ CE SDK Zydis License Built with Claude Code

🚀 核心功能

1. 智慧批次更名 (Batch Rename / 全掃描模式)

一鍵自動化整理您的 Address List。

  • 輸入篩選字串(例如 Ammo),所有符合的記錄將自動加上零補齊的序號。
  • 選項:忽略大小寫、自訂起始號碼、位數寬度(例如 3 位 → 001)、數字前是否加空白。
  • 快捷鍵:Ctrl+Shift+R
  • 透過 CE 的 Lua 引擎 (GetLuaState()) 驅動,一次掃描整個 Address List。

2. 調試器指標檢視 (Break & Stack View)

強化斷點觸發時的暫存器與堆疊視圖。

  • 透過 Lua debug_getContext() 讀取 CE 調試器的暫存器狀態,數值與 CE 的 Registers 面板完全一致。
  • 指標資料預覽 (Pointer Data View):自動追蹤(Dereference)每個暫存器的指標,顯示該位址存放的實際數值(hex bytes、i32、f32)。
  • 模組+偏移顯示:透過 sym_addressToName 將暫存器值解析為 module+offset 格式。
  • 運算元追蹤整合:首行顯示當前指令的有效記憶體位址及其數值(見下方功能 3)。

3. 彙編指令運算元追蹤 (ASM Opcode Tracker)

透過 Zydis 指令解碼與反組譯器深度整合,結果顯示於指標檢視器 UI 中。

  • 針對如 mov eax, [rdx+14] 的指令,自動計算有效位址(base + index*scale + disp)並讀取該位址的數值。
  • 型別感知顯示:整數指令顯示有號(無號),SSE 純量指令顯示 float/double,使用 CE 風格的十進位格式。
  • 模糊指令movd/movq 同時顯示整數與浮點數的解讀。
  • SIMD 向量movaps/movups/movdqu 等顯示 16 位元組的 hex AOB。
  • REP 字串操作rep movsb/rep stosd 等顯示 RCX 計數 + 來源/目的位址及 8 位元組 AOB 預覽。

4. 暫存器快速跳轉與返回 (Register Goto)

在反組譯器中利用暫存器值快速導航,附帶完整歷史紀錄。

  • 暫存器即書籤:將暫存器內容視為快速跳轉的「書籤」,在反組譯器中迅速切換至目標位址,並能立即跳回調試器目前的指令位置。
  • 指標位址追蹤:將暫存器視為指標,在記憶體檢視器中快速跳轉至該指標所指向的數據位址。
  • 返回堆疊可儲存最多 32 個歷史位址,方便快速回溯。

5. 記憶體檢視器位址書籤

在記憶體檢視器中建立書籤,一鍵跳轉。

  • 依程式分組儲存:書籤按附加的程式名稱分組(例如 game.exe),支援 LRU 淘汰機制(最多 5 個模組、每模組 10 筆書籤)。
  • 自動偵測模組:計時器驅動(5 秒間隔),自動切換至當前程式的書籤群組。
  • 標籤以 module+offset 格式顯示(例如:game.exe+12345678),點擊即可跳轉。
  • 持久化儲存:書籤存於 CE-Handwire-bookmarks.txt,重啟後自動載入。

🛠 技術堆疊

  • 開發語言:C++ (Native Plugin)
  • 指令解碼引擎Zydis (用於極速指令解析)
  • 腳本引擎:Lua 5.3(透過 CE 的 lua53-64.dll,用於 Address List 操作)
  • API:Cheat Engine Plugin SDK

🏗 建置方法

前置需求

  • Visual Studio 2026 (v18, MSVC v145) 含 C++ Desktop 工作負載
  • Zydis repo 克隆為同層目錄:D:\Github\Zydis

方法一:CMake + Ninja (CLI)

# 一鍵建置(設定 + 編譯):
build.bat

# 或手動透過 VS Developer Command Prompt (amd64):
cmake --preset x64-debug && cmake --build --preset x64-debug
cmake --preset x64-release && cmake --build --preset x64-release

輸出:build/x64-debug/CE-Handwire.dll + CE-Handwire-TestTarget.exe

方法二:Visual Studio IDE

# 產生解決方案:
gen_sln.bat

# 在 VS2026 中開啟:
build\vs\CE-Handwire.sln

修改 CMakeLists.txt 後需重新執行 gen_sln.bat

自動部署

設定 CE_PLUGINS_DIR 可在建置後自動複製 DLL 到 CE:

cmake --preset x64-debug -DCE_PLUGINS_DIR="C:/path/to/CheatEngine/plugins"

📦 安裝方法

  1. 建置或下載 CE-Handwire.dll
  2. 將其放入 Cheat Engine 安裝目錄下的 plugins 資料夾。
  3. 開啟 Cheat Engine,進入 Edit -> Settings -> Plugins,加入並勾選啟用 CE-Handwire

🧪 測試目標程式

內建一支獨立 EXE (CE-Handwire-TestTarget.exe),用於測試插件功能,無需開啟真實遊戲。

  1. 建置專案(DLL 與 EXE 會一起編譯)。
  2. 執行 CE-Handwire-TestTarget.exe
  3. 將 Cheat Engine 附加到該程式。
  4. AOB 掃描 43 45 54 45 53 54 00 00 以定位變數區塊。
  5. 變數(byte, word, dword, float, double 等)從簽名後 8 bytes 開始,每個變數間隔 8 bytes。
  6. [M] 手動變動一次數值,[A] 切換自動變動(~500ms),[+/-] 調整變動間隔,[Q] 退出。

測試目標程式會刻意產生各種記憶體存取指令(mov [reg+offset]addss xmm 等),供 CE 的「尋找存取/寫入該位址的指令」功能使用。

📝 開發進度

所有 5 個插件模組已實作完成:

  • 智慧批次更名(全掃描 Lua 模式)
  • 調試器指標檢視
  • 彙編指令運算元追蹤 (Zydis)
  • 暫存器跳轉(含返回堆疊)
  • 記憶體檢視器書籤(依程式分組、持久化)
  • 測試目標程式

已移除的功能

  • 數值夾位 (Value Clamp) — CE 記憶體記錄使用指標鏈時,解析後的位址會在執行期間變動,導致儲存的位址失效。此功能與 CE 內建的凍結 (Freeze) 功能高度重疊。
  • 存取記錄器 (AccessLogger) — 經多次嘗試後移除;CE Plugin SDK 的 Type 2(除錯事件)回呼中無法取得可用的暫存器上下文或指令位址。

其它特性

  • 靜態連結 DLL 輸出:確保極致的效能表現與系統穩定性,減少外部相依性。
  • 支援原生偵錯:可直接使用 Visual Studio 的原生偵錯器(Native Debugger)對 Plugin DLL 進行深度調試。

開發環境

  • Visual Studio 2026:支援 C++23 標準。
  • MSVC v145:使用最新的編譯工具鏈。
  • CMake 3.25+:搭配 Ninja 產生器,支援快速增量建置。
  • IDE 整合:專案可透過 gen_sln.bat 產生 VS2026 解決方案直接開發。

授權條款

MIT