挑战
有的玩家在玩游戏时,可能并不想⼀关⼀关地慢慢玩,⽽是希望可以直接跳到最后⼀关,或者从⾃⼰指定的关卡开始,⽐如 经典的《植物⼤战僵⼫》;再就是怎么能够「开挂」,得到更多的⾦钱、更⾼的属性、更强的道具,⽐如《三国志》系列。 任何游戏都会保存玩家的进度和数据,不管是单机游戏还是⽹络游戏都是如此。如果玩家能够知道这些存档数据保存在哪 ⾥,并且还能随意修改存档信息,那是不是就能达到「开挂」的⽬的呢? 答案当然是肯定的,因为只要知晓计算机对⼆进制数据的处理机制,就能轻松做到这⼀点。
说明
- 了解⼆进制、⼗六进制对于计算机的意义
- 掌握⼆/七/⼋/⼗/⼗⼆/⼗六等多种数据进制间的转换
- 掌握如何在windows及linux中修改并保存⼆进制⽂件
内容
- 修改《植物⼤战僵⼫》的存档⽂件,将⼀个新⽤户的进度直接修改到5-2关,⾦钱(能量)直接修改到10000
资源(仅供参考,部分资源在外⽹)
书籍
- 《程序员修炼之道》
- 《程序员的职业素养》
链接
- 进制转换
- 编码
- 维基百科:https://zh.wikipedia.org/wiki/编码
- 维基百科:https://zh.wikipedia.org/wiki/字符编码
- Github:http://cenalulu.github.io/linux/character-encoding/
- 维基百科:https://zh.wikipedia.org/wiki/ASCII
- 维基百科:https://en.wikipedia.org/wiki/Percent-encoding
- 维基百科:https://zh.wikipedia.org/wiki/统⼀资源定位符
- 维基百科:https://en.wikipedia.org/wiki/Internationalization_and_localization
⾃测
- 110101010001转⼗六进制是多少?
- 101011.101011的⼗进制数是多少?
- 常⻅的视频编码格式有哪些?
- 65对应ASCII码是哪个字符?
任务完成过程
游戏请支持正版,切勿修改,小心封神榜
绪:
刚开始看到这个任务的时候,说实话还是有点懵的,毕竟没修改过PC游戏。
但是作为一个玩游戏不花一分钱,道具装备肝我可以,肝不过我就改,要钱绝对不行的资深手游豹子头玩家,手游还是修改过不少地,
根据用MT管理器和GG修改手游的经验,单机类游戏数据都是存储在本地,那么只要找到存储数据的文件进行修改就可以了,PC端也不例外
从百度下载好植物大战僵尸到本地安装之后,首先查看了它安装路径下的主要文件夹
尽管有很多看不懂,但是我们通过名字就可以大致的了解到各个文件的用处
通过文件名userdata
,就不得不让人注意,明显是存储用户数据的文件夹
那么你以为这就是我们要找的那个文件吗?很遗憾,不是。
那么真正存用户数据的文件在哪里呢?
手机app存储分为缓存和存储空间,那么类似的PC有个ProgramData
文件。
这里就需要介绍下系统文件夹ProgramData
文件:
ProgramData属于电脑C盘的一个系统文件夹,是个公用的被创建文件夹或文件存放的地方,是由Win系统自动创建的,按该文件夹的命名来看就是程序数据的意思,可以想像得到该文件夹就是储存程序数据用的,不管是Win系统本身自带的程序还是第三方程序,当我们在Win旗舰版中安装了一些软件后,我们打开打开ProgramData,可见很多和应用软件同名的文件夹,里面有一些软件运行,或者修复卸载时候调用的文件,生成的一些记录 很多文件夹默认是隐藏的,我们需要在的文件夹选项里将查看隐藏文件勾选才可以看到
1.修改用户名
首先我们启动PlantsVsZombies.exe
,进入游戏,创建新用户Test
,
创建完之后退出游戏,在C:\ProgramData\PopCap Games\PlantsVsZombies
路径下我们可以看到只有两个文件夹
进入userdata
文件夹,可以看到两个文件user1.dat,users.dat
,目测它存储的就是Test
用户的数据
我们先查看users.dat
文件,把users.dat
文件用Hex Editor Neo
打开
我们可以看到在00000000x08—00000000x0b的数据是54H,65H,73H,74H,再对比右侧队列显示的Test,知道ASCLL编码的我们也可以知道54H,65H,73H,74H分别是Test的ASCLL码。我们很容易猜出00000000x08—00000000x0b对应的就是名字,猜不如实践下,我们改为31H,32H,30H,00H,
我们再进入游戏
此时用户名显示的120
,用户名已经修改成功
接下来我们修改下关卡
2.修改关卡
由于是新用户,所以显示“LET'S GO 开始冒险吧
”
和修改用户名一样,我们把users1.dat
文件用Hex Editor Neo
打开,因为我们完全有理由推测user1.dat
存储的就是Test
用户的数据,(改了用户名就是120
用户)
打开之后,我们只看到00000000x00
和00000000x04
有数据,那么我们怎么知道我们应该修改哪个呢,经常修改手游的伙伴知道,我们可以通过让数值不断的变化,然后确定唯一值,唯一值就是我们要找的,同理,我们进入游戏先玩几局,看看有什么变化
很轻松通过第三关,解锁了坚果,我们再把users1.dat
文件用Hex Editor Neo
打开,
可以看到有一个00000000x04
改变了,而且好巧不巧,刚好对应我们的关数,无脑的将它修改为0b
,
修改完之后我们进入游戏
此时关卡已经变成2-1
,说明我们修改成功了,也可以推出一轮有10关
接下来修改金币,先把关卡改大点,解锁商店
3.修改金币
关卡改为4-6
此时进入商店,显示金币为0
套路和改关卡一样,先让金币数量发生改变,
通关之后金币变为320,(夜晚模式不好玩)。
退出游戏,我们继续把users1.dat
文件用Hex Editor Neo
打开,
可以看到00000000x08
改变了,变为20H
,换成十进制,正好是32,和金币数量的百位十位一样,那么是不是我们要找的金币呢,改一下就知道了。将00000000x08
的20H
改为ff
保存,进入游戏。
可以看到金币变为2550了,而我们修改的ffH
是255,可以得出00000000x08
正是我们要找的金币,游戏金币数量和00000000x08
的值是1比10。
那么如何修改到10000金币呢,根据上方的结论,我们只需要将00000000x08的值修改为1000即可,1000换成16进制为3E8H
我们将00000000x08
修改为E8H
,将00000000x08
修改为03H
,保存进入游戏
进入游戏可以看到金币刚刚是10000
,而且也是可以买东西的,那么金币就修改好了
那么修改金币需要注意的是数值的高位对应地址的高位,即高对高,低对低原则。这就是为什么把3E8H
分为03H
和E8H
;
4.修改植物僵尸信息
首先找到游戏安装路径
在植物大战僵尸安装路径下找到properties
文件并打开
properties
文件下可以看到有4个文件,我们选择第一个文件LawnStrings.txt
打开
在文件里面进行修改即可,保存,进入游戏就可以了
收获
- 首先当然是让我知道了不仅手游可以改,端游也可以改,但是请支持正版好吧,作弊不提倡哦
- 让学到的理论知识,即微机原理学到的数值的高位对应地址的高位,即高对高,低对低原则得到了验证