本帖最后由 yycmd 于 2021-2-16 01:18 编辑
植物大战僵尸第一篇,阳光越用越多https://www.52pojie.cn/thread-1370753-1-1.html
现在这个是第二篇,咱们实现种植无CD
图文关系:图片在上,文字在下,先图后文字!
版本依旧是 1.2.0.1073 版本。
游戏关卡我选择“冒险模式”,关卡1-4。
插曲
上篇我们说让阳光越用越多,方法是教给大家了,大家不觉得有点麻烦吗?每次想让阳光多点都要 搜索总阳光,变动之后再搜索,然后 sub 改 add
于是我为了偷懒,不想每次都去搜索阳光,然后 sub 修改 add 的情况下,学习了大佬 @wapjlover1 的文章,地址在这 :[原创] “植物大战僵尸”阳光基址寻找及外G编写 ,有需要可以去自行学习,在这里先感谢大佬的文章!!!
因为想调试阳光方便,我删除了原来的冒险模式2-7关卡,重新玩到了 冒险模式1-4关卡
于是找到的阳光地址:
[[PlantsVsZombies.exe+3794F8] + 868] + 5578
基地址:PlantsVsZombies.exe+3794F8
一级偏移:868
二级偏移:5578
结束
下面开始正题,实现种植植物无CD。
为了方便实现种植无CD,咱们用上面说的基址+偏移修改阳光一步到位,修改为 5000
可以看到 种植之前可以被选择,种植之后就不能被选择了。
理论上应该是有个数据控制植物什么情况下可以选择,什么情况下不能选择,
真实情况是不是这样呢?暂时也不知道,所以先模糊搜索试试,看是不是这么实现的。
模糊搜索CE设置,扫描类型:未知的初始值,数值类型,4字节
我们进行第一次的未知初始值扫描工作。
扫描结果有 100464320个,数据太多CE不进行展示,此时我们要回到游戏中,让游戏进行一些变化,再次进行扫描。
我们对比豌豆射手的冷却条,可以看到冷却条发生了变化,也就是我们让游戏运行了一小段,此时我们要回到CE进行搜索。
将CE的扫描类型从 精确数值 改为 未变动的数值,这个时候有人会很好奇了,为什么豌豆射手的冷却明明动了,却要改为 未变动的数值 。
现在回到刚才分析的理论,植物可不可以选择,由两个状态控制,可以选择或者不可以选择。
虽然豌豆射手不选择可以时间在减少,但是依旧不可以选择,所以这里我们认为数据未发生变动。
改为 未变动的数值 ,点击 再次扫描,出现了很多的结果,这么多结果我们还是不知道哪个是对的,所以要回到游戏让游戏的 豌豆射手状态发生变化。
现在我们可以看到豌豆射手的状态从原来的不能选择,变成了可以选择,所以我们要把CE的扫描类型改为 变动的数值,点击再次扫描 。
扫描之后,数量一下子只剩下一万多条记录了。
我们到游戏里面再种一个豌豆射手,豌豆射手的状态又从 可以选择变成不可以选择,此时豌豆射手的选择状态发生了变化,我们认定数据发生了变动。
刚才已经设置好了 扫描类型为 变动的数值 ,所以我们直接点击 再次扫描 。
点击再次扫描之后,还有六千多条记录了怎么办呢?
这个时候没有好办法了,只能重复上面的操作:
- 植物状态发生变化,CE设置改为 变动的数值
- 植物状态没有发生变化,CE设置改为 未变动的数值
经过我们上面的操作,反复多次之后,还有一千多条记录,而且这一千多条记录不管怎么扫描,都不发生变化,这个时候我们就可以看看这一千多条记录中哪些数据比较可疑!
经过记录的粗略查看,发现其他的记录都是多个连续一样的值,但是最后一条,地址为 16FB5940 的数据比较可疑,于是我们将它拉下来,观察一下他的数据变化。
经过观察,豌豆射手可用的时候 16FB5940 地址的数据是 1,豌豆射手不可用的时候 16FB5940 的数据是 256 ,因此我们怀疑这就是控制植物冷却的地址。
于是将 16FB5940 地址的数据修改为 1 并却锁定,回到游戏一直种植豌豆射手也不会产生冷却了。
种植植物无CD就这样实现了,游戏控制植物能不能被选择也确实是 通过控制某个数据来实现的。
现在实现了种植无CD,种植其他的植物发现还是有CD的,这不是坑爹吗?为啥只有豌豆射手是无冷却,而其他的不是无冷却呢?
从上拥有的植物来看,依次是:豌豆射手、向日葵、樱桃炸弹、土豆人。
猜想 拥有的这些植物在内存中是存放在数组里面的,换句话说他们在内存上应该是连续的。
刚才知道了,植物状态不可以被选择是 256,可以被选择是 1,所以我们要在内存上看看是不是有三个 256 存在。
选中记录,右键弹出 功能选择,使用蓝色背景的 浏览内存相关区域 功能,或者使用快捷键 Ctrl + B
在内存浏览窗口的下半部分 随便找个位置进行如下操作:
鼠标右键-->显示类型-->4字节(DEC)
这是将窗口的数据显示类型改为 4字节 十进制方式显示。
在打开的窗口中,刚好有三个 256也刚好对应我们的三个冷却中的植物,但是 这三个 256 到底是不是控制三个植物我们还不清楚,所以先把三个植物的地址依次添加到CE中,修改为 1 并锁定试试。
把 16FB5990 、16FB59E0、 16FB5A30 依次添加到CE并且锁定为 1 ,再去游戏种植之前有冷却的植物,这下也变成了无冷却。
在CE里面我发现这三个地址的间隔好像是连续的,所以我计算了一下,还真是连续的,每个之间歌50个偏移。
所以在我们知道第一个地址之后,就可以计算出第二个、第三个、第四个,甚至更多个植物的冷却控制地址。
在CE里面我们可以这样写地址,根据第一个的地址,计算出第二个、第三个、第四个等等地址,有多个我们就多添加几个地址并锁定为 1 就可以实现无冷却效果。
最后说点题外话,有些坛友让我去给他逆向XXX软件/游戏,十分抱歉,我没回你就是我不会。
如果你真的想找人PJ,你就在论坛发求助帖。
另外我也是个刚开始学习的小白,很多东西我也是边学边发教程。
主要目的是让更多人能够学习汇编的变得快乐,我自己也巩固学习的知识点。
|