Cheat Engine修改器,第十一关实战:飞船大战
发布于 作者:苏南大叔 来源:程序如此灵动~

飞船打完了假的靶子,就要和真的外星飞船进行战斗了。敌对阵营的飞船有两艘,本方阵营的飞船有一个。飞船单体的攻击力相同,那么,怎么算这场战斗也不能胜利啊。那么,cheat engine
的第十一关如何通过呢?

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验总结。测试环境:win10
,cheat engine@7.6.3
。本文描述的的是第二个实战小游戏,在教程里面排行第十一。这个小游戏是有意外事件的,敌方飞船还有二次变身存在,攻击力暴增。
准备工作
本文的前提条件,是准备好cheat engine
和cheat engine tutorial
。参考文章:
本文描述cheat engine tutorial
的第十一关,直达方式是点击“帮助”菜单,然后选关。

前几关教程:
- https://newsn.net/say/cheat-engine-step3.html
- https://newsn.net/say/cheat-engine-step4.html
- https://newsn.net/say/cheat-engine-step5.html
- https://newsn.net/say/cheat-engine-step6.html
- https://newsn.net/say/cheat-engine-step7.html
- https://newsn.net/say/cheat-engine-step8.html
- https://newsn.net/say/cheat-engine-step9.html
- https://newsn.net/say/cheat-engine-step10.html
分析过程
敌方飞船是比较有意思,只有受到攻击的时候,才会反击。我方打它一下,它们打我两下(每个飞船一下)。我方不打它们,它们也不攻击我方。这和回合制卡牌的做法类似。
和第一关有所不同的地方还有:这一关己方飞船是可以四处移动的,但不能回撤走回头路...也就是说别轻易向前冲...
最明显的突破点,就是己方飞船血量100。可以作为精确值进行查找,看看能否有所收获。从被攻击的情况,还可以推断,敌方每个子弹减血为2
。

不费吹灰之力,就拿到了己方飞船的生命值地址,先改个强力无敌效果先。

然后对着其中一个飞船,分批次发射子弹。查找“未知的初始值”查找范围,利用“变动的值”和“没有变动的值”,配合子弹发射,来不断缩小范围,找到其中一个飞船的血量地址。
小贴士:保持界面不动,可以使用“未变动的值”缩小范围。减不动之后,再发射子弹,使用“变动的值”/“减少的值”来缩小范围。

同时,还得出结论:己方子弹的攻击力是1
。


在第一个敌方飞船被消灭后,第二个飞船会触发二阶段狂怒模式,发射超大号子弹,导致无敌状态的己方飞船,依然会被消灭。所以锁定自己的血量,很重要。
由于血量在1
和0
之间反复横跳,敌方飞船在“薛定谔的猫”状态下反复横跳。复生后以前查到的血量地址也废了,需要重新查找。这个过程中各种异常游戏退出。
解题思路
换个思路,找到飞船的生命值地址后,通过“谁改写了这个地址”找到一个sub
指令,然后再查看谁访问了这个地址。向两个飞船分别射击,就可以看到,这又是一个共享代码的问题。

共享代码问题的解题关键,就是结构对比,分清你我,然后代码注入。

在0060
的位置,如果没有看到血量值的话,可以右键改变类型,四字节。就可以看到熟悉的血量值了。

执行代码,左右各一枪过关。

结语
更多苏南大叔的cheat engine
相关文章,请点击苏南大叔的博客:


