计算机对⼆进制数据的处理机制

计算机对⼆进制数据的处理机制

修改植物大战僵尸存储数据

二进制是什么?为什么采用二进制?

二进制(binary)在数学和数字电路中指以2为基数的记数系统,以2为基数代表系统是二进位制的。人类算数采用十进制,可能跟人类有十根手指有关。但是,机器又如何能识别十进制呢,机器只能识别电压的高低,所以采用了二进制。

任务要求

修改「植物大战僵尸」的二进制的存档文件,修改新玩家的关卡进度,修改游戏的金钱数量

任务需求

  • 操作系统:win10 64位
    win推荐hex editor neo,Linux或Mac使用vim的二进制编辑模式
  • 植物大战僵尸游戏下载链接
  • 二进制编辑器

任务过程

1.找到存储二进制数据的文件

首先,我的想法是想要改变玩家数据,肯定是存在玩家数据的二进制文件,但是一开始我寻找到的是下载植物大战僵尸的下载地址里找的userdata,然后发现里面只有.txt文件,然后细想能够修改数据的地方会是这么显而易见的地方嘛,显然不是这样子!

1.先打开c盘,打开查看,最后在隐藏的项目上打开隐藏的文件
计算机对⼆进制数据的处理机制_第1张图片
2.然后找到ProgramData→ PopCap Games→PlantsVsZombies→userdata(恭喜你找到了)
计算机对⼆进制数据的处理机制_第2张图片

2.游戏试玩,对比二进制数据

然后看着二进制代码,自然是一脸懵逼,但是想到可以通过对比数据来观察数据变化的逻辑,我就当即开始第一把植物大战僵尸(以下是我的发现)

1.users.dat是用来存储不同的用户,图中03指代的是三个用户
计算机对⼆进制数据的处理机制_第3张图片
2.users.dat中如图画圈的位置指代的增加或者删减用户的次数
在这里插入图片描述
3.针对不同的用户图中14和01正是指代游戏关卡数,并且当输入的十进制值大于32的时候显示6-
计算机对⼆进制数据的处理机制_第4张图片计算机对⼆进制数据的处理机制_第5张图片计算机对⼆进制数据的处理机制_第6张图片
4.修改金钱真的是煞费苦心,这个数据经过多次尝试和总结,图中 08 09 位置便是修改金钱的位置,但是如何计算出来的2400呢?(我设置的是16进制并且需要逆向输出)
十六进制 十进制
00 F0 → 15 *16=240 → 240 *10=2400(可知金钱的最小单位是10)

计算机对⼆进制数据的处理机制_第7张图片
计算机对⼆进制数据的处理机制_第8张图片
如果觉得十六进制转换麻烦的话,也不妨直接改变数据变成10进制,修改操作如下
计算机对⼆进制数据的处理机制_第9张图片

此时,我们也比较顺利地完成了修改新玩家的关卡进度,修改游戏的金钱数量的任务,但是我觉得如果每次去进行尝试然后观察分析得出结论,往往会有点草率和数据不一定准确的问题。所以我们需要进行更深入的了解,探索永无止境!

拓展任务 :使用二进制画一个图(带黑线的图像)

了解bmp位图编码存储方式

BMP取自位图Bitmap的缩写,也称为DIB(与设备无关的位图),是一种独立于显示器的位图数字图像文件格式。常见于微软视窗和OS/2操作系统,Windows GDI API内部使用的DIB数据结构与 BMP 文件格式几乎相同。概念难免让人枯燥

讲讲我做的时候的想法
首先我的脑子第一反应居然是去网上找空白的.bmp位图,显然啥也没找到还浪费很多时间
以下这是windows系统自带的画图3D 可以直接生成.bmp图片

为啥我会选择白和黑呢?没有对比,你就无法从中总结规律,不仅我们人是这样的,神经网络模型的训练也是如此

计算机对⼆进制数据的处理机制_第10张图片计算机对⼆进制数据的处理机制_第11张图片

从以下的图中我发现2点相似之处
第一.bmp前面的十六进制有很大的相似之处
第二白色对应的内容是FF,而黑色对应的是00,那接下来画图是不是很容易,不过要注意的是保存图像的像素宽度和高度尽量设置小一些,数据量比较少,处理起来比较方便
计算机对⼆进制数据的处理机制_第12张图片
计算机对⼆进制数据的处理机制_第13张图片
最后,我简单的画了一条黑色直线
计算机对⼆进制数据的处理机制_第14张图片
拓展位图文件头
计算机对⼆进制数据的处理机制_第15张图片

位图文件头

0-1:42 4D 为位图的标志。转换成 ASCII 码的话就是 BM。

2-5:(00 00 76 f6)H = 30,454 D(bytes),表示文件大小为30,454 bytes计算机对⼆进制数据的处理机制_第16张图片

6-9:(00 00 00 00)H为保留字。

10-13:(00 00 00 36)H = 54D,文件起始位置标志,表示文件从第54位开始。

自测

  • 110101010001转⼗六进制是多少? D51
  • 101011.101011的⼗进制数是多少? 43.671875
  • 常⻅的视频编码格式有哪些? .mp4 .avi
  • 65对应ASCII码是哪个字符? A

总结

我是一名大二本科生,我渴望去探索一些新奇的东西,所以我加入到c1实习生认证的队伍中,经历第一个任务,我觉得在做任务的同时我也学到了很多,是非常有意义的一件事情。
我来到csdn已经一年了,但是从来没有想过自己去写,从来都是看各种大佬的文章,但是我也想改变,就像《讨厌的勇气》这本书中我正缺乏的勇气。今天,我鼓起“勇气”把它记录下来

你可能感兴趣的:(C1实习认证)