吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 21948|回复: 81
收起左侧

[原创] 植物大战僵尸修改器DIY(二)CD详解

  [复制链接]
丸子de爸爸 发表于 2019-10-5 00:36
本帖最后由 丸子de爸爸 于 2019-10-23 16:07 编辑

前言

之前做星际的时候,就有兄弟们说,为啥不做一个原子弹无CD呀。好像大家对CD这个东西挺感兴趣,那我们这一篇就来研究一下,做无CD的思路吧。

这个植物大战僵尸系列呢,目前暂定想法就是3-4集的样子。主要就是针对于各种不同的功能,进行一个思路的引导和分析。最后一集的时候,会介绍如果使用易语言和AA引擎,将他直接制作成一个真正的修改器,尽情期待。

PS:我讲的是思路,植物大战僵尸,只是一个例子,大家可以把思路拓展到别的方面去,注重思维灵活。

欢迎文明转载,请注明出处  丸子de爸爸

本文所有技术资料仅供研究,不鼓励任何盗版商用行为

请大家支持正版,支持正版!支持正版!!!

上集传送门

工具

CheatEngine6.7

植物大战僵尸本体

PS:(我使用的是年度版,可以直接解锁所有物品,不然你就自己打到后面去吧)

本次基础知识

内存,一切皆内存,我们操作的全部都是内存。

所有地址相关的概念,都可以理解为坐标,用来给我们做标记的而已。

如果实在搞不明白,你想想指南针为啥指向北边,为啥叫南北,只是定义,只是公认

PS:上面这一段是重复了,但是我觉得还是有必要多重复一下,看多了,大家就印象深刻一点。

CE数据模糊搜索

在搜索数据时,有时数据并不是有固定值的,比如CD,只知道他是增加或是减少,此时需要怎么做?

可以使用CE的模糊搜索功能,更改扫描模式为“未知的初始值”,进行初次扫描后,就可以根据数值的增减,来对数值进行查找了。

例:植物生命值,种下植物之后,首次扫描,纪录植物满血的状态。然后等僵尸咬了一口植物,植物生命值减少,进行数字的减少操作,多次重复,得到植物生命值。

每一次模糊搜索,都仅仅针对于上一次的搜索结果。

汇编语句

inc

相当于编码中的i++,就是自身+1。

例:inc eax,其实就是eax = eax + 1

dec

相当于编码中的i--,就是自身-1。

例:dec eax,其实就是eax = eax - 1

cmp

简单理解为比较语句,通常结合j**跳转一起使用。有兴趣的可以去查一下,不讲多了,讲多了反而容易混乱。

例:cmp eax ,ebx,比较eax和ebx

jle

上一次比较的结果,左侧小于等于右侧,则跳转。

例:eax = 1,ebx = 2。cmp eax,ebx。此时jle就会跳转。

test

两个参数进行与操作。如果两个参数相同,则为判断是否为0。这个也可以查一下,很多内容。

例:test eax,eax。

实现步骤

植物无CD

破解最重要的基础,CE找到对应的内存

CE查找CD地址

先点一下墓碑旁边的锁,解锁一下所有内容,省事很多

1.png

进入冒险模式第一关,随便把植物选满(记得选食人花和坚果,待会有用)

2.png

CE附加一下进程"PlantsVsZombies.exe"

开始游戏后,切换到CE,扫描类型改为“未知的初始值”,执行首次搜索

3.png
得到的结果数量很多(在附加进程按钮下面就是数量),接下来我们讲一下CD的机制。

一般的CD计算,在汇编中,都是通过循环来判断,流程图如下

就是当CD没完成的时候,会一直循环,直到满足条件,才会执行正常的逻辑

流程1.png

根据CD流程图,所以接下来的动作就如下

植物大战僵尸的CD是按照0开始增大,CD完成再恢复成0的逻辑。流程图直接按增大逻辑。(我自己试出来的)

PS:正常的话,不知道是可以使用,模糊查找的变化的数值。但是如果数据太多,先猜一个增大或者减少,如果找不到,再搜另外一种可能,会更快找到内存。

这里为啥要判断CD完没完成呢?为啥又要减少。

因为每一种植物是一个CD,当在CD状态时,CD值持续增大,当CD完成时,需要变为0。所以是减少了。

例:CD为3000,建造过程中,从0-3000一直增大,每一次时间间隔,都会增大,如1000,1100。完成CD时候,变成了0,自然会比上一次的数据都要少,所以搜索减少。

流程2.png

一通操作,找出了CD地址如下,你们的和我的不一定一样

判断找对了的方法在于,他数值的增长和归零,和你植物的CD是同步的。

4.png

右键地址,选择“是什么改写了地址”

5.png

此时再回到游戏,选择搜索到CD的植物(每种植物的CD是单独是,所以一定要选同一个哦)

可以发现,你选中植物的时候,就有一条访问纪录,再次说明我们找对了。

6.png

反汇编分析

接下来简单了,回到最初的流程,CD完成时,需要重置CD。

于是切入口出现了,根据流程,他会在循环中不断判断是否要重置CD。

所以只要将CD是否完成的判断条件更改为一直完成,就可以实现无CD了。

种下找到CD的植物,等待他CD重置,会发现访问列表中多了一条数据。

内容为: mov [esi+24],0000000。根据汇编知识,我们知道这是给[esi+24]置0。

7.png

反汇编分析

选择最后那条记录,点击“显示反汇编程序”

已经知道[esi+24]是植物CD了,那我们在往上看,发现了什么?

红框内的语句从上到下分别为:

  • CD增加1
  • 将CD赋值到eax
  • 比较CD和一个值(这里可以推断是最大值了)
  • 如果CD小于最大值,则跳转
  • 给eax赋值为esi
  • 将CD置0

于是可以推测,jle那一句代码,就是流程图中的判断CD是否完成的逻辑

8.png

修改汇编代码

右键jle那一行,选择“使用空指令替换”。即,让这一行始终不执行。

然后回到游戏,CD移除。

小作业,可以按照上一集的做法,尝试自己写一下自动注入的AA脚本。并在CE中使用。

9.png

超级吃人花

食人花界的大胃王,移除消化时间,吃起来没完没了。

大家可以尝试先不往下看,自己使用无CD的方法,看自己能不能找到怎么做。

CE查找消化CD地址

在离僵尸稍微远一点的地方,种下一颗食人花。(远一点是为了我们好记录首次信息,别一下去就吃了,比较麻烦)

之后在第一个僵尸后面,摆一个坚果。(保护食人花不被后面的吃了,给我们多点时间。所以,为啥我不先做无敌。忘了....)

10.png

开启一个“新的扫描”,扫描类型改为“未知的初始值”,执行首次搜索


按道理,一个游戏的逻辑都是一样的,所以CD也应该是增大,然后这个游戏居然不是。食人花的CD居然是减少。

按照CD同样的操作,只不过变成了减少。找到一个可疑值,为啥判断是他,你看其他的都大成什么样了,吃大象都消化了呀。

测试一下,右键“改变已选中地址的值”,改为0,发现食人花马上就吞下去了。就是他了。

11.png

反汇编分析

选中食人花吞噬CD,右键“找出是什么改写了这个地址”,然后就等吧。等啥,等僵尸来,就像种植CD,每一种植物同一个CD。食人花是每一朵一个吞噬CD,所以,只有等再来一个僵尸的时候,我们才可以观察数据。

12.png

等它吃了一个僵尸,赶紧观察数据,发现有两条纪录只调用了一次,第三条数据会特别一点,因为第一条才46,但是食人花消化是需要很久的。而我们又知道消化CD是递减的,所以在刚吃进去的时候,应该需要赋值一个最大值,然后慢慢递减,所以这个00000FA0就是最大值,选中他,“显示反汇编程序”

13.png

修改汇编代码

来到汇编界面,根据分析,我们知道他赋值的就是最大值,那么,我直接把最大值改为0,是不是就直接无消化CD呢?

双击选中的代码,将后面的00000FA0,改为0。

回到游戏,发现还是没有消化呀,那是因为我们这个修改,只是在食人花吃僵尸的时候生效,所以回内存地址中,把消化CD手动置为0,再看。接下来所有的僵尸就是一口一个不停了。

14.png

总结

在没有准确数据显示的时候,尝试使用CE的模糊搜索,可以很方便的帮我们定位内存地址。通过检测内存地址的访问和改写,我们又可以很快的定位到汇编的逻辑。于是,修改程序就变成了一个简单的事情。

不要因为一个游戏比较老旧,就觉得他没有可以利用的地方。只要你有想象力,它一样可以有很多新鲜的功能,大家如果觉得有趣,可以按照本文的方法,继续制作,土豆雷和玉米大炮的无CD,方法完全是相同的。

如果有什么意见和问题,欢迎留言或者私聊,感谢观看!!!
下一集

免费评分

