红警2单机游戏修改器VC6制作

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

百度文库 - 让每个人平等地提升自我
这是一篇让大家熟悉 Windows 下分析内存数据的文章并且用 VC++
实现修改内存
VC++ 制作单机游戏修改器 这里介绍一个简单的单机游戏修改器制作过程,单机游戏修改器当然 比修改网络游戏要简单很多,一般只需
修改内存即可,今天就拿红警
2 共和国之辉为例子做一个单机游戏修改器。

首先打开游戏,然后用 内存查找器查找我们想要修改相应数据的内存地址,这里我们选 CE , CE 是个功能非常强大的内存修改器,好废话少说 我们开始新建一个 游戏,相信这个游戏大家都很熟悉了,新建游戏开始
这里可以看到游戏刚刚开始,我们就从金钱入手吧,这个在红警里是最直接的啦,好然后最 小化游戏 打开我们的 CE (注意这个时候 我们新建一个电厂然后暂停 让金钱的数值处于一 个不容易重复出现很多次的数值) 注意:VC++实现修改内存相应地址的值很简单后面我会讲解到现在我们具体看看内存地址
和基址是 如何查找和分 析的
这是我们的CE 附加红警游戏进程进程名为,然后让游戏的金币处于一个容易查找的值状态请看下图
可以看到查出来的数值非常少了,但是还需要过滤,所以现在我们再返回游戏再让金币的数值变化一下暂停,返回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 是一个固定的值,每次其实动态变化的就是那个e cx,然后再偏移24C 得出的地址就是我们要真正修改金币的地址,好了我们现在就直接查找ecx 的基址,它的基址也就是一个包含了每次变化的地址的一个固定的地址,红警2 里面只有一层基址相对来说比较简单一些,所以我们来查查看这个地址在哪个地址里面,打开新的搜索搜索e cx 这个地址如下图:
这个时候我们又看到了个绿色的常量,跟前面我们找金币那个值常量有所不同,我们可以猜测它就是我们最终要找的基址,因为它是一个常量它的值是每次不变的,符合我们要找的基址的条件所以我们把00A1E0C4 这个值保存起来,然后关闭游戏我们再打开游戏我们直接看看00A1E0C4 这个地址里面的值然后再便宜24C 出来一个地址,然后我们再看这个地址里面的值是不是就是我们当前的金币,试过几次完全是的,所以现在很清楚了我们要修改金币的找地址的思路很简单:
1:查找出00A1E0C4 这个地址里面的值我们现在称为X吧
2:X+24C 就等于我们现在要修改金币的地址
3:直接修改X+24 这个地址的值就达到了修改内存的目的
好了分析工作到这里就全部完成了可以看出来还是很简单的,还有别的值也都是这样的,那个电力的值大家也可以去查,查出来大家可以看到那个电力的值偏移值也是24C,以此类推还有很多数据都可以找出来作下修改,这里就介绍下修改金币的程序实现,重要的是找出地址,修改都是一样的。

好了先介绍几个W INDOWS API 吧因为后面要用到
HANDLE HWND 窗口句柄这个只要是学习过WINDOWS 编程的应该都非常熟悉了就不做过多介绍了这些API 在MSDN 有非常详细的介绍
DWORD GetWindowThreadProcessId(HWND hWnd
,
,
ar
现在程序功能实现的效果如下可以看到值修改到了3000,这里修改多少都是可以的。

相关文档
最新文档