Cheat Engine基础教程:gtutorial通关思路

 gtutorial相比于Tutorial难度有所提升,总共有三关,这篇文章将对这三个关卡的几种不同的通关思路进行讲解。

GAME1:

 关卡描述:

每5次射击你必须重新装填子弹,之后目标就会恢复。想办法摧毁目标。

通过界面可以推测出修改的方向有两个,一个是修改子弹数,一个是修改健康值。

思路一:修改子弹数

子弹数的搜索按照常理是用整数搜索内存先搜5再搜4,但是如此操作会发现:

啥也没有,这里我尝试了其他的数值类型,结果依旧是搜索不到,所以不得不怀疑这里的子弹数是否真的是按5~1来计算的。所以只能换个思路:

首次扫描选择未知的初始值,然后放一枪,再回到CE里面选择变动的数值,然后再放一枪,再扫变动的数值,中间可以穿插一些非变动的数值啥的这样逐渐缩小范围,在重新装弹后可以选择对比首次扫描。这个方法大概能简化出20个结果。在20个结果我个人采用的办法就是通过射击观察变量的变化确定到的变量。(在我扫描的过程中有将扫描类型里加了一个值小于6,可以尽量加快数值的搜索)。这是一个比较笨的办法,但我目前没有想到别的办法。

确定变量后可以发现,子弹数并不是从5开始递减而是从0开始递增,递增到5就归零。之后的扫描可以直接将首次扫描的精确数值设为0,再扫精确数值1就能定位子弹所在地址。

思路二:修改健康值

健康值也就是靶的血条,搜索思路是首次扫描为未知的数值,数值类型为所有类型。接着放一枪,搜索减少的数值,重复此操作直到健康值还原,选择对比首次扫描,中间可以穿插一些放枪不射中靶的操作CE选择未变动的数值。

 GAME2:

这两个敌人的血量更高,对你的伤害比你对他们更高,摧毁他们。
tips:enemy and player are related

提示说敌人和玩家有相关性,这里大概率指的是之前的一个知识点,代码共用。

这一关要找到玩家的健康值并不难,数值类型为4字节,精确扫描100就可以找到,我一开始的思路是直接锁血然后和它们对射,但是这里遇到一个问题当我任意杀死一台机器时另外一台机器的伤害就开始巨额提升,我推测当场上只剩一个敌人时,他的攻击会立马让你的健康值达到-1。

这里提供三个通关思路:

思路一:卡BUG

该方案没什么技术含量纯粹是在卡BUG,我在玩该游戏时发现几个特征:

  • 特征一:飞机是可以走位的,但是敌人的攻击方向会随着玩家飞机所在的位置而发生变化可能第一关就可以只是没发现。
  • 特征二:敌人是可以攻击敌人的。
  • 特征三:当毁灭一台敌机时,剩下的那台敌机的鸟枪并不会立马变成大炮,有三秒的升级时间。

所以利用这三个特点就可以通过第二关:

  1. 首先找到健康值并锁住。
  2. 然后将飞机移动到下图的位置,然后将右边的敌人磨到丝血状态
    这样我们攻击右边敌人的时候,左边的敌人也在背刺同伴,这样做的目的是尽快将右边这台敌机磨成残血,一个人打太刮痧了。
  3. 然后又移到左边继续攻击这样当击毁左边敌机之后就可以在三秒内继续把右边的敌机也击毁。

 方案一基本上没有什么技术含量就是卡bug,这一关考验的应该是通过对共用代码的修改。下面继续介绍方案二。

思路二:共用代码

共用代码的知识点在之前的学习程序Tutorial的第八关有介绍过这里就不做过多赘述,该方案的思路是利用玩家的健康值找到共用代码,然后在共用代码处观测是谁访问了这个地址,这样就可以找到三个结果分别代表这两个敌人和一个玩家。然后顺藤摸瓜将两个敌人的血量改成一也可以实现通关的效果。

找到玩家健康值,先锁定,然后右击地址选择是什么访问了该地址:

 选择下面任意一条指令,选择显示反汇编程序,右击当前汇编指令,选择找出这个指令访问的地址。

 

然后回到程序分别攻击两个敌人,攻击完后就可以看到代表这三个敌人的访问地址所在处了: 

