这是一篇让大家熟悉 Windows 下分析内存数据的文章并且用 VC++
实现修改内存
VC++6.0 制作单机游戏修改器 这里介绍一个简单的单机游戏修改器制作过程,单机游戏修改器当然 比修改网络游戏要简单很多,一般只需修改内存即可,今天就拿红警
2 共和国之辉为例子做一个单机游戏修改器。首先打开游戏,然后用 内存查器查我们想要修改相应数据的内存地址,这里我们选 CE, CE 是个功能非常强大的内存修改器,好废话少说 我们开始新建一个 游戏,相信这个游戏大家都很熟悉了,新建游戏开始
这里可以看到游戏刚刚开始,我们就从金钱入手吧,这个在红警里是最直接的啦,好然后最 小化游戏 打开我们的 CE(注意这个时候 我们新建一个电厂然后暂停 让金钱的数值处于一 个不容易重复出现很多次的数值) 注意:VC++实现修改内存相应地址的值很简单后面我会讲解到现在我们具体看看内存地址
和基址是 如何查和分 析的
这是我们的 CE 附加红警游戏进程 进程名为 Game.exe,然后让游戏的金币处于一个容易查
的值状态请看下图
可以看到查出来的数值非常少了,但是还需要过滤,所以现在我们再返回游戏 再让金币的
数值变化一下暂停,返学习编程的单机游戏回 CE 继续查,最终发现如下几个地址
在 CE 里绿表示常量,而这两个常量对于修改内存的金币是行不通的,他们肯定有别的作 用但是不能达到修改金币的作用所以我们修改黑的那个地址 0A029DDC,直接在 CE 里面 修改,返回游戏发现游戏金币的值已经被修改了,但是这里有一个问题,当我们关闭游戏之 后再重新进入就已经不是 0A029DDC 这个值了 这个时候我们就要想办法出一个固定的 地址就是基址,怎么查呢?CE 强大的功能可以做到这点双击这个地址 把它添加到下面的 列表 然后右击 查看所有操作这个地址的代码如下图所示:
图 Z-11
然后我们进入游戏 改变下金币的值,然后返回我们的 CE 修改器会发现 有一些代码,这个 代码就是操作这个金币值的代码 我们来分析下这段简短的代码,这是查基址的关键步骤。 如下图所示:
每段代码后面都有个+24C 的操作,我们双击把它放大看看
看看红的那句代码 mov 【ecx+24C】,edx,然后看看下面有 edx 的值,可以看到 edx 的值 是 2710 这里要注意 它是 16 进制的,转换为 10 进制是多少呢 经过转换 2710 的十进制是
10000,现在游戏的数据恢复到一万了正好就是金币的值,那么它把这个值放到哪了呢 就是 ecx+24C 这个地方,大家可以看看图 Z-11 这是特意标示出来的,可以看看我们到金币地
址那个动态变化的地址是 0A029DDC 然后这里我们看看 ecx+24C ,ecx 的值下面看到是
0A029B90 然后我们把 ecx+24C 计算出来可以看到等于 0A029DDC,就是现在我们到的这 个每次打开游戏都动态变化的值,所以现在我们要关心的是 ecx 是从哪里来的,因为 24C 是一个固定的值,每次其实动态变化的就是那个 ecx,然后再偏移 24C 得出的地址就是我们
要真正修改金币的地址,好了我们现在就直接查 ecx 的基址,它的基址也就是一个包含了 每次变化的地址的一个固定的地址,红警 2 里面只有一层基址相对来说比较简单一些,所以 我们来查查看这个地址在哪个地址里面,打开新的搜索搜索 ecx 这个地址如下图:
这个时候我们又看到了个绿的常量,跟前面我们金币那个值常量有所不同,我们可以猜
测它就是我们最终要的基址,因为它是一个常量 它的值是每次不变的,符合我们要的
基址的条件所以我们把 00A1E0C4 这个值保存起来,然后关闭游戏 我们再打开游戏 我们直 接看看 00A1E0C4 这个地址里面的值然后再便宜 24C 出来一个地址,然后我们再看这个地 址里面的值 是不是就是我们当前的金币,试过几次完全是的,所以现在很清楚了 我们要修 改金币的地址的思路很简单:
1:查出 00A1E0C4 这个地址里面的值我们现在称为 X 吧
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论