红色警戒2修改器原理百科(四)
(九)重置超级武器CD——额外核弹带来的惊喜2
跟入上一个调整核弹CD的CALL 0069CCF0后,会发现一些有意思的偏移。
字节,+3C=CD就绪后,提示文字的颜色
字节,+55=该选项是否存在。貌似修改没什么用
字节,+56=标志是否是一次性机会。上面使用CALL获得的额外核弹=1,改成0,发射核弹无效果
字节,+57=就绪标志。修改成1直接可以使用超级武器,倒计时文字还在倒计时
字节,+58=等待标志。直接修改成1显示等待,实际却还在冷却,大概还有一个暂停标志配合
以上紫色文字是确定部分,具体效果,请自测。
然后跟踪程序往下走,在返回前有一个CALL,是真正用来重置CD的。0069CCF0这个位置的函数,更确切的说是用来初始化CD的,因为初次建造超武会来到这里,使用完超武进入CD或重新就绪不进入这里。
立即刷新超武CD的脚本
//重置超级武器CD pushad mov eax,2 //超武编号 push eax mov edx,[00A35DB4] mov ecx,[edx+1A0] mov ecx,[ecx+eax*4] call 0069D690 popad ret
进入0069D690,会发现一些字符串,就是超武编号,包括伞兵哦~~
由此,就得到了重置超级武器CD的方法:可以用CALL,这样右下角的倒计时也会就绪,缺点是每次重置CD都要建新线程;也可以用Timer更改偏移+57的位置=1,可以一劳永逸无限使用超级武器。到这里,由额外核弹带来的一些惊喜也就完了。
(十)小地图雷达——完善地图全开
直接找雷达存在标志,搜索字节(这样,如果是4字节也能搜到),存在雷达=1,不存在=0,依次重复,最后确定字节game.exe+6339B4=是否存在雷达标志(卖掉雷达动画还没完时最先变成0)。然后得到指令00633152 - mov [esi+000014D4],bl修改了该标志。
下断点断下后,返回一层,就可以看到,关键位置
得到开雷达脚本
//开关雷达 pushad push 1 //开关 mov ecx,008324E0 call 00633140 popad ret
但是,这个可恶的但是!一旦电力不足将会关闭雷达,这是很不爽的。继续往上翻看,可以发现读取了电力和负载,修改这里的代码是可以达到效果的。有的修改器确实修改了附近,比如红色警戒2修改大师(加了一个很厉害的壳,我才不会告诉你,带壳也能耍流氓,此处仅是友情宣传,我也知道这文章没几个人看现已取得作者授权公开了,但这里没什么要说的,修改了个跳转而已)。其实当你发现这里后,然后启动修改器的功能,就会发现这里被修改了
然而最后我没有选择修改这里,因为两个字,不优雅。上面第二个跳转发现没,它跳走了电力判断,字节[EAX+2228]是关键,这也是地图无偿雷达的标志,上面还有一句EAX=[game.exe+63D290]。用过红警2地图编辑器就知道了,地图上有这个选项的。只要改成1,展开基地车就有永久雷达用了。不用担心电力不足和建造的雷达被摧毁时小地图又被关掉了。为什么我没有发现有修改器修改这个标志来开雷达?这就是要有好奇心,多分析,多结合已知内容咯@.@我没夸我自己,我没夸,反正我是信了。
其实,如果想不到有无偿雷达(不该想不到的,因为有些任务图一开始什么建筑都没有,就会有小地图雷达,怎么解释?),也可以分析出来这跳转很有猫腻。首先是个很大的跳转,跳过了电力和负载的判断,并且没有跳过雷达状态变动的调用。这样的跳转只有两个:004F2E91 jnz 004F2F8C和004F2EA4 jnz 004F2F87。
然后观察,上上上图(本小节第一个图),004F2FA0 je 004F2FB1这个跳转控制着是否跳过雷达状态变动,跳转的条件和[ESP+10]的值息息相关,而跳到004F2F87的跳转,将[ESP+10]修改成了1。肯定不是没事吃饱了撑的才改成1,当然是满足了什么条件,决定什么结果要发生。结果就是雷达被打开,条件就是[EAX+2228]。
号外:笔者在写这篇文章截图时,又发现一个神奇的标志,[game.exe+4324E0+14A8],可以改成0,1,2,3,去修改试试吧,和雷达有关。我真不会告诉你在哪发现的了,应该自己去探索
To be continued…
转载请注明来源,http://www.cnblogs.com/viewll/p/4769636.html