美文网首页C/C++学习交流程序员
C语言做一个的魂斗罗99命内存外挂,妈妈再也不用担心我通不了关

C语言做一个的魂斗罗99命内存外挂,妈妈再也不用担心我通不了关

作者: 工程狮一图 | 来源:发表于2019-04-01 22:25 被阅读31次

通过 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.项目实操

相关文章

网友评论

    本文标题:C语言做一个的魂斗罗99命内存外挂,妈妈再也不用担心我通不了关

    本文链接:https://www.haomeiwen.com/subject/wbcibqtx.html