`
duoerbasilu
  • 浏览: 1492548 次
文章分类
社区版块
存档分类
最新评论

手把手教你写游戏修改器

 
阅读更多

http://blog.csdn.net/jianxia_wzx/article/details/7795700

转载请注明出处!!!谢谢!!!

在玩游戏的时候,很多人还是喜欢用修改器的(本人一样哈大笑)但是很多网上下的修改器,要么不能用,要么有毒,很不爽,因此还是自己动手丰衣足食吧。下面就以植物大战僵尸为例,一步一步教大家写植物大战僵尸的修改器。

首先大家应该对进程有一定的认识。说下大体思路吧,我们知道一个进程在运行时系统会分配一定的内存供这个进程存储自己的数据,因此我们修改某个进程的数据就应该从这个进程的内存区域去修改,因此首先我们要获得这个进程的内存区域,怎样获取呢?一会说。在得到进程内存之后,我们知道在玩某一关的时候,阳光这个数值是在某一个内存地址上面存储,当阳光值改变也是对这个地址的数据进行操作,因此我们可以这样做,假设开始我们阳光值为x,对这个进程内所有数据进行便利去选择所有存储的值为x的内存地址我们可能会找到很多,然后变化一下阳光值变为y,然后在刚才存储x的地址去寻找所有存储值为y的地址。如果还有很多地址,在变化阳光值进行寻找,这样总有那么一天我们会找到唯一的一个地址哈大笑(一般不会超过四次寻找,所以大家不用怕滴),当然这个地址就是我们存储阳光的地址啦。然后对这个地址进行赋值,随意赋值啦,怎样赋值呢?一会讲。

好了,现在我们大体明白我们要怎么做了。下面具体实现

1、寻找我们的进程。

当然我们进程的名称就是植物大战僵尸.exe啦,注意后面一定要有.exe怎样去寻找这个进程呢?当然是用ToolHelp函数完成啦,先用CreatToolHelp32Snapshot函数创建一个进程快照,然后采用Process32FirstProcess32Next函数一次将每个进程信息读到一个PROCESSENTRY32的结构体里面,这个过程在进程操作查看进程优先级文章里面详细说了,这里就不多说了,但是我们发现里面没有进程的句柄!!!而后面的操作都是以进程句柄来进行操作的,因此我们必须找到这个进程的句柄,找进程句柄采用OpenProcess()函数,这个函数功能就是打开一个进程号为XXX的进程并且返回它的句柄,因此我们只需要用ToolHelp函数找到这个进程的ID,然后传给OpenProcess函数就可以返回我们需要的进程句柄了。具体实现如下:

找进程ID

找打进程ID后寻找进程的句柄、

这样我们就抓住这个进程啦!!!偷笑

2、搜索内存

这个关键的一部分,我们知道我们肯定不止一次的进行查找,然而第一次查找与其他不同,第一次是在进程所有内存空间进行查找,因此时间比较长,后面几次查找的时候只需要在前一步的记录的那些可疑的地址里面查找就行了,因此需要另写一个函数。为了实现这些功能,我们定义几个全局变量//记录植物大战僵尸进程的ID
DWORDtProcessID;
DWORDg_arList[999999];//地址列表
intg_nListCnt=0;//有效地址个数

然后进行操作。

我们知道我们得操作系统是采用分页存储的技术每一页大小是4KB,因此我们每一次查找时应该每次读取进程内存的一页来进行查找。然而从哪里开始呢?Windows98系统预留的是4MB2GB的空间,Windows2000型提供的是64KB2GB,因此在开始搜索的时候应该确定我们操作系统的版本。我们采用GetVersionEx函数进行确定结果放到一个OSVERSIONINFO的结构体里面,具体实现如下:

在第一次查找的时候我们应该一页一页的进行搜索,然后在这一页查找是否有我们查找的值,有的话记录下来,然后查找下一页,以此类推。实现如下:

在第一查找的函数里面不停地调用这个函数就可以啦。如下:

在找到一些可疑的地址后,然后修改数值,进行下一次寻找,知道确定出最后一个地址未知。如下:

3、修改内存

在找到我们要找的地址后,就剩最简单一步啦,就是修改内存,我们只需要使用WriteProcessMemory()即可修改内存。//记录植物大战僵尸进程的ID
DWORDtProcessID;
DWORDg_arList[999999];//地址列表
intg_nListCnt=0;//有效地址个数

为了方便我们查看程序我们可以将找到的地址打印出来

上面就是我们植物大战僵尸修改器的具体过程怎么样,简单吧!!!看看效果吧!!!大笑


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics