C語言游戲腳本:利用API 函數實現一個簡單的超級瑪麗外掛!


通過 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++學習企鵝圈子】,分享(源碼、項目實戰視頻、項目筆記,基礎入門教程)

歡迎轉行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!

編程學習書籍:


 

編程學習視頻:


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM