完整视频讲解
B站同名账号KrnlsYs
第1~6关 见上篇文章
第七关、代码注入
这关稍微有点难度,简单来说,就是在我们比较关心的游戏的代码,跳转到自己的代码,做完自己想做的事情以后再给他跳回去,比如本例中是想让减1血反而变成加2血
还是先搜到生命值,不演示了。找到以后查找写入,打一下出来一条代码,点显示反汇编
sub来自英文,即减法的意思。左边是目标操作数,右边是源操作数,很显然[ebx+4A4]即血量,这代码的意思就是让我们的血量-1
这关对我们的要求是减1血反而加2血,因此有两种方式,先介绍CE想让我们用的方法。
选中这一行代码,点击工具,再点击自动汇编
选择模板,代码注入,确定
会生成代码模板,然后按照如下蓝色注释改写
//蓝色的字 是注释,可以忽略。
写好之后点击确定,再回到Tutorial点击攻击我,会发现每次血量没有减少,而是增加了2
第二种简单方法是,在反汇编器中,直接双击那一行,把sub改成add,把1改成2即可。但是此方法有局限性,因为有时候可能使这条指令变长导致覆盖后边的代码,执行就错误了,不理解没关系,就先用第一种
第八关、多级指针
类似第6关,只不过这关是4级指针,更复杂一点
首先先找到这个值,过程和之前一样,不再演示
找到以后右键查找写入,然后点击修改值,出现一条代码如下
双击打开














第九关、共享代码
本关模拟了一个游戏场景,敌人比我们血量多,伤害也比我们血量高
点击这个按钮自动Play发现我们被击败了,可以利用之前学过的代码注入的方式,找到扣血代码做某些处理。
根据提示,本关生命值是浮点数,且敌人和自己共享扣血代码,也就是说自己扣血和敌人扣血都经过这里,所以不能简单的nop,否则自己和敌人会一起无敌
下面开始解决这个问题
首先还是先找到自己的生命值,搜索浮点数,过程略。找到以后查找写入,再次攻击自己,出现一条扣血代码。
根据之前找基址的过程可知,血量偏移就是4,ebx就是本人对象。
右键,选择如下,选择查找代码访问的地址,会弹出一个框,里边是空的,没关系
此时分别攻击四位玩家一次,注意要按顺序点
发现出现四条,并且计数都是1,因为我们确实攻击了1次。但是值似乎很奇怪,这是因为默认是整数显示,但这关的生命值是浮点数,如果想显示浮点数可以右下角切换,不过这不重要
注意按顺序,依次双击这四条代码就会把地址加入到地址列表(红框所示),然后就可以关掉它了
点击红色箭头处按钮
然后点击工具-> 对数据/结构进行解析
会弹出一个如下窗口
点击左上角文件,添加新地址,然后再点击左上角文件,添加新组,在新组中添加第二个地址。效果如下
现在是两个组,每组两个地址。之所以这样设置,是因为玩家1和玩家2属于同一阵营,玩家3和玩家4属于同一阵营,按照阵营分组
按顺序,复制我们之前双击加到地址列表的4个地址,并粘贴到这4个textbox里,并且对每一个地址都-4
这就是为什么之前强调一定要按顺序,如果没有按顺序的话,你可能会误把友军和敌军添加到同一个分组导致分析错误
-4的原因是,之前分析过,生命值偏移是4,所以生命值地址-4 就得到了玩家对象的地址。我们现在要分析玩家对象
如下所示
点击结构,定义新结构
名字无所谓,大小默认即可(实际上是根据游戏不同而设定,但是这只是个教学案例,所以默认的大小4096就足够了)
点击确定后结果如下
其中不同颜色有不同含义,我这里的颜色是我自己设置的,你们可能与我不同。我这里的粉色意思是组之间不同,这也正如我们所料,因为我们就是按照阵营划分的分组
也就是说,玩家对象+偏移0x10 代表的是阵营,1是友军,2是敌军
知道了阵营的偏移就很好解决了,还是先查找写入自己血量的地址,点击显示反汇编
在反汇编器定位到这条代码,然后和第七关一样,选择工具,自动汇编,模板,代码注入
别的地方都不用动,newmem处按照如下所示填写
具体原因见蓝色部分注释即可,对完全没接触过汇编的同学可能有点难度
点击执行,确定
然后来到游戏,点击
敌人被秒杀了,我们还活着 顺利过关
第十关、Step1
大意:每5次射击就需要重新装弹,但敌人会自动回血,想办法干掉敌人
注意这是个新进程,需要重新附加
根据测试,发现前4发子弹可以正常使敌人掉血,但第5发敌人会进入无敌状态并回血
所以尝试搜索敌人生命值,直接置0,但是似乎搜不到,所以换个思路,搜索自己已打出的子弹数量
敌人满血时搜0,打出1发子弹搜1……最终搜到一个结果,将这个值锁定为0,这样敌人就不会进入无敌状态,成功过关
第十关、Step2
大意:两个敌人比你血多,且比你伤害高,想办法打败敌人。提示:敌人和玩家是相关的,很显然可以用第9关共享代码的知识处理,如果没学会第9关先去学习一下
和第9关一样,先找到自己的生命值,查找写入,然后右键选择查找该代码访问的地址。记住生命值偏移是0x50
根据计数或值很容易判断,中间的是自己,其他两个是敌人,双击加入地址列表
在工具找到对数据结构进行解析,敌人一组,自己一组填入血量地址并-50
定义新结构确定
可以发现5c的位置比较适合作为阵营进行判断。敌人是1,自己是0
因此,查找血量写入,来到扣血代码处,工具,自动汇编,代码注入,按照如下填写,解释见蓝色部分注释
确定,再回到游戏攻击敌人,发现敌人掉血非常快,顺利过关
第十关、Step3
大意:让所有平台变绿来解锁右边的门,注意,敌人是一击必杀的。提示:有多种解决方案,例如碰撞检测,瞬移,飞……
(话说有没有感觉这个小人有点像蜜雪冰城…)
这里就以飞为例。在游戏中经常通过标志位0或1来控制某些功能的开关,例如此处就很可能通过0和1控制人物是否可以跳跃。
我们现在是在原地,所以搜索1代表可以跳跃,跳起来以后在空中时搜索0代表当前不能跳跃。反复搜索。注意跳起来这个过程比较短,搜索时手速要快,或者设置CE的热键搜索
注意要搜索字节型,因为编程时是通过布尔值来控制,布尔值是1字节的
搜到最后发现没有结果,所以反过来试试,在地上搜0,表示当前人物是非跳跃状态,跳起搜1表示当前是跳跃状态
这一次很容易就找到了一个结果,将其锁定为0可以发现,有时可以连跳了。但是别忘了之前学过的nop,干脆直接把对这个地址赋1的代码nop掉,那么这个地址的值就永远是0,意味着永远处在非跳跃状态,即永远可以跳跃
右键查找写入,静止时只有第一条,跳起时出现第二条,发现确实是向里写入1的值,所以把这条nop掉,显示反汇编,选中这条,右键替换为空操作码(不会的话去看第五关的教程)
此时按住空格发现自己飞起来了!
那么过关就很简单了,把所有平台变绿即可
最后它又出幺蛾子。这个门被怪物挡住了,没办法直接走过去,所以想办法瞬移过去,即修改自己坐标
利用之前搜索未知值的办法,左右移动搜索改变的数值,注意选择浮点数,最终找打一个结果
走到地图最左边,这个值是-0.97,再来到门附近,发现这个值是0.7+
说明大概整个地图的X坐标范围是[-1,1],所以,直接把自己的坐标改为正的0.97即可(和最左边对称)
轻松拿下
CE自带教程至此就全部结束了。如果还有没理解的可以去看一下我的视频教程,在B站搜索我的账号KrnlsYs就可以找到了,还有更详细的CE入门到精通全套课程,欢迎大家关注