数值为96的地址很明显是玩家的健康值,而两个一百九十多的就是敌人的健康值点击这两个地址,然后将他们改为一再攻击亦可以通关。

tips:我在看官方教程时看到作者使用的地址锁定可以允许值减小但不允许其增长,可以单机下图来实现但快捷键是什么就不知道了:

思路三:内存地址分析

方案三是基于方案二找到共用代码的基础上对其访问的地址进行分析。

还是找到访问共用代码的三个地址然后将其分为两个group,一个group代表的是玩家阵营,一个group代表的是敌军阵营:

 

将三个地址都选中并右击选择→查找地址之间的共同特征→扫描共同特征→选择rax寄存器→点击扫描→选择保存。 

 

 

 可以看到扫描的结果已经出来了,和之前一样分析这里的数据差别:

 偏移60处的数据很明显是当前各玩家的健康值,68应该是各玩家的初始健康值,偏移70处的值可以用来区分阵营。看到这里就可以确定思路,在共用代码处注入代码,代码判断的依据就是利用偏移70里的值。具体代码如下:

 

GAME3:

将所有红色地板变成绿色才可以解锁右下角的门,然后利用门逃生。

这关需要先让小人跳到每个板子上将所有板子激活,然后右下角的门解锁进入门即通关。玩一下这个小游戏发现几个问题:首先地图里的有些板子很难跳;其次地图上有三个小车,碰到小车所有板子状态重置游戏复位;最后一旦将所有板子全部激活这三个小车就会包住右下角的门,使得我们触之即死。所以要想通关首先需要利用CE找到的数值就是小人X轴和Y轴的坐标值,通过对坐标的直接修改来达到地图间的任意穿梭。

x轴和y轴这类的数值的找法也比较简单,小人想左移动x轴数值增大,向右移动x轴数值减小,向上移动y轴数值增大, 向下移动y轴数值减小。这里我们可以先找x轴,首次扫描设置为所有类型,未知的初始值。然后小人右移,选择增大的数值,左移选择减小的数值。重复此操作即可找到x轴坐标(这里建议对扫描方式设置快捷键以加快操作)。

 找到x轴后y轴就不需要这么麻烦了,这些数值在内存中一般在一坨,右击找到的x轴地址,选择浏览相关内存区域:

当我左右移动时注意观察内存数据可以发现下图标记的地址变红了,这里表示这个地址的值发生了变化,这个地址就是之前记录的x轴地址,同理也可以试着跳几下看内存区域中那个地址被改写了。

 当小人起跳时内存中变红的地址就是y轴坐标值:

 右击改地址,选择将此地址添加到列表中:

 

至此小人的x轴和y轴就都找到了 

 下面介绍几个通关的思路。

思路一:定位坐标

先确定几个难跳板子的坐标:

 

知道上面这几个坐标轴基本就可以确认全图的坐标轴,然后记录一下门的坐标轴,接着激活全部地板

 这个时候修改小人坐标为门的坐标就可以通关了:

 

思路二:内存地址分析

通过思路一过关是可以发现我们并没有实际意义上的解决碰到小车就会重置游戏这个问题,思路二解决的就是让小人及时碰到小车也不会重置游戏。

还是先找到小人的横纵轴坐标,然后让小人去送死,继续观察内存区域的变化,小人的存活状态只有两种情况非死即生。一般可以直接用布尔值表示。所以在观察内存变化时可以注意那些值是0,1之间切换的。

 

当小人死亡时上图有两处从0变成了1,游戏重置后又从1改回了0。将这两处值都加入地址列表: 

锁定任意一个,来判断是哪个地址表示小人的存活状态,

当锁定第一个地址时,小人没有死亡,但游戏过一会儿依然重置了,当锁定第二个地址小人死亡后游戏并没有重置,以此推辞出地址015C0510表示的是是否显示小人,地址015C0530表示的是是否重置游戏。所以这里需要将两个地址都锁住。这样就可以继续激活地板后通关。

在这个基础上还可以继续深挖,既然已经找到了判断小人存活状态的内存地址,我们依然可以分析是什么指令改变了这个地址:

 可以看到这条赋值汇编代码,通过之前的分析已经知道赋值为1就是重置游戏,那么这里将其改成赋值为0也可以避免重置游戏。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Reveone

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值