挑战
有的玩家在玩游戏时,可能并不想⼀关⼀关地慢慢玩,⽽是希望可以直接跳到最后⼀关,或者从⾃⼰指定的关卡开始,⽐如 经典的《植物⼤战僵⼫》;再就是怎么能够「开挂」,得到更多的⾦钱、更⾼的属性、更强的道具,⽐如《三国志》系列。任何游戏都会保存玩家的进度和数据,不管是单机游戏还是⽹络游戏都是如此。如果玩家能够知道这些存档数据保存在哪⾥,并且还能随意修改存档信息,那是不是就能达到「开挂」的⽬的呢? 答案当然是肯定的,因为只要知晓计算机对⼆进制数据的处理机制,就能轻松做到这⼀点。
说明
- 了解⼆进制、⼗六进制对于计算机的意义
- 掌握⼆/七/⼋/⼗/⼗⼆/⼗六等多种数据进制间的转换
- 掌握如何在windows及linux中修改并保存⼆进制⽂件
内容
- 修改《植物⼤战僵⼫》的存档⽂件,将⼀个新⽤户的进度直接修改到5-2关,⾦钱(能量)直接修改到10000
- 修改植物大战僵尸内的文字提示信息以及植物的名称
一、任务实现工具:
游戏:植物大战僵尸中文版
下载链接:
链接: https://pan.baidu.com/s/1u7P2h4uquBAf2MSPvJb2Kw.
提取码:xhzy
十六进制编辑器:Hex Editor Neo
下载链接:
链接:https://pan.baidu.com/s/1HXnADxXHWrEtMGxJFWTuUA .
提取码:xhzy
二、任务实现过程:
前三个任务会用到十六进制编辑器来实现,在修改的的过程中涉及到的知识点为十进制数据与十六进制之间数据的相互转换。
PS:单机类游戏数据都是存储在本地,因此只要在本地找到存储数据的文件进行修改即可对游戏内的数据进行修改
在所有任务开始前首先在下载好的植物大战僵尸游戏中新注册一个账号
(在这里我起名为SJMDJGS【世纪末的架构师】)
1、修改关卡
修改关卡前首先要在本地找到存储游戏数据的文件
植物大战僵尸的数据文件一般都是存储在C盘中的ProgramData文件夹中
C:\ProgramData是个公用的被创建文件夹或文件存放的地方,这些文件夹或文件仅由创建者完整控制。打开ProgramData,可以看到很多和应用软件同名的文件夹,里面有一些软件运行,或者修复卸载时候调用的一些文件,生成的一些记录也存放在这里。默认是隐藏的,不可删除的
文件路径: C:\ProgramData\PopCap Games\PlantsVsZombies
来到这里以后会看到有两个文件夹,点击下方存储用户数据的userdata文件夹
点击进入存储用户数据的文件夹以后会发现有两个.dat格式的文件,其中user1.dat文件中存储着关卡数据和金币道具等信息
将user1.dat文件拖到Hex Editor Neo中,不难发现第四列存储的数字为1其余为0,所以进行是否第四列中的十六进制数据代表着关卡的信息
在游戏中通关到第三关以后再将user1.dat文件拖入Hex Editor Neo中会发现之前第四列下的数据已经由最初的01变成了03,因此说明第四列下的十六进制数据是用来描述关卡情况
在植物大战僵尸游戏中每10小关为一个大关,所以要将关卡修改到第5-2关对应的十进制数据为42,将其转换为十六进制数据为2a,在Hex Editor Neo中将03改为2a后重新进入游戏会发现关卡跳到了第5-2关。
2、修改金币
在修改了关卡以后会发现游戏界面内自动出现了商店等组件,此时我们点击商店以后会发现金币为0,现在开始修改金币
当通关获得一定数量的金币后会发现第八列下的数据发生了变化,因此猜测第八列下的十六进制数据为记录金币数量的信息,将这里的数据修改为ff,重新进入游戏查看金币的数量是否有发生变化
重新进入游戏后发现金币数量发生了变化并且为2550,因为ff对应的十进制数据为255,因此证明植物大战僵尸中金币的规则为十六进制对应的十进制数据 * 10
因为游戏中10000金币对应的十进制数据为1000,1000(10)对应的十六进制数据为3e8,在Hex Editor Neo中将第八列和第九列中的数据分别改为3e、80后重新进入游戏会发现金币的数量并不是预想的10000,而是328300
由此猜测第九列的数据为高位,并不是按照惯性思维从第八列开始依次排列,重新在Hex Editor Neo中把第八列和第九列的数据分别改为e8、03,再次进入游戏后发现商城中金币数量变为了10000
3、修改用户名
之前修改关卡和金币数量时都是在user1.dat中修改,修改用户名则是在另一个users.dat文件中进行修改,将users.dat拖入到Hex Editor Neo中会发现从第08列到第0e列中的对应的十六进制数据转换为十进制数据以后的值恰好对应ASCII码中的SJMDJGS(世纪末的架构师),与游戏中的用户名对应,因此假设第08列到第0e列的数据对应为用户名,将第08列到第0e列的数据分别修改为46(16)(对应十进制数据为70)、58(16)(对应十进制数据为88)、44(16)(对应十进制数据为68)、48(16)(对应十进制数据为72)、4c(16)(对应十进制数据为77)、52(16)(对应十进制数据为82)、第0e列改为00,如果假设正确重新进入游戏后用户的名称则修改为FXDHLR(飞翔的荷兰人)
4、修改局内文字信息
修改局内文字信息不需要用到十六进制编辑器,只需要找到游戏的安装路径,找到其中的properties文件夹,修改该文件夹中的LawnStrings.txt文件即可
在这里我使用的是notepad++来修改文本文件,只用记事本也可以完成编辑。以修改豌豆射手的数据为例,在游戏内的图鉴中检查信息是否修改成功
总结
任务到这里就全部结束了,修改游戏数据在曾经是想都不敢想的,在刚开始看到任务时一度怀疑自己能否完成这样的任务,便心一狠牙一咬踏上了完成任务的旅程,在完成任务的过程中自己才意识到之前自己被自己想象的困难打败了,真正接触到之后并没有想象中的困难。在完成任务的过程中熟悉了数据进制之间的转换,也明白了在计算机中如何保存二进制文件,更重要的是信心上和动手实践能力的提高。
还记着那句,人的一生中最辉煌的一天,并不是功成名就的那一天,而是在悲叹和绝望中产生向上的力量,并勇敢去直面和接受挑战的这一天。这是最大的转折点,当你选择去直面挑战时,就已经注定了成功!
转载:https://blog.csdn.net/qq_48455576/article/details/115415930