01一個簡單的記憶體外掛
通過C語言編寫一個簡單的外掛,通過API函式修改遊戲資料,從而實現作弊功能
- 物件分析
- 要用的API函式簡單介紹
- 編寫測試效果
- 總體評價
物件分析
本次遊戲物件為Super Mario XP
沒有更新所以可用任意版本
試玩發現人物血量最大為10,心最大為99,命最大為99
要用的API函式簡單介紹
HWND FindWindow (LPCTSTR IpClassName,LPCTSTR IpWindowName); 通過類名或視窗名查詢,返回視窗控制代碼
DWORD GetWindowThreadProcessId (HWND hWnd,LPDWORD lpdwProcessId); 得到視窗控制代碼後通過GetWindowThreadProcessId這個函式來獲得視窗所屬程序ID和執行緒ID
HANDLE OpenProcess (DWORD dwDesiredAccess,BOOL bInheritHandle,DWORD dwProcessId) 開啟一個已存在的程序物件,並返回程序的控制代碼
bool WriteProcessMemory (HANDLE hProcess,LPVOID lpBaseAddress,LPVOID lpBuffer,DWORD nSize,LPDWORD lpNumberOfBytesWritten ); 能寫入某一程序的記憶體區域。入口區必須可以訪問,否則操作將失敗
編寫測試效果
開啟遊戲
執行外掛

// //01一個簡單的記憶體外掛.cpp //C/C++ // //Created by luguanxing. //Copyright @2016 LGX. All rights reserved. // #include <windows.h> #include <stdio.h> int main() { HWND h = ::FindWindow(NULL, "Super Mario XP");//尋找並開啟程序 DWORD processid; GetWindowThreadProcessId(h, &processid); HANDLE hprocess = 0; hprocess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processid); if (hprocess == 0) {//對應處理 printf("開啟程序失敗!\n"); return 1; } else { printf("開啟程序成功!\n"); DWORD hp = 10;//要修改的遊戲資料最大值 DWORD heart = 99; DWORD life = 99; DWORD addr = 0x00428282;//通過CE找到的遊戲資料地址 DWORD addr2 = 0x00428292; DWORD addr3 = 0x004282a2; DWORD res = WriteProcessMemory(hprocess, (LPVOID)addr, &hp, 4, 0);//寫入記憶體修改遊戲資料 DWORD res2 = WriteProcessMemory(hprocess, (LPVOID)addr2, &heart, 4, 0); DWORD res3 = WriteProcessMemory(hprocess, (LPVOID)addr3, &life, 4, 0); return 0; } }
總體評價
由於是簡單外掛,沒有GDI介面和失敗對應處理,僅供入門學習交流