namedlxd 发表于 2019-5-4 15:45

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

本帖最后由 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

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

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

这里给大家说下特征码怎么来的,要找特征码,首先要到需要根据特征码定位的地方,然后找附近的指令的机器码。
我这里就是把附近的机器码给保存了下来,具体特征码介绍大家可以看这个帖子:https://tieba.baidu.com/p/3857456629?red_tag=1802720485
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秒钟,其实就是让辣椒冷却减少一点,然后再搜索增加的数值,重复这个操作。

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

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



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


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


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

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

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


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



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



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













vxfla 发表于 2020-7-28 18:11

找植物对应的冷却是哪个地址时,可以先使用植物让他冷却,然后重复搜索 “增加的值”,等到植物马上冷却结束时,等待植物冷却刷新,精确搜索 0 ,能得到植物的冷却的地址,亲测有效

namedlxd 发表于 2019-5-5 18:55

liphily 发表于 2019-5-5 17:11
那个坛友居然花费了点评来宣示主权。。。
嗯呢,这种问题,或许是作者自己发现的呢——毕竟方法就那么翻来 ...

我讲了为什么,不只是讲是什么

huge33 发表于 2019-5-4 16:10

感谢分享

scathlon 发表于 2019-5-4 17:01

感谢,五一期间小孩玩这个玩疯了

pls916 发表于 2019-5-4 17:08

五一假期还在发帖,辛苦啦

jxx51 发表于 2019-5-4 17:29

注意不同版本可能特征码不同,不一定全部能用。

KaQqi 发表于 2019-5-4 20:15

蘑菇炸弹有什么用来着。。好久不玩忘了...

半个橙子 发表于 2019-5-4 20:16

学习了,没有假期的LZ

一叶知夏 发表于 2019-5-4 20:34

跟着楼主学习一下

splendortan 发表于 2019-5-4 20:42

五一还在发贴啊

mmd5289 发表于 2019-5-4 21:12

特别喜欢这个游戏谢谢分享
页: [1] 2 3 4 5
查看完整版本: 植物大战僵尸,植物快速CD