vim打开一个文件之后可以通过:输入%! xxd 打开这个文件的16进制格式
文件的16进制格式:
- 操作:
- 2位16进制的数字所代表的10进制数字通过ascii代表一个字符;因此我们可以通过修改16进制上的数字来修改字符;此处我将62改为63;
- 输入:%! xxd -r将其还原回字符模式观察更改后的结果
查看结果:
- 用途:其实文件修改字符很简单可以直接修改没必要这样通过改变进制的数字去修改,但是很多复杂的比如bmp图片或者游戏存档就需要了
目的:
- 掌握常见的数据格式,懂得如何修改,习惯性查看2进制数据,锻炼敏感度
作业+作业完成步骤
-
下载植物大战僵尸,修改存档、关卡以及金币
- 首先找到这个存档在什么地方,哪个文件夹里;
-
存档的路径并不在你安装这个程序的目录下而是在系统规定的:C:\ProgramData\PopCap Games\PlantsVsZombies\userdata中查看
- 一般是以16进制来打开这个存档(因为1个16进制数=4个2进制数,看起来更直观)使用Hex Editor Neo没找到,或者直接在vscode下载Hex Editor插件一样能打开2进制文件。
- 发现04 05 06 为关卡存档数据:修改为21 00 00;即为十进制33,关卡4-3;(在windows里是倒着读的即00 21)如果想调到最后一关5-10;修改为32 00 00 ;
- 08 09 0A 0B为金币拥有数据:修改为22 22 00 00即10进制8738。金币数=十进制数值*10
- 结果:
-
每个人用二进制编辑器,手动编辑位图 把姓名中的一个字 写入图片
-
原理:
- bmp的2进制格式:
从30 06开始都代表图片颜色点缀数据 - 图中,每个数字都是十六进制,也就是 4 比特。每字节有 8 比特,也就是 2 个十六进制数字。每四个数字分为一组,占 2 字节。因此每行共 16 字节。
- bmp的2进制格式:
-
步骤:
- 按照bmp的格式去填写文件,然后记住刚开始颜色都是白色即从30 06开始都是ff,我们可以用不同于白色的颜色去填充,此处用黑色00形来成文字;并不是说00就代表黑色,是6位16进制才代表一个像素的颜色(并不是随便找连续的6位就能代表一个像素点),但必须是一段(七行)从头到尾(第一行的列数为06最后一行为05)按照顺序,每6位16进制数值为一个像素点;同理也不是随便找满足首尾列数条件的七行16进制代码就代表bmp图片中的一行,必须是从30 06开始往下按规则每取一段7行(第一行的列数为06最后一行为05)才算是bmp图片中的一行;
- 水平方向上的规律:从后往前读段,从前往后读行:
计算机读取颜色的时候是从后往前所以修改进制数字的时候也要从后往前;在bmp16进制代码中7行为bmp图片中的一行;也就是说最后一段所渲染的就是bmp图片的第一行;第一段所渲染的是bmp图片的最后一行,其余同理;而在每段即7行中读取的顺序还是从上到下,在图片中显示为从左到右; - 垂直方向的规律:每行上的6位表示的像素点(设该行为第一行)到往下/上的第七行平行的6位所表示的像素点和它在一条垂直线上。
-
结果: