突然发现本文躺在我草稿箱里,是4年前写的了,姑且发出来,纪念我逝去的青春
本文目录
前言(Preface)
你没有编程基础或懂得不多?
本文假设你没有任何编程基础或者只了解一点编程有关的知识,这没关系,因为本文足够详细,你不必担心自己学不会
准备工作
1.为什么是CE6.7?
截至本文章发布,CE修改器最新版本为7.0,但作者仍然推荐使用6.7版本(找不到6.7版本你也可以使用6.7以下的版本,它们的操作方法几乎完全一样),6.7以上的版本存在各种问题,十分不稳定(具体不再叙述,作者亲测)
2.作者寄语
本文是一字一句敲出来的,不存在任何复制粘贴,综合了许多CE小白常遇到的问题,尽量避免读者入门过程中走弯路
这是作者第一篇博客,如有写的不好或讲的不对的地方,还请见谅,欢迎指出3.为什么是植物大战僵尸?
植物大战僵尸诞生于2009年,历经11年经久不衰,至今仍在更新,其游戏可供修改的值很多,十分适合用来作为CE入门的实践平台
4.我该怎么学习本教程?
如果你是新手,你应该把它当做一本书,从头开始读,不要遗漏任何地方,但如果你是大佬,那请随便,但记住,当你有不懂的地方时,你应该向前翻来找答案
软件需求
1.汉化的CE(Cheat Engine)内存修改器6.7(先下载英文版Cheat Engine,再去官网(https://www.cheatengine.org)下载汉化包,汉化具体方法不再赘述,请自行百度,但注意一点:有些教程会指引你下载名为zh_CN的汉化包,而这个汉化包已经被官方删除了无法下载,不过只要下载在它旁边的ch_CN就行了,如果你无法搞定,那就直接下载已经汉化的CE6.7吧)
2.普通的植物大战僵尸
硬件需求
一台电脑
简单了解汇编语言
CE中将使用到汇编语言,我们来简单了解一下
什么是汇编语言?
汇编语言,低级编程语言的一种(这里的低级可不是用来区分高低贵贱的低级哦,事实上汇编语言也是很难学的)
我们所学的Java、C、C++等语言,编译后都会转为汇编语言运行
如果你仅是学习CE,我想你不用为此专门去学汇编语言
如果你不了解Java、C、C++等语言,你只需要记住汇编语言是一种编程语言就够了
什么是地址?
地址,就是存储数据的地方,游戏启动时,会自动拿到许许多多的地址,它们之中有的用来存储血量值,有些用来存储能量值,而使用汇编语言就是要对地址和值进行操作
什么是指针?
简单来说,指针指向了地址,但指针并不是直接的地址
如:在CE中,[0F12C068+edi]就是一个指针,它指向哪里决定于edi的值,因此,指针通常是变化的。当我们确定了edi的值(假设)为0C,则这个指针指向的地址即为
0F12C068+0C=>0F12C074
备注:指针通常以[ ]包裹
寄存器?那又是什么?
寄存器一般存在于电脑的CPU(中央处理器)中,也是存储数据的单元,通过寄存器的暂时存储,可以使数据被拿取时更加方便,提升效率
简单说,寄存器就是个存储东西的空间
CE中,常用的寄存器有:eax, ebx, edi, esi等
汇编语言的语法
凡是编程语言,都应该有它独特的语法
下面先来了解一下汇编语言的简单语法:
1.mov 地址, 值
即把值传送到到相应的地址
如:
mov eax, esi
意义:把esi的值传送到eax指向的地址处
mov 00020068, 0000009C
意义:把0000009C这个值传送到地址00020068
2.sub 地址, 值1
即把相应地址的值减值1
如:
sub eax, esi
意义:把eax指向的地址的值加上esi
sub 00020068, 0000009C
意义:把地址00020068对应的值减去0000009C
3.add 地址, 值1
即把相应地址的值加值1
如:
add eax, esi
意义:把eax指向的地址的值传送到地址eax处
add 00020068, 0000009C
意义:把地址00020068对应的值加上0000009C
备注:假如你看不懂上面的语法,那也没关系,你会在实战中慢慢了解的
实战(Exercise)
1.修改阳光
1.打开植物大战僵尸
2.打开CE(你问我怎么打开CE?emm…自己摸索一下吧)
3.然后找到植物大战僵尸的进程并让CE绑定它
文字步骤:
(1)点击CE左上角的小电脑
(2)找到植物大战僵尸的进程,点击它
(3)点击打开,绑定植物大战僵尸的进程
4.既然要修改阳光,首先要找到阳光储存的位置,也就是地址,CE提供了各种各样的搜索方法,根据值来寻找地址。
那既然要根据值找地址,首先我们就要找到阳光的值,然后在CE的数值输入框里输入这个值,最后搜索。
文字步骤:
(1)找到阳光的个数(作者这里是50个)
(2)在CE的搜索框里输入这个个数
(3)点击首次扫描进行第一次筛选
备注:整数一般是使用4字节的数值类型来存储的,所以搜索时的数值类型选用4字节进行搜索
经过了第一轮的搜索,我们得到了数百个结果(作者这里是得到了658个结果,你的搜索结果可能更多或更少,这没关系)
看到这么多结果,你是不是很慌呢?没关系,我们要学会筛选数据,这是用好CE所必须的,继续看吧
5.种一株植物,使阳光改变,再次搜索新的阳光个数
文字步骤:
(1)种一株植物改变阳光(不一定非要种植物,只要让阳光个数改变就行)
(2)搜索框内输入阳光的新个数,点击再次扫描
备注:再次搜索时一定要点再次扫描以便于从已经搜索出的结果中重新搜索,如果点击了新的扫描那么就会清空已有的搜索结果,重新从整个程序中搜索
6.多次想办法改变阳光数量(如种植物、拾取阳光等方法,作者这里采取的是拾取阳光),再从已有数据中搜索新数值,直到得到唯一的一条结果,可以确定这个结果就是阳光的地址了(你的结果可能和我的结果不太一样,因为阳光的存储地址并不是固定的,后面会讲解如何应对)
备注:
1.记住每次搜索都是点击再次扫描
2.可能无论你改变数值并搜索多少次,结果总是不唯一,没关系,继续看下面的步骤
7.接下来可以修改阳光的数值了
文字步骤:
(1)双击唯一的那条结果,发现它被添加到了下面的列表
(2)在下面的列表写着数值的一栏里双击它(不知道在哪双击?请看图)
备注:
如果你有多个结果,那就每个都按照下面图示步骤试一下,看看哪个有用,不管用的就改回原来的值
8.验证结果——回到游戏,发现阳光数量已经修改成了你输入的数值,大功告成
备注:
基址
存储阳光的地址是动态的,意思就是你每次重启游戏,都要重新用CE找到新的地址进行修改,这个地址每次都是不同的
如果你想每次启动游戏的时候都能直接找到阳光的地址,就需要找到改写阳光地址的最根本的源头,它也是个地址,这个地址是静态的,被人们称作基址,也就是说每次游戏启动时它的地址都不会变化,你每次都能从同一个地方找到它。静态地址在CE中显示为绿色的字
备注:基址分配地址使用到的是指针