吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3619|回复: 47
收起左侧

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

  [复制链接]
zxc8820 发表于 2024-7-15 11:55
本帖最后由 zxc8820 于 2024-7-17 19:58 编辑

                最近无聊,好久没玩过CE修改器了,月初还是上个月这植物大战僵尸杂交版爆火,想想十多年前学习游戏修改的时候很多都用植物大战僵尸做教程,说明什么,说明修改简单,哈哈,老年人了找点自信,练练手。
                自己做了几个小功能吧:自动拾取、种植无CD、植物0元购、植物攻速加倍、还有论坛看到的叠加种植。可能和论坛里有补分重叠,但是没关系,帖子我尽量多记录修改过程,一些错误过程和重复的过程就省略介绍了。希望能给新人们学到点思路吧,毕竟修改游戏最重要的就是找到想要修改的数据。你最好是有修改基础,如果你真的什么都不会的话,那你可能真的看不懂。
               
               

一、自动拾取

              
                1.1.png
                开局发现这个阳光需要自己点击,但是不点击的话,掉到屏幕边缘的时候会自动拾取,这里就给了我们漏洞钻,让自动拾取阳光变成了可行性。要怎么实现,第一想到的肯定是修改阳光坐标吧。
                思考:如上图,一个屏幕内不会只存在一个阳光,我们点击收集阳光的时候,肯定会告诉系统,我们点击是哪个阳光,而这个阳光里面通常又会包含一些信息,坐标、+xxx阳光值之类的。那么我们就要找到阳光的地址
                        找阳光地址,这里又有两个思路:
                                第一、用模糊搜索,找到阳光的游戏坐标。
                                第二、阳光和左上角的阳光值息息相关,在拾取阳光增加阳光值之前,肯定会获取阳光里面的信息。我们也可以从这里获取到阳光地址。
                                
                我这里是选择了第二种方式,先从左上角阳光值开始吧。
                找阳光值我相信你们都会,我就省略了。。。
               
                1.2.png
               
                找到后添加到下方列表(如上图),右键选择 找出是什么改写了这个地址,回到游戏更新一下阳光值。
               
                1.3.png
               
                得到了1条代码,这是阳光值更新后所得到的代码,是修改阳光的代码,和我们需求无关。PASS。
                点击显示反汇编程序,在左边内存窗口选定当前代码,按F5变成绿色,下断点。回到游戏继续更新阳光值。
               
                1.4.png
               
                如上图,这里我觉得 ESI  33072020这个地址挺可疑,我们让游戏正常运行,查看这个地址的一些变化。汇编窗口选中代码F5,取消断点,F9让游戏正常运行。游戏正常运行状态如下图
               
                1.5.png
               
                1.6.gif
               
                从上面动图可以看到,新阳光在地址33072070的值是0,但是当我们点击阳光时变成了1,所以猜测这个地址值=1时,可以阳光为拾取状态。我们可以等下一个新阳光,手动把33072070的值改为1,看阳光是否会变成拾取状态哈。
                这里我测试试过了哈,猜测是正确的,过程我就省略了。为了节省文章不要太长。
               
                1.7.png
               
                既然找到了我们想要修改的数据,那就写入我们要实现的代码了。选中33072070 的值,右键选中 将地址添加到列表中,如上图
               
                1.8.png
               
                右键选择  找出是什么访问了这个地址
               
                1.9.png
               
                两条代码,都在判断33072070这个地址的值是否为0,那么我们在这之前给33072070这个地址写入1就可以了。
               

这里插一句话,eax 是阳光地址。eax(阳光地址)+ 50(偏移)= 33072070 得来的,如下图


               
                1.10.png
               
                使用CE的脚本代码为:
[Asm] 纯文本查看 复制代码
[ENABLE]
//code from here to '[DISABLE]' 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 [eax+58],6 //这里是我发现,通关后新卡片[eax+50]值 = 1 并不会自动拾取,而且会变成无法点击BUG,所以加了个判断。这里[eax+58]的值代表的是某一种道具。
ja originalcode
mov [eax+50],1originalcode:
cmp byte ptr [eax+50],00
je PlantsVsZombies.exe+1B9DCexit:
jmp returnhere"PlantsVsZombies.exe"+1B99A:
jmp newmem
nop
returnhere:[DISABLE]
//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 [eax+50],00
//je PlantsVsZombies.exe+1B9DC



二、种植无CD


2.1.png

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

2.2.png 2.3.png

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

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

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

2.4.png

最后的CE脚本:
[Asm] 纯文本查看 复制代码
[ENABLE]
//code from here to '[DISABLE]' 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 [ebp+24],eax
mov [esp+10],eax

exit:
jmp returnhere

"PlantsVsZombies.exe"+88263:
jmp newmem
nop 2
returnhere:
 
[DISABLE]
//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,[ebp+24]
//mov [esp+10],eax


三、植物0元购




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

3.1.png


思考:当我们有足够的阳光,图标是亮的,不够的话就是暗的。那说明,有个地方一直在窥视我们的阳光值,并与植物的花费在做比较,判断我们是否拥有足够的阳光值。

那就从刚刚找到的阳光值下手,右键 查找是什么访问了这个地址

3.2.png 3.3.png

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



3.4.png 3.5.png



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

3.6.png 3.7.png

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

3.8.png

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



3.9.png

这是让 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,[eax*4+PlantsVsZombies.exe+3A2010]我们需要的"7D"终于第一次闪亮登场。
3.11.png 3.12.png

在内存区域跟进这个PlantsVsZombies.exe+3A2010地址看看。绿油油一片,还有一些很让人熟悉的数据,这里就是存放植物花费和冷却时间的基地址。

为了随用随关,我们就尽量不改这一块地址里面的值了。从汇编代码看,直接给eax 赋予0,就可以做到0元购了。


3.13.png

最后CE脚本
[Asm] 纯文本查看 复制代码
[ENABLE]
//code from here to '[DISABLE]' 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:


[DISABLE]
//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,[eax*4+PlantsVsZombies.exe+3A2010]


四、植物攻速翻倍


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

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

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


6.png

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

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

CE脚本代码:
[Asm] 纯文本查看 复制代码
[ENABLE]
//code from here to '[DISABLE]' 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 [esi+58],-02
mov eax,[esi+58]

exit:
jmp returnhere

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

 
[DISABLE]
//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 [esi+58],-01
//mov eax,[esi+58]

五、叠加种植


这是在论坛里看到功能,既然是学习技术,不能模仿,也要思考别人是如何实现的。

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

祭出工具:代码过滤器


1.png 2.png

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

3.png 4.png

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

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

5.png       

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

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

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

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


7.png

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

8.png 9.png

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

CE脚本代码:
[Asm] 纯文本查看 复制代码
CE脚本代码:
[ENABLE]
//code from here to '[DISABLE]' 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:

 
[DISABLE]
//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


3.10.png

免费评分

参与人数 5威望 +1 吾爱币 +24 热心值 +4 收起 理由
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
心云 + 1 杂交版下载地址甩一个
Atnil + 1 + 1 谢谢@Thanks!
koreancoco + 1 + 1 热心回复!
pxlki + 1 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hmily 发表于 2024-7-15 12:37
你这个从哪复制过来的?图片那都出问题了。
 楼主| zxc8820 发表于 2024-7-16 09:46
ltgb 发表于 2024-7-16 09:10
游戏主界面右下角点选项 勾上自动搜集
就能自动收集金币和阳光了

居然还有这个功能,这是真不知道
430975 发表于 2024-7-15 12:50
Hmily 发表于 2024-7-15 12:37
你这个从哪复制过来的?图片那都出问题了。

我说怎么看半天都没加载图片以为我卡了呢
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
你这个从哪复制过来的?图片那都出问题了。

救命,我也不知道,帖子我是用那么MD写的,图片我是用论坛附件功能,插入图片给我
   一条( )这样的代码,一发帖就变成这样了 ,把帖子前后
去掉正常了

点评

插入不影响MD的,你要是用md就不要用论坛其他代码格式,不要混用。  详情 回复 发表于 2024-7-15 14:15
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
怎么下载游戏,求个安装包
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-13 01:14

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表