通過 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++
#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("打開進程失敗!
"
);
return 1;
} else {
printf("打開進程成功!
"
);
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 界面和失敗對應處理,僅供入門學習交流!
文章來源:https://cloud.tencent.com/developer/article/1443763
如果你想更好的提升你的編程能力,學好C語言C++編程!彎道超車,快人一步!
【C語言C++學習企鵝圈子】,分享(源碼、項目實戰視頻、項目筆記,基礎入門教程)
歡迎轉行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!
編程學習書籍:
編程學習視頻:
