-
-
[原创]红警2尤里的复仇心灵探测
-
发表于:
2019-6-15 17:47
5570
-
红警2尤里的复仇心灵探测https://www.bilibili.com/video/av55636155
红警破解的最后一期视频——心灵探测
这也是最难的一期,视频只演示实现思路就录了40分钟
这期视频结束后,我们就实现了红警修改大师的全部功能,红警破解就完结了(对,是破解,不是逆向,红警逆向还会继续,有空就会修几个bug,反编译几个类)
因此,本期视频选几个悲伤而有inspire 意义的几个音乐,例如鸟之诗。
心灵探测怎么实现呢?
我一开始也不知道,逆向了红警修改大师后逐渐摸索,终于知道了怎么实现。
红警在启动之后会读取ini,并且只读这一次,然后会把ini信息写到内存里。
因此猜测,每一个单位类中有一个指针,指向自己的ini信息。
红警心灵探测有一个ini信息,PsychicDetectionRadius=15,15是心灵探测半径
首先,我们先来找单位信息的偏移。
我们之前讲到,a8ecbc是选中单位的基地址。
我们选中2个相同的单位和一个不同的单位,比较哪个指针,前两个单位是一样的,而最后一个不同。这个就很大机率是红警的单位属性指针。
我们选了一张特殊的地图,便于操作。
第一个单位是核电站1
第二个单位是核电站2
第三个单位是基地。
我们需要寻找前两个一样,最后一个跟前面两个不一样的。
4c这个偏移肯定不是,前面都是0了,单位属性指针怎么可能是空指针
单位属性指针一定是个指针,像0000007fd这样的也不行
我们发现,520这个地址非常可疑。
我们让他以16进制显示,比较不同。
我们发现,无论选哪一个大电厂,这个指针都是不变的,这就进一步证明了我们的猜想。
而当我们选择基地时,就改变了
由于ini中可以对任意单位添加PsychicDetectionRadius=15,所以我们猜测每一个单位其实都有心灵探测功能
心灵探测功能也一定在一个地址中。
我们知道,心灵探测半径是15,因此我们选择1个心灵探测器和一个别的单位,搜索15或者f(15的16进制是f)然后心灵探测器是15,另一个单位是0;
然后会发现,f搜不到可疑的地址,而15能。
就是这个地址
我们把基地改成15,是否基地就具有心灵探测功能了呢?并且半径是15呢
我们把心灵探测器的这里改成7ffffff(int无符号最大),是否就能实现全图开了心灵探测了呢?
我知道刚刚为什么改不了了,因为他是以10进制显示的。。。
发现并没有实现心灵探测的功能
这是为什么呢
我之前也发现了这个问题,发现修改成777fffff就可以
甚至77777777也可以
于是猜想,这个地方可能不是一个四字节的int型,而是short。
我们修改成ffffffff,他会读成-1.7ffffffff,他可能也会读成另外一个负数。
最后一步,我们把他写到程序中,实现真正的不用操作就能心灵感应。
我们之前讲到,可以通过f5查找谁访问了a8ecbc,在后面写个call,修改[[a8ecbc+21c]]使得选中单位三星,我们用同样的方法,使得选中单位具有心灵探测功能,就能实现心灵探测了(开局展开基地是肯定要选中基地的,这样操作就能让基地具有心灵探测功能)
我懒得去f5,直接去翻以前的帖子,这个地址在哪里
写的时候要注意jmp会覆盖掉原来的一些语句,我们要把他填写回去。
这个我之前已经填写好了,详情可以看这篇帖子。
红警2尤里的复仇 单位全三星、控制对方单位
https://www.52pojie.cn/thread-969103-1-1.html
(出处:吾爱破解论坛)
我们直接享用之前的成果,直接写就好啦
我记得这个时候eax好像是基地址。。
忘记谁是选中单位地址了。。
看起来esi是选中单位基地址
让我们试试效果吧!
其实这个对战可用,但是cnc修复了这个bug,强行修改单位属性的内存会游戏卡死
所以大家不要尝试对战使用
如果有能力,我可以给大家一个提示,用f6,找到卡死的原因,把这里nop掉。(我是实现了的)
尴尬,我们看看哪写错了
哦,我知道了
这个访问a8ecbc的地址只在gamemd.exe内有效。
这个修改是可行的,请大家自行找尤里单机中访问a8ecbc的地址,然后照着这个改
这个的修改是没错的。
我就演示到这吧。。
这是红警破解的最后一期视频,希望大家珍惜哦
还有2分钟的音乐,我展示下gamemd.exe的修改吧。。
感谢大家半年来的关注与支持!
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课