上一篇中介绍了,金钱的修改,瞬间建造以及快速建造。很少说,本篇开始html
电力和负载的精确数值,能够选中任意一个发电厂来查看shell
直接给出电力的地址:[game.exe+635DB4]+52D0数组
负载地址:[game.exe+635DB4]+52D4函数
红警2中,电厂提供的电力根据其健康程度是不一样的,生命值越少提供的电力越少。因此当电厂被攻击时会更新电力值。当新放置建筑,或建筑被摧毁,卖掉建筑物,都会更新电力和负载。要实现无限电力,能够把电力改大,也能够将负载减少。我选择第二种,将负载清零。第一种方法改多大是个问题,我的不喜欢显示99999,不优雅。测试
直接查找谁改写了负载,进入游戏没进行任何操做就有一个地址004E44FE - mov [esi+000052D4],eax,根据经验八成不是,由于你还没进行操做,经测试NOP后也没效果。新建一座发电厂,出现3条指令,而后强制攻击本身的电厂,发现这条指令004F2D9B - mov [esi+000052D4],ecx计数增长,就是它了,NOP掉,当你让电力发生变化时,负载成功清零。spa
那么问题来了,这段代码是共用的,电脑AI也实现了无限电力,不信去试试打掉电脑的全部发电厂,防护建筑还在工做,并且电脑也只建造一个电厂。这就要处理共用代码了,个人实现是,判断是否是玩家的负载地址,若是是则清零,若是不是则正常操做,以下CE脚本。code
[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
方法同上,查找让金钱减小的代码,一样须要处理共用代码。htm
最初一直没有如何地图全开的思路,找过地图迷雾数组,搜索未知,而后一直搜索变化实在是不靠谱,是否有大神告知这种如何操做?blog
而后看红警2对战直播的时候,发现地图上的随机箱子能够得到开全图。获得思路,遂今后下手,通常的箱子都是加钱的,就查找谁更改了金钱(让你的矿车都停下来,减小干扰),而后去吃箱子,获得一个地址(后来发现这个地址也是全部与金钱增长有关的地方)。用OD在这个地址下断点,而后继续找箱子,遇到加钱箱子,程序断下来。游戏
而后查看调用堆栈,一层层下断点。返回一层:
返回二层:
最初寻找的时候,下断了4层,有些你会发现,刚进游戏,就被断下来,这样的断点直接取消就好。根据上图已经有的注释,实际两层就好。并且当你返回一层的时候,往上面翻,你会看到以下关键字符串:
再往上翻还有其余的,好比开全图的,和从新关闭全图的:
最后开全图的CALL就是:
pushad mov ecx,008324E0 //游戏数据区 call 0055A120 popad ret
代码注入器CodeinEx,调用便可。这个函数里面就是把全图的迷雾改写为已经探索。不深究。
To be continued…
转载请注明来源,http://www.cnblogs.com/viewll/p/4769346.html