今天也是又看到一个很有趣的新词汇"魔数"。
在计算机领域,魔数是指文件开头的固定几个字节,用来唯一标识文件类型。可以把它理解为文件的“身份证号”或“胎记”。
例如:
- PNG图片的开头固定是
89 50 4E 47(十六进制),对应ASCII字符是.PNG。 - JPEG图片的开头固定是
FF D8 FF。 - GIF图片的开头固定是
47 49 46 38(对应字符GIF8)。
而我今天遇到的bug一句话也就是:“没有根据文件魔数识别真实图片格式,导致文件导出失败。“
当然重点是前半句,这是一种安全检测手段,系统会打开文件的二进制数据,只看最前面的那几个字节,然后问:“这个魔数是PNG的吗?是JPEG的吗?”如果是,就认定它是这种格式。
那么为什么要做这件事呢?就好比黑客将一个可能的恶意执行文件(.exe)改名为美女.jpg给你,但图片查看器根本打不开他。而如果加上“魔数识别”工具,它一查看开头字节4D 5A(exe文件魔数),立马就能识别:“啊,这是个程序!不是图片”