(小游戏!)简易游戏修改!!!新手看过来!

您所在的位置:网站首页 微信小程序游戏修改器哪个好用一点 (小游戏!)简易游戏修改!!!新手看过来!

(小游戏!)简易游戏修改!!!新手看过来!

2024-07-03 12:18| 来源: 网络整理| 查看: 265

相信大家都用过游戏fuzhu,我也不例外,学生时期嘛总是贪玩的,以前玩一些单机的游戏总是用一些修改,我小的时候就总是在手机上用什么hulux,电脑上就是CE 近些日子,本学渣在看windows设计相关的书,里面就讲到了内存修改器,很感兴趣,所以参考了书之后,今天本学渣来给大家分享一下 那么我今天给大家的就是一个简易的修改qi,用的都是一些windows中的一些API函数,

那么首先我们来了解下我们要修改的游戏数值,到底是在修改什么? 修改游戏中显示的数据就是要修改游戏所在进程的内存 进程的地址空间是相互隔离的所以我们要用到API函数

接下来给大家介绍几个函数 1.ReadProcessMemory 函数功能:该函数从指定的进程中读入内存信息,被读取的区域必须具有访问权限。 函数原型:BOOL ReadProcessMemory(HANDLE hProcess,LPCVOID lpBaseAddress,LPVOID lpBuffer,DWORD nSize,LPDWORD lpNumberOfBytesRead); 參数: hProcess:进程句柄 lpBaseAddress:读出数据的地址 lpBuffer:存放读取数据的地址 nSize:读出的数据大小 lpNumberOfBytesRead:数据的实际大小 可能有点多,要好好的看一看我刚开始看书的时候也很懵哈哈哈哈 仔细看完之后相信你没问题的!

2.WriteProcessMemory BOOL WriteProcessMemory(   HANDLE hProcess, 进程句柄   LPVOID lpBaseAddress,要写的内存首地址   LPVOID lpBuffer,数据当前存放地址   DWORD nSize,写入数据的大小   LPDWORD lpNumberOfBytesWritten实际数据的大小   );

接下来如果我们自己有CE 的话就可以找出地址,利用ReadProcessMemory函数和WriteProcessMemory函数来修改内存空间了 但是!我们不用!接下来才是我们的主要代码,如果你对进程,和线程以前有过了解(没准儿比我好哈哈哈)那么就更容易理解下面写的东西,如过没了解过呢,也没关系!谁还不是从头开始呢!

那么我们究竟要怎么样找到游戏数据所在的内存呢? 像我们的游戏数据都是会有一些什么生命值啦,分数了之类的,我们在游戏的过程中这些值会进行改变,所以对应内存空间的值也会改变,那么为什么这个查找的过程比较复杂呢,比如我们分数是100分,在内存中,就可能有很多存放着100的数值的内存地址,所以我们要不断的更改分数的值来筛选真正的是我们要的那个内存地址

在这里给大家放几张图来看一下 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201217122319938

自己原来写的飞机大战小游戏 有很多能改动的地方,大家可以去看看 传送门 大家可以看到这里是17得分,那么我们就来搜索 在这里插入图片描述 可以看到这里有非常多的地址,所以我们改变得分来筛选,这个查找的过程是有点慢的 需要等一会 在这里插入图片描述 这就是我们修改之后的得分了,如果你的电脑上有360的话它会阻止你操作的,不用担心,允许就好了。

运行图看完了咱们就要写代码了

#include #include

这是我们的头文件千万不要忘记!

DWORD g_arlist[1024];//地址列表 如果不清楚DWORD等,可以去查一下你就明白了 int address;//有效地址的个数 HANDLE g_hprocess;//目标进程句柄

这里大体都和书上的一样,,我开始也不习惯这么命名,但总要有个规范不是。咱们继续 咱们是在一页上查找,如果不清楚页,大家可以去搜一下windows的分页机制,看一下一页是多大(4KB)。

bool compareAPage(DWORD dwBaseaddr, DWORD dwValue) { //读取一页内存 BYTE arBytes[4096]; 这里如果不清楚4096 提示一下(1024和它的关系) if (!::ReadProcessMemory((g_hprocess), (LPVOID)dwBaseaddr, arBytes, 4096, NULL)) return FALSE;//此页不可读 DWORD* pdw; for (int i = 0; i = 1024) return FALSE; g_arlist[address++] = dwBaseaddr + i; } } return TRUE; }

在页中查找就完成了,接下来我们就来写搜索函数了(Find)

bool FindFirst(DWORD dwValue) { const DWORD oneGB = 1024 * 1024 * 1024; const DWORD onepage = 4 * 1024; if (g_hprocess == NULL) (这里还是要提一下吧,进程句柄开始有写) return FALSE; //查看系统 以决定开始地址 DWORD dwbase; OSVERSIONINFO vi = { sizeof(vi) }; ::GetVersionEx(&vi); if (vi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) dwbase = 4 * 1024 * 1024; else dwbase = 640 * 1024; //从开始的地址到2gb地址空间进行查找 为什么是2gb? for (; dwbase


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3