修改阳光:
这里我们分为两个步骤,第一步在内存中找到存储阳光的地方将其修改为999,第二步溯源出该地址的基址。
步骤一:
先在CE中将植物大战僵尸加入进程然后就可以进入游戏界面了:
可以看到阳光的值为50,如果有练习过之前CE官方提供的的学习程序,就可以很简单的明白这里需要在CE中选择精确数值扫描,数值类型为四字节,数值为50。
扫描出结果:2684个,这比之前的CE教学程序要多很多毕竟相比于学习程序植物大战僵尸会相对复杂一些,不过做法还是一样不变:
捡一个太阳,阳光数值变为75,再在CE中搜索75。
可以看到很简单就找到了阳光所在的地址,改成999,也可以直接把该地址锁起来,阳光的修改就算成功了。
这种修改只能保证在本局游戏中阳光数被锁死不变,但是如果打完这一关,进入下一关时阳光数又将回到之前的50,在第二个步骤中将利用之前文章所讲的查找指针的办法来定位阳光变量的基址。
步骤二:
和学习教程一样右击找到的地址选择找出是什么访问了这个地址
也可以选择是什么改写了这个地址都可以:
还是熟悉的寄存器值加一个偏移,随便点击一个将信息复制出来,然后筛选有用的信息:
上层指针可能是0x287EB8A0
,回到ce勾选十六进制,重新扫描该地址值。
按照之前的练习经验,按道理这里一扫就能扫出唯一的地址值,但是结果和想象中的剧本并不一样,扫出了一堆地址,这里的技巧是观察地址的前两位,先排除00开头的地址,先看0X的地址,如果前后出现相同的0x(如前后都是04开头)那这些都可以一起排除,从上图观察可以看到03BAB2E8
,这个地址符合标准。继续查看该地址的访问地址:
这里计算一下edi+868的值是否等于第一层存放阳光数值的地址的EDX值:
确定相等,证明我们找到了的第二层的指针偏移,接着继续搜索地址03BAB2E8
:
这次搜索就已经可以看到绿色的基址了,这里出现的四个都可以使用随便选择一个基址复制,选择手动添加地址,讲两层偏移输入选择确定即可:
如果p指向的地址和之前通过精确数值搜索到的阳光的地址一样就可以确定找到了阳光的基址。我们可以重开植物大战僵尸然后观察两个地址之间的变化
可以看到之前搜索的阳光地址里存的数值不再是阳光的数值,而基址所指向的新的地址确定是阳光所在的地址。
总结:
相比于CE官方的联系程序的四层指针,这里的套娃还少一点不过难点在于随着游戏体量的增大,搜索出的结果也会变多,如何准确定位是修改阳光的关键,对于步骤一的阳光地址定位只要记住每一次精确扫描和修改数值再精确扫描都能极大的缩小结果的数量就可以了,一次不行来两次。而基址的定位就是前面所说的通过开头的两位数快速筛选即可。
tips:找到基址可以点击文件,保存,CE会将修改的这些地址保存为一个CT文件,再次打开游戏时就可以直接用CE读取之前保存的CT文件就不需要再重新找地址了。
修改金币:
金币在游戏中可以在戴夫那购买一些道具和特殊植物等,他的值在内存中的存储方式和阳光有点不同。
以我的金币数量为例:
我目前拥有的金币值为864770
,它存在内存中会除10,也就是说在内存中我的金币值为86477
。这里可以通过CE验证一下,选择精确扫描,4字节,在数值中搜索86477
。
出来了5个结果,买一个两百块的陷阱,然后观察这5个结果的数值变化:
发现其中一个结果从86477
变成了86457
也就是少了200/10,所以可以确定地址1E21DA6C
就是存放金币的地址。
修改冷却:
修改冷却值麻烦的点在于没有确切的数值,我们之前找阳光值时基本可以确定为两个步骤:1.通过确定的值进行第一次精确搜索。2.修改之前的阳光值再做一次精确搜索。可以发现我们要搜索一个地址,那这个地址的值一定要能变动,不然搜索出来的结果太多无法准确的定位。再回到冷却值,找一找搜索的思路,先看下图:
再冷却好的时候卡槽的卡片是亮着的,再冷却中卡槽变暗,上面会有一个灰色的幕布逐渐上升,一直上升到卡槽顶部然后恢复明亮。发现这个特点就可以推测出冷却值虽然不知道但它一定会逐渐增长或者缩小,直到到达某个值时,冷却就不会动了。那么思路就变成了首次扫描时选择未知的初始值,然后以保护伞为例:
将它放置到草地上时,它的冷却值将开始变动,所以再次扫描时选择变动的数值,如此反复就可以定位到该卡槽的冷却值。
其实定位到冷却值之后就会发现冷却的初始值为0,放到草坪上后数值就会逐渐增加大概增加到几百或者几千不等(不同植物冷却值不同)然后冷却期就会结束。所以搜索方式也可以是先用精确值搜索0,之后再搜索变动的数值或者增长的数值,如此反复即可。
tips:每个卡槽的冷却都是独立的但是它们在内存中的位置相邻互相之间间隔0x50个字节,只要找到一个卡槽的冷却就可以同理推断出其他卡槽的位置,我一般会把卡槽的数值封锁在6000,因为没有植物的冷却值会达到6000,设这个值就等于所有植物都处于无冷却状态。