通过 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
#include
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
;
}
代码可以左右移动哦!
学习从来不是一个人的事情,要有个相互监督的伙伴,工作需要学习C/C++或者为了入行、转行学习C/C++的伙伴可以私信回复小编“学习”领取全套免费C/C++学习资料、视频
部分教程截图
教程内容包括
1.开发环境搭建
2.C语言教程
3.C++教程
4.数据结构与算法
5..Net全套教程
6.C++Primer教程
7.项目实操
网友评论