zxc8820 发表于 2024-7-15 11:55

记录- 植物大战僵尸杂交版修改过程。

本帖最后由 zxc8820 于 2024-7-17 19:58 编辑

                最近无聊,好久没玩过CE修改器了,月初还是上个月这植物大战僵尸杂交版爆火,想想十多年前学习游戏修改的时候很多都用植物大战僵尸做教程,说明什么,说明修改简单,哈哈,老年人了找点自信,练练手。
                自己做了几个小功能吧:自动拾取、种植无CD、植物0元购、植物攻速加倍、还有论坛看到的叠加种植。可能和论坛里有补分重叠,但是没关系,帖子我尽量多记录修改过程,一些错误过程和重复的过程就省略介绍了。希望能给新人们学到点思路吧,毕竟修改游戏最重要的就是找到想要修改的数据。你最好是有修改基础,如果你真的什么都不会的话,那你可能真的看不懂。
               
                #一、自动拾取               
               
                开局发现这个阳光需要自己点击,但是不点击的话,掉到屏幕边缘的时候会自动拾取,这里就给了我们漏洞钻,让自动拾取阳光变成了可行性。要怎么实现,第一想到的肯定是修改阳光坐标吧。
                思考:如上图,一个屏幕内不会只存在一个阳光,我们点击收集阳光的时候,肯定会告诉系统,我们点击是哪个阳光,而这个阳光里面通常又会包含一些信息,坐标、+xxx阳光值之类的。那么我们就要找到阳光的地址
                        找阳光地址,这里又有两个思路:
                              第一、用模糊搜索,找到阳光的游戏坐标。
                              第二、阳光和左上角的阳光值息息相关,在拾取阳光增加阳光值之前,肯定会获取阳光里面的信息。我们也可以从这里获取到阳光地址。
                              
                我这里是选择了第二种方式,先从左上角阳光值开始吧。
                找阳光值我相信你们都会,我就省略了。。。
               
               
               
                找到后添加到下方列表(如上图),右键选择 找出是什么改写了这个地址,回到游戏更新一下阳光值。
               
               
               
                得到了1条代码,这是阳光值更新后所得到的代码,是修改阳光的代码,和我们需求无关。PASS。
                点击显示反汇编程序,在左边内存窗口选定当前代码,按F5变成绿色,下断点。回到游戏继续更新阳光值。
               
               
               
                如上图,这里我觉得 ESI33072020这个地址挺可疑,我们让游戏正常运行,查看这个地址的一些变化。汇编窗口选中代码F5,取消断点,F9让游戏正常运行。游戏正常运行状态如下图
               
               
               
               
               
                从上面动图可以看到,新阳光在地址33072070的值是0,但是当我们点击阳光时变成了1,所以猜测这个地址值=1时,可以阳光为拾取状态。我们可以等下一个新阳光,手动把33072070的值改为1,看阳光是否会变成拾取状态哈。
                这里我测试试过了哈,猜测是正确的,过程我就省略了。为了节省文章不要太长。
               
               
               
                既然找到了我们想要修改的数据,那就写入我们要实现的代码了。选中33072070 的值,右键选中 将地址添加到列表中,如上图
               
               
               
                右键选择找出是什么访问了这个地址
               
               
               
                两条代码,都在判断33072070这个地址的值是否为0,那么我们在这之前给33072070这个地址写入1就可以了。
                > 这里插一句话,eax 是阳光地址。eax(阳光地址)+ 50(偏移)= 33072070 得来的,如下图
               
               
               
                使用CE的脚本代码为:

//code from here to '' will be used to enable the cheat
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)
newmem: //this is allocated memory, you have read,write,execute access//place your code here
cmp ,6 //这里是我发现,通关后新卡片值 = 1 并不会自动拾取,而且会变成无法点击BUG,所以加了个判断。这里的值代表的是某一种道具。
ja originalcode
mov ,1originalcode:
cmp byte ptr ,00
je PlantsVsZombies.exe+1B9DCexit:
jmp returnhere"PlantsVsZombies.exe"+1B99A:
jmp newmem
nop
returnhere:
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"PlantsVsZombies.exe"+1B99A:
db 80 78 50 00 74 3C
//cmp byte ptr ,00
//je PlantsVsZombies.exe+1B9DC


#二、种植无CD


如上图,在植物图鉴我们可以看到植物的详细信息,现在我们想做的功能是,种下植物后,无需等待时间,继续种下同一种植物。
思考:假设图中冷却速度3000,换算成冷却时间30秒,那么,在我们种下这个植物后,肯定有一个冷却时间计时器,它可能是从 0s - 30s。也可能是从 30s - 0s 。这个我们是未知的。
所以,我先从种下植物后,才开始搜索数据,扫描类型选择:未知的初始值,首次扫描。如下图