参与人数 44威望 +1 吾爱币 +43 热心值 +41 收起 理由
lxw + 1 + 1 谢谢@Thanks!
半纸情书 + 1 热心回复!
SYWZWL + 1 + 1 我很赞同!
叫我ChEn1啦丶 + 1 + 1 我很赞同!
德德哈哈 + 1 感谢老哥
gyqgxj + 1 谢谢@Thanks!
新手12138 + 1 + 1 热心回复!
Rainy_晴天 + 1 + 1 谢谢@Thanks!
gzxjlsgl + 1 + 1 用心讨论,共获提升!
lzx0595 + 1 热心回复!
yzlovew + 1 + 1 谢谢@Thanks!
吞茶嚼花 + 1 + 1 用心讨论,共获提升!
wugagaga + 1 + 1 谢谢@Thanks!
饥饿滴小凤 + 1 + 1 谢谢@Thanks!
Hmily + 1 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
felixdream + 1 + 1 谢谢@Thanks!
不如吃茶去 + 1 + 1 用心讨论,共获提升!
暮雪辞 + 1 我很赞同!
kai.wu + 1 + 1 谢谢@Thanks!
忘川123 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
13593562441 + 1 我很赞同!
朱朱你堕落了 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
hx924923235 + 1 + 1 谢谢@Thanks!
qq1614266756 + 1 我很赞同!
tryotry + 1 + 1 谢谢@Thanks!
zhorske + 1 + 1 支持一波,不容易
凉一点是薄荷 + 1 + 1 热心回复!
Leoken + 1 + 1 谢谢@Thanks!
笙若 + 1 + 1 谢谢@Thanks!
Aksa + 1 + 1 谢谢@Thanks!
DeadBoty + 1 + 1 谢谢@Thanks!
52pj8089 + 1 + 1 用心讨论,共获提升!
alei1370 + 1 + 1 大神哟
liphily + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
铜绿 + 1 谢谢@Thanks!
初晨曦流辉 + 1 热心回复!
多幸运遇见baby + 1 + 1 用心讨论,共获提升!
傻笑的老鼠 + 1 + 1 热心回复!
风轻然雨朦胧 + 1 + 1 热心回复!
onihot + 1 + 1 谢谢@Thanks!
李凯324 + 1 + 1 谢谢@Thanks!
ISR + 1 + 1 热心回复!
bugof52pj + 1 + 1 谢谢@Thanks!
joneqm + 1 + 1 用心讨论,共获提升!

查看全部评分

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

叫我ChEn1啦丶 发表于 2019-12-16 13:34
雅歌 发表于 2019-12-15 22:09
楼主,总金币如何查找,这个按照数字精确来CE跟踪不到呢,这是啥原因呢

这个我一开始也找不到,通过未知的初始值搜索增加和减少可以找到,
实际上数值的十倍就是显示的金币数,也就是
金币:100000
搜索:10000

点评

666呀…思路很灵活  发表于 2020-2-25 13:34
 楼主| 丸子de爸爸 发表于 2019-10-5 10:29
liphily 发表于 2019-10-5 08:31
这些东西,如果明白了原理,做起来真心不是什么难事——
但是写成教程,真是一种耐心毅力活,至少,我是没 ...

是呀,其实编程就是这样,是一个一加一等于二的问题。搞明白了流程,自然就能得出结果,而且所谓的汇编真的一定也不难。
不过写教程是真的需要耐心,每一篇都是至少几个小时的编辑 ,谢谢支持。

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
依旧_浅笑 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
liphily + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

zcz00 发表于 2019-10-5 00:56
赶快 发表于 2019-10-5 00:58
感谢分享
成国大吉大利 发表于 2019-10-5 02:15
就喜欢这个修改器
谢谢楼主分享
水岸心晴 发表于 2019-10-5 03:29
学习使我快乐
gift 发表于 2019-10-5 07:16
好复杂的样子。
ISR 发表于 2019-10-5 07:31
不明觉厉
李凯324 发表于 2019-10-5 07:53
优秀!!!!你!!!你!
onihot 发表于 2019-10-5 08:00
学习了,感谢分享技术
HadgeROL 发表于 2019-10-5 08:02
本帖最后由 HadgeROL 于 2019-10-5 08:09 编辑

2013年研究过,当时还录了个无限小车和爆钻的视频
https://v.youku.com/v_show/id_XNTg2NjY3OTg0.html?refer=seo_operation.liuxiao.liux_00003303_3000_Qzu6ve_19042900
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-12-24 04:28

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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