【CE入门教程】使用Cheat Engine(CE)修改游戏“植物大战僵尸”之植物篇 | 您所在的位置:网站首页 › 植物大战僵尸pr卡怎么用的 › 【CE入门教程】使用Cheat Engine(CE)修改游戏“植物大战僵尸”之植物篇 |
目录 1.单卡片无CD 1.1 思路一 1.2 思路二 2.全卡片无CD 3.豌豆射手射速修改(修改植物射速) 4.实现豌豆射手发射“玉米加农炮”(思路) 上一期教程中,我们学习了修改植物大战僵尸的阳光数量、向日葵生产阳光速率以及实现“太阳雨”PS:上篇链接:(38条消息) 【CE入门教程】使用Cheat Engine(CE)修改游戏“植物大战僵尸”之阳光篇_Fly1ng.M的博客-CSDN博客 首先,用CE打开植物大战僵尸。 此时我们可以直接导入上次找出的三个基址: 导入成功! 为了方便我们继续,首先现将阳光数量改为9999。 分析:植物在CD结束后卡片可选状态和鼠标点击卡片但不松手是两种相反的状态,我们可以利用这点通过1/0搜索排查。 游戏刚开始时,豌豆射手处于可选状态,我们在CE中搜索“1”。 注:因为此次搜索的值为0和1,在0~255之间,所以在搜索前必须将“数值类型”改为“字节”。 切回游戏,鼠标点击豌豆射手但不种下,使豌豆射手处于纯黑背景状态,我们切出CE,搜索“0”。 重复上述步骤,直到数量结果不再减少。此时结果数量可能还是很多,我们可以Ctrl+A全部选中,将所有地址都添加到CT表中。(如下图,全选后点击红色箭头添加到CT表) 此时,我们可以同时选中很多地址,对他们的数值进行更改,此时数值为1,我们双击数字1,修改为0,如果豌豆射手进入不可选中状态,则可说明豌豆射手CD在选中的这些地址中;如果没有变化,则继续筛选。 最终,我们终于找到了豌豆CD的地址(其实就是最后一个)。 接下来我们寻找基址,右键->“找出是什么改写了这个地址”,然后我们切回游戏,点击豌豆射手再放回去。能得到如下结果: 通过分析可知,下面那一行“01”代表了豌豆无冷却的状态,我们双击它(或查看详细信息)。 可知“可能的地址”为1D3250E8,虽然是[eax+ecx+70],但是仔细观察可以发现EAX=0,所以一级偏移量为70,我们记下这个值,后面要用。 右键“可能的地址是”后面的地址可以直接复制: 点击新的扫描,因为我们要搜索地址,地址的表示形式为16位,所以我们要勾选搜索框前面的Hex,还要注意的一点,搜索地址时别忘了把数值类型改为4字节! 如图,可知可能的地址为1D296218,二级偏移量为144,记录。 这次扫描会出现很多地址,前几个与其他地址明显不同的都有可能,一般像这种指令比较工整的就是我们要寻找的方向。 如图,可知可能的地址为02879B88,三级偏移量为768,记录。 再次搜索地址时,就会发现绿色的基址了。 双击任意一个基址添加到CT表中,可以看到基址地址为006A9EC0。 我们点击“手动添加地址”, 因为有三层偏移,所以我们点击“指针”-->“添加偏移”。下面一栏输入006A9EC0,三行偏移从上至下依次填入先前记录的70、144、768,单击确定。 这样我们就成功找到了豌豆射手单卡片CD的基址,我们把数值改为1并锁定,可以看到实现了豌豆射手的无CD! 分析:植物在刚种植后进入冷却,此时植物不可选,直到冷却结束才能再次种植,我们可以通过CD变化搜索“变动的数值”不断查找该植物的CD(至于为什么不用“减少的数值”,一会就知道了)。 首先,种下豌豆射手,搜索“未知的初始值”。 切换到游戏状态让游戏运行一会,再切换回CE,搜索“变动的数值”。 当冷却结束后,我们也可以搜索几次“未变动的数值”筛选更少的结果,然后再种一颗豌豆射手,重复上述步骤。 通过观察可以发现,当豌豆射手在CD时,该地址当前值一直在变化;而当豌豆射手冷却完毕后,该地址为0,由此推断出,该地址就是存放豌豆射手CD的地址,仔细观察就会发现,植物卡片的CD并不是一直减少到0,而是先增大后变为0,所以“减少的数值”是搜不到的。 2.全卡片无CD我们在1中已经找到了第一张卡片CD的基址,那么其他卡片的CD基址可以找到吗?每个卡片依次按照上述方法一步一步找基址当然能找到,可以这样太浪费时间了。这里提供一种思路:通过观察可知,植物槽上相邻卡片的地址应该离得很近,所以我们可以直接右击第一张卡片CD基址,选择“浏览相关内存区域”。 打开地址区域后,我们点击第二张卡片再放下,仔细看,内存区域中有一个地址在随着我们点击进行00/01的切换,可知,这个地址为第二张卡片的地址。 右键该地址,将它添加到列表中: 我们依然用第一次查找第一张卡片CD的基址时所用的方法,此处不在赘述。三次查找的线索如下: 仔细看!第一次偏移时,EAX的值变为了50,而在第一张卡片的第一次偏移值里EAX=0,我们可以大胆推断下一格植物卡片比上一格偏移量多了50! 将第二个植物的CD基址添加一下: 为了保险起见,我们可以继续验证一下,第三张卡片进行查找后第一次偏移为:A0+70 没看懂不要紧,通过计算器算一下可知,A0-50=50!也就是说第三张的确比第二张偏移多了50! 所以第三张卡片的基址也可以直接手动添加了: 综上所述,通过这种方法我们就可以求出任何一张植物卡片的基址了! 第n张卡片的基址第一次的偏移量:70+50*(n-1) (PS:第二次和第三次偏移量不变!) 思路:豌豆射手打僵尸会发射豌豆,我们假设豌豆射手应该有一个内置“计时器”,每当射出一粒豌豆后,计时器开始减小,不断循环(类似CD不断减少) 注:为了方便操作,建议开启变速精灵,把游戏速度调慢! 此时,搜索未知的初始值。 然后切回游戏,“让子弹飞一会”,再切回CE搜索“减少的数值”,当豌豆射出下一发时再搜索“增大的数值”,然后重复上述步骤。 注:此处容易失误!原因是:看起来豌豆射手好像没有发出下一发,但是计时器其实已经刷新了,(可以理解成蓄力的动画时已经开始计时了,但这个动画并不明显)所以建议快打到僵尸的这段时间不要继续“再次扫描”了! 我们右键,“找出是什么访问了这个地址”,如果没有切回游戏让豌豆射一会。 分析可知,这个“-01”可能代表着豌豆的涉及射击频率,可是怎么把这个指令以代码或脚本的形式提取出来呢?接下来我们学习CE的进阶知识:代码注入。点击这行指令-->“显示反汇编程序”。 我们在工具栏里找到“自动汇编”。 框架代码注入后,我们再选择代码注入,因为之前选中的就是这行指令,所以我们不用管,“OK”就好。 如图,把-01改为-04,这会增加豌豆射手的发射速度。 好了,我们已经生成好了自己的脚本,不要急着关闭,点击“文件”-->“分配到当前的CT表” 锁定该脚本后,可以明显发现豌豆射手的射速变快了。 右键该脚本点击“创建热键”,可以实现选择性的开关脚本。 首先,我们点击“查看内存”。 右键任一地址,点击“转到地址”。 地址栏输入:004672A5。 “工具”-->“自动汇编”。 引入CT表框架代码: 代码注入,当前地址确定即可。 然后我们在下图中位置插入几行代码,稍后会逐行进行讲解: 注释: cmp [ebp+24],#0 //cmp是判断,0代表豌豆射手,这句话用来判断植物是不是豌豆射手。#的意思是10进制,否则为16进制 je h //je是等于跳转,表示如果是豌豆射手就跳转到h jne originalcode //jne是不等于跳转,表示如果不是豌豆射手就仍然按照原来的代码执行 h: //由上,如果是豌豆就跳转至此 mov eax,#11 //mov是赋值,表示把11放到EAX里。这里的11代表的是子弹类型(玉米加农炮),大家也可以尝试换成其他数字,看看会出现什么效果(注意:如果数字超出界限游戏会崩溃) 然后我们可以分配到当前CT表了: 激活脚本,如下图,成功了! |
CopyRight 2018-2019 实验室设备网 版权所有 |