回到游戏,让冷却时间的计时器跑一下,再回到CE,这时候我们有两条路走,这个计时器要么是增加的数值,要么就是减少的数值,如果增加的找不到,那我们就回头重复一遍找减少的。这里这个冷却计时器是增加的。

这个重复搜索数值的过程我就省略了。。。

找到数据后添加到列表,如下图操作



最后的CE脚本:
//code from here to '' will be used to enable the cheat
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)

newmem: //this is allocated memory, you have read,write,execute access
//place your code here

originalcode:
mov ,eax
mov ,eax

exit:
jmp returnhere

"PlantsVsZombies.exe"+88263:
jmp newmem
nop 2
returnhere:


//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"PlantsVsZombies.exe"+88263:
db 2B 45 24 89 44 24 10
//sub eax,
//mov ,eax

#三、植物0元购


既然是0元购,那就不需要阳光值啦,找到阳光值,锁定为0吧。




思考:当我们有足够的阳光,图标是亮的,不够的话就是暗的。那说明,有个地方一直在窥视我们的阳光值,并与植物的花费在做比较,判断我们是否拥有足够的阳光值。
那就从刚刚找到的阳光值下手,右键 查找是什么访问了这个地址,



找到了两条代码,下断点,看看寄存器有什么变化。如果寄存器的值看着像地址,就右键选择以十六进制显示,在内存数据里看看有没有熟悉的数据。






两条代码都没有在寄存器或者地址里找到想要的数据,但是在第一条代码里还是得到了一些信息,而第二条代码可以直接pass掉了。回到第一条代码,下断点,把目光放在右下,如下图



双击进入后,我们会来到 test al,al 这行代码,我们在上面call 前面下一个断点



如上图,代码停在这里时,我们可以从寄存器发现,已经拿到植物购买需要的花费阳光值,我们可以尝试在这里写段代码让eax = 0,看看能不能购买。




这是让 eax = 0的结果,图标虽然亮了起来,但还是无法购买。OK,既然找到了想要的数据,就说明步骤没错,现在,需要在更早的时候去处理"7D"这个数据,第一时间闪过的就是源头,对,就是"7D"第一次出现的地方。


PlantsVsZombies.exe+88478- call PlantsVsZombies.exe+1BAB0:这是我们当前的地址,我们在汇编代码窗口一直往上滑,在每个call前面都下断点,看看寄存器有没有看到"7D"值,有的话就继续往上找call,直到那个call在被运行前,寄存器是不存在"7D"为止。

直到找到PlantsVsZombies.exe+883B4- call PlantsVsZombies.exe+1DAE0:这个call 运行前并没有我们需要的"7D"那这个call就是获取我们植物购买需要的花费阳光值"7D"。就在这里下断点,使用F7跟进这个call,跟进以后在PlantsVsZombies.exe+1DAE4- call PlantsVsZombies.exe+67B00 ,这个call 能拿到"7D",那就继续F7一步一步跟进。我们不需要看代码做了什么,只需要盯着寄存器看到"7D"的出现即可。

直到运行到这行代码:PlantsVsZombies.exe+4A3C13 - mov eax,:我们需要的"7D"终于第一次闪亮登场。


在内存区域跟进这个PlantsVsZombies.exe+3A2010地址看看。绿油油一片,还有一些很让人熟悉的数据,这里就是存放植物花费和冷却时间的基地址。
为了随用随关,我们就尽量不改这一块地址里面的值了。从汇编代码看,直接给eax 赋予0,就可以做到0元购了。




最后CE脚本

//code from here to '' will be used to enable the cheat
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)

newmem: //this is allocated memory, you have read,write,execute access
//place your code here

originalcode:
mov eax,0

exit:
jmp returnhere

"PlantsVsZombies.exe"+4A3C13:
jmp newmem
nop 2
returnhere:



//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"PlantsVsZombies.exe"+4A3C13:
db 8B 04 85 10 20 7A 00
//mov eax,


#四、植物攻速翻倍
玩的时候觉得植物的植物攻击速度有一点点慢,在植物图鉴里可以看到详细信息。


如上图,以豌豆向日葵为例,攻击间隔1秒一次,把植物和新的子弹距离作参照物。
从之前种植CD的知识,这游戏数据是很明文的,冷却速度3000 = 30/s,那这里的攻击间隔就是1秒 =100 。那么当一个子弹被发射时,发射子弹的计数器就两种状态,1、从0 到 100;2、从100到 0。
OK,我觉得说得很明白了,搜索过程就省略了。。。

      
       这里还因为知道要找的数据在 0--100之中,可以在扫描类型选择在两者之间的值,最大数值肯定不能变的,最小数值你有信心可以填更接近最大值的,可以更快的找到数据。

       找到数据后添加到列表,右键查找 是什么改写了这个地址




