植物大战僵尸,植物快速CD

 佚名文
发布时间:2025-07-08 10:07

本帖最后由 namedlxd 于 2019-5-4 16:07 编辑

上一篇帖子讲了如何一个坑放多个植物,其实很简单。由于楼主并不熟悉C/C++、E语言,而且没找到用python实现的方法,楼主实在弱鸡,希望大家见谅。
这里给出个特征码在OD里面搜一下就可以找到对应位置了,注意不同版本可能特征码不同,不一定全部能用
具体操作是:
1.OD附加植物大战僵尸
2.ctrl+G 跳转到00401000,习惯
3.ctrl+B 输入下方特征码
83 FE 05 ?? ?? ?? ?? ?? ?? 57 53 55 ?? ?? ?? ?? ?? 85 C0

2019年5月4日 152334.png (110.25 KB, 下载次数: 6)

下载附件

2019-5-4 15:24 上传


4.点确定 搜索,跳转到这

2019年5月4日 152457.png (86.88 KB, 下载次数: 3)

下载附件

2019-5-4 15:27 上传


5.0040FE2F     /0F84 1F090000 je PlantsVs.00410754                     ;  1
6.把这个指令改为jmp就行了。

这里给大家说下特征码怎么来的,要找特征码,首先要到需要根据特征码定位的地方,然后找附近的指令的机器码。
我这里就是把附近的机器码给保存了下来,具体特征码介绍大家可以看这个帖子:https://tieba.baidu.com/p/3857456629?red_tag=1802720485

[Asm] 纯文本查看 复制代码

0040FE1C |. 83FE 05 cmp esi,0x5 0040FE1F |. 0F87 CE100000 ja PlantsVs.00410EF3 ; 0 0040FE25 |. 57 push edi 0040FE26 |. 53 push ebx 0040FE27 |. 55 push ebp 0040FE28 |. E8 F3E1FFFF call PlantsVs.0040E020 0040FE2D |. 85C0 test eax,eax




另外特别感谢@无瑕黑心肠帮忙找回丢失的图片
上一篇帖子:https://www.52pojie.cn/thread-947013-1-1.html

下面进入正题,今天来看下如何使植物快速CD,
通过观察不难发现,植物CD是一个循环的过程,那么这个逻辑在程序中如何表达呢?其实也很简单,我们先设置一个上限,比如说:10000,然后找一个变量,不断循环累加,每次加一,等加到10000就归零,每次归零CD就被刷新了,这样就实现了,当然也可以从10000累计减少,每减到零就刷新CD。


我们先假设它是递增来实现的。


进入游戏,CE附加,放下一个冷却时间较长的植物,我们搜索未知的初始值,然后切到游戏里面,让游戏运行个1秒钟,其实就是让辣椒冷却减少一点,然后再搜索增加的数值,重复这个操作。

v2-0bb8eabf31da966f40e71546d8341844_hd.jpg (128.91 KB, 下载次数: 1)

下载附件

2019-5-4 15:38 上传


经过不断努力,我们找到了一个在辣椒冷却结束时,值为0的数据。再次放下辣椒,然后把这个值改为5000,发现冷却结束了。说明这个值就是我们要找的值。

v2-10fda51b2f8c0f0aad496ecb636a8aba_r.jpg (89.47 KB, 下载次数: 4)

下载附件

2019-5-4 15:38 上传


接下来,我们看是什么改写了这个值。第一个指令是我们拿起或放下辣椒的指令,第二个是我们放下辣椒后,辣椒CD减少的指令,我们看第二个指令的反汇编。

v2-f0c0f3fc364c1228323995d4b2273f39_r.jpg (54.35 KB, 下载次数: 2)

下载附件

2019-5-4 15:38 上传




通过分析不难发现,我们可以将01改为一个较大的数字,实现快速CD。这种方法大家应该很熟悉了,那么接下来看看是否有新的思路。


一般来说,在游戏中冷却的代码都是类似这样来实现的:


[Asm] 纯文本查看 复制代码

while (冷却中) { 减少冷却时间; } 设置冷却结束;



然而在汇编语言中,没有while关键字,只能用跳转指令来实现,我们可以用汇编语言模拟一个循环:

[Asm] 纯文本查看 复制代码

00 -> 是否冷却中 01 | - - 如果不是跳转到04 02 | | 减少冷却时间 03 -|- 跳转到00 04 -> 设置冷却结束




分析完之后,我们可以发现,关键语句在01,我们看汇编代码,差不多与之类似,我们看减少冷却时间上面的一条,je PlantsVsZombies.exe+872AC,我们试着把这个条件反过来,即把je改为jne。(上图为原来的,下图为改过之后的)

v2-c75e15806ca835ec48cfc90dd0a18023_r.jpg (191.03 KB, 下载次数: 3)

下载附件

2019-5-4 15:38 上传


v2-b3c624996fc885e5eff11460ce087aaa_hd.jpg (107.21 KB, 下载次数: 2)

下载附件

2019-5-4 15:38 上传




我们进到游戏里面看一下。我们发现实现了植物无CD,我在这里种了满屏的核弹。

v2-9f55c862e22cce38333a887b81f7bec8_r.jpg (173.8 KB, 下载次数: 2)

下载附件

2019-5-4 15:38 上传




这次的教程就到这里了,希望大家可以动手操作一下。我看有的朋友想要成品,其实我觉得玩游戏并不是主要的,自己动手实现这个功能才是乐趣的所在。













 

点评

涛之雨

怎么又是植物大战僵尸。。。。好多重复的。。。。https://www.52pojie.cn/thread-877785-1-1.html 重了啊。。。(小声逼逼,和我写的重了。。。)  发表于 2019-5-5 07:50

免费评分 参与人数 11威望 +1 吾爱币 +17 热心值 +10 理由
卿卿爸     + 1   + 1   很棒,植物大战僵尸忠实粉  
清梦云影       + 1   热心回复!  
willJ   + 1   + 9   + 1   感谢发布原创作品,吾爱破解论坛因你更精彩!  
简直舒     + 1   + 1   我很赞同!  
monima     + 1   + 1   我很赞同!  
At作梦     + 1     热心回复!  
aa361328     + 1   + 1   我很赞同!  
天天爱你     + 1   + 1   我很赞同!  
薪尽自然凉       + 1   用心讨论,共获提升!  
懵逼猫咪     + 1   + 1   我很赞同!  
zxcnny930     + 1   + 1   <font style="vertical-align: inherit;"><font style=  

查看全部评分

首页
评论
分享
Top