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

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

时间:2015-08-29 20:15:47      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:

    继续上次,上次给出的开全图,是不能看透盟军的裂缝产生器的,有的修改器的开全图是可以看透的。它的原理是修改了判断迷雾的一个关键跳转。此处不多说,本人觉得不够优雅——能少改动代码则少改动代码。当然他也有自己的优势——看透裂缝产生器。可能在最后补充中,再加上吧。

    当然,如果你事先查找了一些关键字符串,可以直接快速的定位到关键位置,不需要像我利用升级箱子来找。

(七)额外核弹——可能是全球首发

    笔者在百度了那个升级箱子都能带来什么之后,发现那个箱子有可能会得到一次额外的核弹发射机会,我就在想能不能找到这个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了,是没有效果的

(八)建造各种超级武器——额外核弹带来的惊喜1

    进入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

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

标签:

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

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