两条代码,看第一条是什么 PlantsVsZombies.exe+5F8A9 - add dword ptr ,-01:这条代码是时间一直在减 -01,那我们把 -01改成-02、03以此类推就可以实现攻速翻倍了。如下图结果:

,能看出子弹之间的距离缩小了。

CE脚本代码:

//code from here to '' will be used to enable the cheat
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)

newmem: //this is allocated memory, you have read,write,execute access
//place your code here

originalcode:
add dword ptr ,-02
mov eax,

exit:
jmp returnhere

"PlantsVsZombies.exe"+5F8A9:
jmp newmem
nop 2
returnhere:



//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"PlantsVsZombies.exe"+5F8A9:
db 83 46 58 FF 8B 46 58
//add dword ptr ,-01
//mov eax,
#五、叠加种植
这是在论坛里看到功能,既然是学习技术,不能模仿,也要思考别人是如何实现的。

思考:在种植物的时候,肯定会有代码在判断当前位置能不能种下植物,而这代码只会在种植物的时候才执行。

祭出工具:代码过滤器




选择来自反汇编程序,选中游戏进程。稍等一下。



等待扫描完成后,可以点击开始监听代码了。

回到游戏,不要种植物,我们干什么都行,先把无用的代码给过滤掉。

      

没有种植物,所以选择过滤掉未执行的。

这里因为筛选数据不怎么会动了,开始种植物了,选择已执行。

重复过程省略了。。。过程就和搜索数值一样,记得要叠加种植(种植失败)也选择已执行。

种下植物(数值被改变)→ 代码已执行
未种植物(数值未改变)→ 代码未执行




最后不出意外的话就就没有意外,剩下5个地址,种植成功和叠加种植失败都会执行这5条代码。从地址来看这几行代码间隔不远,双击第一个地址下断点,因为代码只有种植时才会运行,分别种植成功一次,叠加种植失败一次,看看过程中有什么不一样,几条代码都是call,直接F8步过就好了。



把PlantsVsZombies.exe+FE2F - je PlantsVsZombies.exe+10754:je改成jmp必定跳转,就能实现植物的叠加种植了。

CE脚本代码:
CE脚本代码:

//code from here to '' will be used to enable the cheat
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)

newmem: //this is allocated memory, you have read,write,execute access
//place your code here

originalcode:
jmp PlantsVsZombies.exe+10754

exit:
jmp returnhere

"PlantsVsZombies.exe"+FE2F:
jmp newmem
nop
returnhere:



//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"PlantsVsZombies.exe"+FE2F:
db 0F 84 1F 09 00 00
//je PlantsVsZombies.exe+10754

Hmily 发表于 2024-7-15 12:37

你这个从哪复制过来的?图片那都出问题了。

zxc8820 发表于 2024-7-16 09:46

ltgb 发表于 2024-7-16 09:10
游戏主界面右下角点选项 勾上自动搜集
就能自动收集金币和阳光了

{:1_907:}居然还有这个功能,这是真不知道

430975 发表于 2024-7-15 12:50

Hmily 发表于 2024-7-15 12:37
你这个从哪复制过来的?图片那都出问题了。

我说怎么看半天都没加载图片以为我卡了呢{:1_900:}

lvhaiqiang 发表于 2024-7-15 13:16

黑黑的 怀疑了

angxi6 发表于 2024-7-15 13:22

厉害大佬

常辰 发表于 2024-7-15 13:42

你从哪个论坛里复制过来的?这一看就是论坛的格式

zxc8820 发表于 2024-7-15 13:51

本帖最后由 zxc8820 于 2024-7-15 13:56 编辑

Hmily 发表于 2024-7-15 12:37
你这个从哪复制过来的?图片那都出问题了。
{:1_907:} 救命,我也不知道,帖子我是用那么MD写的,图片我是用论坛附件功能,插入图片给我
   一条( )这样的代码,一发帖就变成这样了 ,把帖子前后 去掉正常了

Hmily 发表于 2024-7-15 14:15

zxc8820 发表于 2024-7-15 13:51
救命,我也不知道,帖子我是用那么MD写的,图片我是用论坛附件功能,插入图片给我
   一条(...

插入不影响MD的,你要是用md就不要用论坛其他代码格式,不要混用。

beidou1990 发表于 2024-7-15 14:18

还是很好玩的啊顶起来

jiangjinang110 发表于 2024-7-15 14:59

怎么下载游戏,求个安装包
页: [1] 2 3 4 5
查看完整版本: 记录- 植物大战僵尸杂交版修改过程。