码迷,mamicode.com
首页 > 其他好文 > 详细

红色警戒2修改器原理百科(二)

时间:2015-08-29 18:28:45      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:

上一篇中介绍了,金钱的修改,瞬间建造以及快速建造。不多说,本篇开始

(四)无限电力——共用代码处理

电力和负载的精确数值,可以选中一个发电厂来看

技术分享

直接给出电力的地址:[game.exe+635DB4]+52D0

负载地址:[game.exe+635DB4]+52D4

    红警2中,电厂提供的电力根据其健康程度是不同的,生命值越少提供的电力越少。所以当电厂被攻击时会更新电力值。当新放置建筑,或建筑被摧毁,卖掉建筑物,都会更新电力和负载。实现无线电力,可以把电力改大,也可以将负载减小。我选择第二种,将负载清零。第一种改多大是个问题,个人不喜欢显示99999,不优雅。

    直接查找谁改写了负载,进入游戏没进行任何操作就有一个地址004E44FE - mov [esi+000052D4],eax,根据经验八成不是,因为你还没进行操作,经测试NOP后也没效果。新建一座发电厂,出现3条指令,然后强制攻击自己的电厂,发现这条指令004F2D9B - mov [esi+000052D4],ecx计数增加,就是它了,NOP掉技术分享,当你让电力发生变化时,负载成功清零。

    那么问题来了,这段代码是共用的,电脑AI也实现了无限电力,不信去试试打掉电脑的所有发电厂,防御建筑还在工作,而且电脑也只建造一个电厂。这就要处理共用代码了,我的实现是,判断是不是玩家的负载地址,如果是则清零,如果不是则正常操作,如下CE脚本。

[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)

game.exe+F2D9B:  //要修改的指令地址
jmp newmem
nop
returnhere:

newmem:
push eax
mov eax,game.exe+635DB4  //玩家数据地址
mov eax, dword ptr [eax]
cmp eax, esi
pop eax
jnz originalcode   //如果不是我方则跳转 
mov [esi+000052d4],0  //修改后的指令 
jmp exit

originalcode:
mov [esi+000052d4],ecx

exit:
jmp returnhere

(五)金钱只增不减

    方法同上,查找让金钱减少的代码,同样需要处理共用代码。

(六)地图全开——简单CALL,却找的不易

    最初一直没有如何地图全开的思路,找过地图迷雾数组,搜索未知,然后一直搜索变化实在是不靠谱,是否有大神告知这种如何操作?

    然后看红警2对战直播的时候,发现地图上的随机箱子可以获得开全图。得到思路,遂从此下手,一般的箱子都是加钱的,就查找谁更改了金钱(让你的矿车都停下来,减少干扰),然后去吃箱子,得到一个地址(后来发现这个地址也是所有与金钱增加有关的地方)。用OD在这个地址下断点,然后继续找箱子,遇到加钱箱子,程序断下来。

技术分享

    然后查看调用堆栈,一层层下断点。返回一层:

技术分享

    返回二层:

技术分享

    最初寻找的时候,下断了4层,有些你会发现,刚进游戏,就被断下来,这样的断点直接取消就好。根据上图已经有的注释,实际两层就好。而且当你返回一层的时候,往上面翻,你会看到如下关键字符串:

技术分享

    再往上翻,就看到开全图的,和重新关闭全图的:

技术分享

最后开全图的CALL就是:

pushad
mov ecx,008324E0  //游戏数据区
call 0055A120
popad
ret

创建一个新线程即可。这个函数里面就是把全图的迷雾改写为已经探索。不深究。

To be continued…

技术分享转载请注明来源,http://www.cnblogs.com/viewll/p/4769346.html

红色警戒2修改器原理百科(二)

标签:

原文地址:http://www.cnblogs.com/viewll/p/4769346.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!