前言
近日在网上冲浪时发现一个教程,引起了兴趣——使用CE修改植物大战僵尸的教程。于是自己也下载了练手尝试一番,发现体验不错,特写博客作为以后翻阅使用。
准备
- 植物大战僵尸中文版
- CE软件(Cheat Engine)
- 电脑一台(最好Win 10系统,其余系统没测试)
基础概念
在第一期概念就不涉及太多,因为我们第一期也用不到,简单说几个就好,看不懂也没关系。
内存
内存
,一切皆内存,我们操作的全部都是内存。
学习面向对象的时候,老师经常重复,万物皆对象。这里我们要说的,万物皆内存。也不难理解,电脑里的东西总要放在一个地方存储的。刚开始没运行的时候,放在硬盘里,等你运行的时候,就会放到内存中运行。我们通常所说的运行内存大小,也就是我们运行软件时放入的内存大小了,电脑运行内存越大,就可以同时运行越多软件。嗯,扯偏了。
其次,还有所谓的地址
,而所有地址相关的概念,都可以理解为坐标,用来给我们做标记的而已。
如果实在搞不明白,你想想指南针为啥指向北边,为啥叫南北,只是定义,只是公认。
模块地址
简单理解,就是我们电脑的软件运行起来,加载到内存中的时候,系统分配给软件的首地址。(学过编程语言的人,应该不会陌生这个)
也可以理解为,内存是一个柜子,一共有40格,若软件运行时,系统把软件放到了第30格,那么模块地址就是30。
指针
指针
其实就可以理解成外号,你的外号叫二狗子,别人先知道你的外号,然后熟悉了才可以根据外号找到你的真名。
更多的用处是引用,就像别人往往更愿意叫你二狗子,而不愿意叫你真名一样。
例:一个指针叫做point,他指向内存的0xFF923200。那他就可以有两个作用,一个就是直接使用指向的内存地址FF923200;另一个可以直接查到FF923200里的值。
无限阳光功能实现
思想
找到阳光所在内存地址,然后修改内存地址的值,使软件运行时访问的是自己修改后的值。
步骤
- 打开植物大战僵尸中文版和CE软件(Cheat Engine)。左边是游戏,右边是CE软件。
- 点击CE软件的左上角,将植物大战僵尸的进程添加到CE软件里。
- 开始游戏,随便选几个植物准备开始,记得选向日葵,然后开始游戏。(我演示的版本已经是玩通关了的)
- 在CE软件的数值处输入阳光的起始值:50。然后开始首次扫描。 扫描结果有很多条,很正常。 由于内存是动态分配的,每次分配的结果可能不一样,所以我这里是428条,你那里可能就不止这么点了。
- 在游戏界面种下一颗向日葵。(别告诉我你不知道怎么种)可以看到,此时的阳光数为0。 因为阳光数发生了改变,所以在CE数值框里输入0,然后回车继续搜索。(此时的搜索是在上一次搜索结果的基础上搜索的) 可以看到,这个时候只剩下3条了。(你的结果可能和我的不同,可能比我的还多或者还少)
- 再次使阳光数量变化。比如我这里捡到了一颗阳光。 现在变成25了,然后去CE里更改数值框里的值为25,再次搜索。 可以看到,现在只剩下一条地址了。(可能你的还有很多条,多尝试几次)
- 双击这个地址,下方就会出现详情。
- 双击当前值,将值改成9999。 此时看看游戏界面的阳光是否更改成功。 可以看到,游戏的阳光值也变成了9999。 而且容易发现,当游戏消耗阳光值时,CE软件的值也会随之改变。说明我们目前找到的这个地址存的就是阳光的数目。 因此,要想使阳光无限的话,锁定该值为9999即可。 在详情栏右键选择锁定。 可以看到,此时游戏内无论如何消耗阳光,阳光值也不会改变。 到此,无限阳光教程完成。
无CD功能实现
相信玩游戏的都知道CD是什么意思,通常指的是冷却时间,在这里指的当然是植物的冷却时间。玩过植物大战僵尸的都知道,不同植物的CD(即冷却时间)是不同的,有些好用的植物,冷却时间却长到怀疑人生,因此,嗯,教你如何使用CE解决无CD的效果!
思想
找到该植物CD所在内存地址,然后修改内存地址的值,使软件运行时访问的是自己修改后的值。
提示
这里需要注意的一点是,植物大战僵尸游戏有一个特点,植物的CD值在植物可选择时(也就是亮着时)是为0的,而在不可选择(也就是暗着时),是以一定的速度递增的。当增大到一定数值后,将重新赋值为0。
其实步骤还是和无限阳光一样的道理,我们只需要找到植物CD所在的地址就可以了。但是需要注意的是,此时我们搜索的模式会比无限阳光的模式丰富一些。
步骤
- 由于刚才说到,植物在可选择的时候,初始CD值为0,因此,我们首先在CE软件里搜索0试试看。嗯,好多好多条。
- 将我们要修改的植物种下。我这里选的是寒冰射手。 可以看到,选下后,寒冰射手就在暗色状态(即恢复状态)。此时,将CE的扫描类型更改为变化值,然后再次扫描。(因为此时寒冰射手正在恢复,即CD值有变化,肯定不是0了) 再次扫描后结果比第一次少了很多发现没有? 趁着寒冰射手还在恢复状态下,多扫描几次。(此时最好是继续游戏后立即“再次扫描”) 当寒冰射手恢复完之后,将扫描类型改为精准数值,并将值改为0,再次扫描。 多继续游戏,然后多扫描几次,等结果趋于稳定的时候,我们就可以再次种下一次植物试试了。 若最后出现总是不能变成一个地址,那么就选中该植物,不种下,看看CE结果中的值有什么变化。可以看到,此时只有最后一个还是0,而前三个的当前值都已经变化了。由于前面说过,植物大战僵尸的CD值,只有当植物种下的时候,才不为0,因此可以确定,最后一个才是真正的CD地址。
- 双击最后一个,然后修改当前值为1000。
- 鼠标右键锁定该地址的值。
- 此时,在游戏界面进行测试,看看是否还需要冷却。 可以看到,此时种植寒冰射手已经不需要冷却时间了!
总结
按道理教程到这里应该结束了,但是应该还是总结一下知识点。
软件运行时会将数据暂时存在内存中,当软件结束时,所存的数据就会随着软件的结束而销毁。本次教程所使用的的破解方法,就是修改了软件存储在内存中的数据,从而达到游戏里某种目的的效果。
虽然看似简单的几步操作,却包含了一些很重要的知识点,比如内存,地址,指针等。
实际电脑运行的过程中,并不会将值到处赋值,反而都是使用指针来作为引导。
通俗来讲,大家玩解密游戏时,钥匙的最终所在地是由前面一系列的线索得知。线索不会直接告诉你钥匙在哪,只会告诉你相关信息,例如:存有钥匙的纸条的所在地。
如果大家思维拓展一下,就应该可以很容易的联想到百度网盘的运营模式。为什么你在上传下载某些资源的时候很慢很慢,然而在转存别人分享给你资源的时候,却是非常快?为什么有时候你上传一些资源的时候是秒传?而上传自己拍摄的视频,照片却是很慢?
其实都是一样的道理,网盘的资源大多都是存在一起,而每个人的网站存的,都是一个指向该资源的指针。如果转存的时候,服务器端有相同的数据,则不需要重新上传,直接把服务器端的地址保存在你的网盘即可。而你自己拍摄的图片和视频,服务器端大多都是没有的,所以就需要你慢慢地上传才行。
这之间的知识还很多,一下说太多自己也会被整晕,因此今天的教程就到这里。
问题
相信尝试过的伙伴们或者学过类似知识的伙伴们都知道,此时游戏存储数据使用的地址,都是动态地址。通俗点讲,这种修改,只有在本局游戏才有效,下一局游戏就无效了!
是的,由于内存存储时使用的是动态地址,所以我们修改的,也只是本次所用的地址,而下次可能就不用这个地址了,这个时候再修改这个地址的值,也就不管用了,也就是说,下次游戏开始了,也要重复上述操作。嗯,挺麻烦的。
但是这个问题并不是无法解决的,不然你们平时玩游戏用的破解器,他们怎么做到的?具体如何实现,下次再讲吧。
原博客地址:陈默的小站
——2020/05/05 16:00