标签:
继续上次,上次给出的开全图,是不能看透盟军的裂缝产生器的,有的修改器的开全图是可以看透的。它的原理是修改了判断迷雾的一个关键跳转。此处不多说,本人觉得不够优雅——能少改动代码则少改动代码。当然他也有自己的优势——看透裂缝产生器。可能在最后补充中,再加上吧。
当然,如果你事先查找了一些关键字符串,可以直接快速的定位到关键位置,不需要像我利用升级箱子来找。
笔者在百度了那个升级箱子都能带来什么之后,发现那个箱子有可能会得到一次额外的核弹发射机会,我就在想能不能找到这个CALL,其实位置由上面确定的字符串已经可以确定,关键的就是获得调用的参数。
上图最后一个JMP就跳到函数尾部了,这个捡到核弹的处理还是比较短的。最初的时候直接猜想调用了最后一个CALL<添加建造选项>。这个CALL3个参数,1寄存器,2个堆栈。分析参数:
move ecx,14 call 0069F7E0 ... mov ebx,eax ... mov eax,[ebx+98] mov ecx,008324E0 push eax push 1F
我以为只用上面一个函数就够了,前面都是初始化什么的,结果是——只增加了一个核弹选项,却不是就绪状态,也不能倒计时……
于是上面一个CALL 0069CCF0也是必须的(一共4个CALL,一个是输出调试信息,一个是上面的CALL 0069F7E0得到一个参数值,一个增加选项,不是它是谁?),既然上一个CALL的效果是增加核弹选项,这个CALL就是大概调整CD咯。那这个CALL的参数是什么?跟进分析,3个固定PUSH,一个ECX。分析参数来源:
mov edx,[ecx+1B4] //来源于调用此函数的参数 ... mov edx,[edx+1A0] mov [esp+3C],edx ... mov eax,[ebx+98] //EBX和上面来源相同 mov ecx,[esp+3C] mov ecx,[ecx+eax*4]
最重要的就是上面的ECX参数了,程序不断在这里,怎么可能知道……正常情况下,能捡到一个核弹箱子的概率是多大,我是不想试,何况单人游戏,箱子出现的还那么少。想到瘸腿大象(修改高手,已经不再修改游戏了,从他的教程中收益良多)的魔兽修改教程中,都是用的专门的地图,相当方便。幸好有大神已经写出了红警地图编辑器,费好大劲建好一张地图。原本设计看到一个指定路径点就给个核弹箱子,死活不给。改成摧毁一个建筑物,才出现……我也是醉了,不知道错哪里,这不是主题,不深究
断下后来回跟踪好多层ECX又从哪里来,貌似都跟到游戏的消息循环了?!搞了一下午,然后觉得EDX的值好眼熟,突然发现EDX=[ECX+1B4]=玩家数据地址,WTF!果断写脚本,我是用的一个大神的作品:代码注入器——CodeinEx.exe。上一篇的调用开图CALL也是,稍微改造下,用CE也是可以的。
pushad mov ecx,14 call 0069F7E0 mov ebx,eax //调整核弹CD mov eax,[ebx+98] mov edx,[00A35DB4] mov ecx,[edx+1A0] push 0 push 0 mov ecx,[ecx+eax*4] push 1 call 0069CCF0 //增加核弹攻击选项 mov eax,[ebx+98] mov ecx,008324E0 push eax push 1F call 0067C530 popad ret
搞定!注意,如果你之前造好了核弹,并已经进入CD了,是没有效果的。
进入0067C530这个函数:首先是一个Switch,然后看到一个字符串
新建造选项!莫非这个还可以增加其他建筑,兵种什么的?如果是的话,那个PUSH的1F常数,应该是类型(比如基础建筑,防御建筑,步兵兵种等等),EAX应该是具体编号。
更改了EAX,果然增加了其他超级武器。将上面的两个CALL的EAX更改为其他值,比如1,2,3等,可以获得其他超级武器的一次使用机会,但是使用后选项不会消失……找原因未果,猜想是游戏中设计只有核弹有一次性使用机会,其他超级武器也就不必要消失。
但是试图修改1F为1D或20,游戏却崩溃了。马后炮一次,这个字符串前面的Switch是关键。
更改为上述值后,果然能添加一些其他建造选项了,逐步确定:
03=飞行器,07=建筑物,10=步兵,1F=防御技能(超级武器、伞兵),28=战车
但是最初,我不是这样确定的。。我猜想这个一个公共的函数,并不是这里专属的,在函数头下断点。当你展开基地车的时候,会获得建造发电站的选项;建造完发电站,获得矿场和兵营的选项。果然都正确断下来了,然后查看堆栈传进来的值得到03,07及其含义的。
至于基础建筑和防御建筑,我也用最笨的方法,逐一确定了:
00=发电厂
01=盟军矿石精炼厂
02=盟军建造厂
03=盟军兵营
04=沙袋
05=盟军维修厂
06=盟军作战实验室
07=盟军战车工厂
09=磁能反应炉
0A=苏联作战实验室
…限于篇幅省略,见资料打包
盟军建造厂和苏军建造厂,就是指基地,是可以直接平地而起,不需要基地车!我都惊呆了当然是有条件的,你只有有了一个盟军建造厂,才可以直接建造盟军建造厂,苏军同理。而一般的建筑物,只要有任意基地就可以,巨炮除外。。
对于步兵,也有对应的具体编号,同见资料打包。战车战船,无资料,苦力活……因为有了后文的科技全开,不必要
这个CALL的用途,就是在没有开超级武器的情况下,你可以给自己添加上建造超级武器的选项。一旦建造任意单位,该选项就会消失,因为程序刷新了当前可建造项。网上有种修改器,需要在上方修改器增加的选项条中选择超级武器类型,然后建造围墙,来建造超级武器。文中这种方式是不是更优雅些?(无贬义)建造围墙的修改方式,应该是找到了建造CALL,修改了传入的参数,具体没研究过这种方式。
To be continued…
转载请注明来源,http://www.cnblogs.com/viewll/p/4769473.html
标签:
原文地址:http://www.cnblogs.com/viewll/p/4769473.html