共计 1628 个字符,预计需要花费 5 分钟才能阅读完成。
计算机对⼆进制数据的解决机制
批改动物大战僵尸存储数据
二进制是什么?为什么采纳二进制?
二进制(binary)在数学和数字电路中指以 2 为基数的记数零碎,以 2 为基数代表零碎是二进位制的。人类算数采纳十进制,可能跟人类有十根手指无关。然而,机器又如何能辨认十进制呢,机器只能辨认电压的高下,所以采纳了二进制。
工作要求
批改「动物大战僵尸」的二进制的存档文件,批改新玩家的关卡进度,批改游戏的金钱数量
工作需要
- 操作系统:win10 64 位
win 举荐 hex editor neo,Linux 或 Mac 应用 vim 的二进制编辑模式 - 动物大战僵尸游戏下载链接
- 二进制编辑器
工作过程
1. 找到存储二进制数据的文件
首先,我的想法是想要扭转玩家数据,必定是存在玩家数据的二进制文件,然而一开始我寻找到的是下载动物大战僵尸的下载地址里找的 userdata,而后发现外面只有.txt 文件,而后细想可能批改数据的中央会是这么不言而喻的中央嘛,显然不是这样子!
1. 先关上 c 盘,关上查看,最初在暗藏的我的项目上关上暗藏的文件
2. 而后找到 ProgramData→ PopCap Games→PlantsVsZombies→userdata(祝贺你找到了)
#### 2. 游戏试玩,比照二进制数据
而后看着二进制代码,天然是一脸懵逼,然而想到能够通过比照数据来察看数据变动的逻辑,我就当即开始第一把动物大战僵尸(以下是我的发现)
1.users.dat 是用来存储不同的用户,图中 03 指代的是三个用户
2.users.dat 中如图画圈的地位指代的减少或者删减用户的次数
3. 针对不同的用户图中 14 和 01 正是指代游戏关卡数,并且当输出的十进制值大于 32 的时候显示 6 -
4. 批改金钱真的是殚精竭虑,这个数据通过屡次尝试和总结,图中 08 09 地位便是批改金钱的地位,然而如何计算出来的 2400 呢?(我设置的是 16 进制并且须要逆向输入)
十六进制 十进制
00 F0 → 15 *16=240 → 240 *10=2400(可知金钱的最小单位是 10)
如果感觉十六进制转换麻烦的话,也无妨间接扭转数据变成 10 进制,批改操作如下
此时,咱们也比较顺利地实现了批改新玩家的关卡进度,批改游戏的金钱数量的工作,然而我感觉如果每次去进行尝试而后察看剖析得出结论,往往会有点粗率和数据不肯定精确的问题。所以咱们须要进行更深刻的理解,摸索永无止境!
拓展工作:应用二进制画一个图(带黑线的图像)
理解 bmp 位图编码存储形式
BMP 取自位图 Bitmap 的缩写,也称为 DIB(与设施无关的位图),是一种独立于显示器的位图数字图像文件格式。常见于微软视窗和 OS/ 2 操作系统,Windows GDI API 外部应用的 DIB 数据结构与 BMP 文件格式简直雷同。概念不免让人干燥
讲讲我做的时候的想法
首先我的脑子第一反馈竟然是去网上找空白的.bmp 位图,显然啥也没找到还节约很多工夫
以下这是 windows 零碎自带的画图 3D 能够间接生成.bmp 图片
为啥我会抉择白和黑呢?没有比照,你就无奈从中总结法则,不仅咱们人是这样的,神经网络模型的训练也是如此
从以下的图中我发现 2 点相似之处
第一.bmp 后面的十六进制有很大的相似之处
第二红色对应的内容是 FF, 而彩色对应的是 00,那接下来画图是不是很容易,不过要留神的是 保留图像的像素宽度和高度尽量设置小一些,数据量比拟少,解决起来比拟不便
最初,我简略的画了一条彩色直线
拓展 位图文件头
位图文件头
0-1:42 4D 为位图的标记。转换成 ASCII 码的话就是 BM。
2-5:(00 00 76 f6)H = 30,454 D(bytes),示意文件大小为 30,454 bytes
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