遊戲外掛(作弊程式)本質上是對客戶端記憶體、輸入流、網路封包或系統 API 的攔截與篡改。本文系統歸納五大核心技術類別,解析原理、關鍵 API 與實作要點,並探討對抗與防禦視角。僅供安全研究與防禦教學,嚴禁用於破壞遊戲公平性或非法獲利。
最基礎的外掛形式,模擬人類操作自動腳本。
| API | 用途 | 特點 |
|---|---|---|
SendInput | 統一輸入注入 (鍵盤/滑鼠/觸控) | Win2K+ 標準,支援多裝置,輸入等級較高 |
keybd_event | 鍵盤事件模擬 | 舊版相容,已棄用但廣泛使用 |
mouse_event | 滑鼠事件模擬 | 同上 |
進階:結合 FindWindow/FindWindowEx 定位遊戲視窗,SetForegroundWindow 切換焦點,或註冊全域熱鍵 (RegisterHotKey) 控制腳本啟停。
針對基於訊息迴圈的遊戲(WM_TIMER、WM_KEYDOWN 等)。
SetWindowsHookEx(WH_GETMESSAGE/WH_CALLWNDPROC, ...),需 DLL 注入至目標進程。msg->message,修改 wParam/lParam、阻斷傳遞 (return 1) 或注入額外訊息。核心手法:**IAT Hook / Inline Hook 替換 ws2_32.dll 導出函數**。
send, recv, WSASend, WSARecv)。LoadLibrary("ws2_32.dll") + GetProcAddress 取得原函數位址。send → Proxy DLL 攔截 → 分析/修改封包 → 呼叫原 send → 回傳結果。關鍵點:封包加密/壓縮/序列化需逆向分析協定;伺服器端驗證(序號、時間戳、簽名)會導致篡改封包被拒或封號。
ReadProcessMemory 遍歷記憶體區域,搜尋特徵值 (血量、金幣、座標)。WriteProcessMemory 覆寫數值。統一攔截任意用戶模式/核心模式 API 的通用技術。
| 類型 | 原理 | 適用範圍 | 難度 |
|---|---|---|---|
| IAT Hook | 修改匯入地址表 | 單一模組,輕量 | 低 |
| Inline Hook (Detours) | 覆寫函數前 5-14 字節 JMP | 全局、核心 DLL | 中 |
| VTable Hook | 修改虛函數表指標 | C++ 類別方法 | 中 |
| SSDT Hook (Kernel) | 修改系統服務描述表 | 核心模式,需驅動簽名 | 高 |
| VeH / SEH Hook | 向量化/結構化例外處理 | 反調試、隱蔽執行 | 高 |