红警2尤里的复仇心灵探测

本帖最后由 KaQqi 于 2019-6-15 12:05 编辑

红警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的修改吧。。


感谢大家半年来的关注与支持!

THE END
喜欢就支持以下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称