常见文件头的hex值

作者:Vesper Vei
4 分钟阅读

目录

  1. 常见文件头的hex值
    1. 一、什么是文件头标识(Magic Number)?
    2. 二、常见文件类型的文件头标识详解
    3. 三、如何查看和实践?

常见文件头的hex值

下面我将为你提供一份详细、专业且实用的常见文件头标识(Magic Number)指南。

一、什么是文件头标识(Magic Number)?

  1. 定义:文件头标识是位于文件开头的一系列特定字节(通常用16进制表示)。它就像一个“数字指纹”或“签名”,用于唯一地标识该文件的类型和格式。

  2. 作用

    • 告诉操作系统如何正确处理文件:当您双击一个文件时,系统会读取其文件头(而非文件扩展名)来决定调用哪个程序来打开它。

    • 数字取证与数据恢复:当文件系统损坏、文件被删除或扩展名被恶意修改时,通过扫描磁盘的原始数据(十六进制值)来寻找文件头,是恢复和识别文件的主要手段。

    • 恶意软件分析:分析可疑文件时,首先查看其文件头可以判断其真实类型(例如,一个看似 .jpg 的文件可能实际上是 .exe 可执行文件)。

    • 网络安全:WAF(Web应用防火墙)和入侵检测系统(IDS)可以通过检查文件头来过滤非法文件上传,防止 Webshell 等攻击。

  3. 重要提示文件扩展名(如 .txt, .exe, .jpg)是完全可随意修改的,它不代表文件的真实类型。而文件头位于文件内部,修改它会导致文件损坏,因此更具可靠性。


二、常见文件类型的文件头标识详解

下面是一个分类整理的表格,包含了最常见和最关键的文件类型。偏移量通常从文件开头(0x0)算起

1. 图片格式 (Image Formats)

文件格式常见扩展名文件头 (16进制)文件尾 (16进制)备注
 JPEG/JFIF  .jpg.jpeg  FF D8 FF E0  FF D9 最常见的图片格式。开头 FF D8 是JPEG开始的标志,FF E0 是JFIF应用段的标识。
 JPEG/Exif  .jpg.jpeg  FF D8 FF E1  FF D9 由数码相机创建,FF E1 表示是Exif应用段。
 PNG  .png  89 50 4E 47 0D 0A 1A 0A - 50 4E 47 是字母 “PNG” 的ASCII码,非常容易识别。
 GIF  .gif  47 49 46 38  00 3B  47 49 46 38 是 “GIF89a” 或 “GIF87a” 的开头部分。
 BMP  .bmp  42 4D - 42 4D 是字母 “BM” 的ASCII码。
 WEBP  .webp  52 49 46 46 ?? ?? ?? ?? 57 45 42 50 - 52 49 46 46 是 “RIFF”,57 45 42 50 是 “WEBP”。?? 代表文件大小字段。
 TIFF  .tif.tiff  49 49 2A 00 (小端) 或 4D 4D 00 2A (大端)-有两种字节序,开头标识也不同。

2. 压缩文档格式 (Archive Formats)

文件格式常见扩展名文件头 (16进制)文件尾 (16进制)备注
 ZIP  .zip  50 4B 03 04 - 50 4B 是字母 “PK” 的ASCII码(源于创始人Phil Katz)。这也是 .docx.xlsx.pptx 等Office文档的文件头,因为它们本质上是ZIP压缩包。
 RAR  .rar  52 61 72 21 1A 07 00 (RAR 4.x)- 52 61 72 21 是 “Rar!” 的ASCII码。RAR 5.0 格式开头为 52 61 72 21 1A 07 01 00
 7Z  .7z  37 7A BC AF 27 1C - 37 7A 是 “7z” 的ASCII码。
 GZIP  .gz  1F 8B -常用于Linux系统和网络传输压缩。
TAR .tar 无统一文件头-TAR本身没有魔法数字,通常通过内部结构识别。

3. 可执行文件格式 (Executables)

文件格式常见扩展名文件头 (16进制)备注
 Windows PE  .exe.dll.sys  4D 5A  4D 5A 是字母 “MZ” 的ASCII码(源于MS-DOS开发者Mark Zbikowski)。现代PE文件在 MZ 头部之后还有一个 PE 头部(50 45 00 00)。
 ELF (无扩展名) 7F 45 4C 46  7F 后跟 45 4C 46,即 “ELF” 的ASCII码。是Linux/Unix下的标准可执行格式。
 Mach-O (无扩展名) FE ED FA CE (32位) FE ED FA CF (64位) CA FE BA BE (通用二进制)macOS和iOS下的可执行格式。

4. 文档与文本格式 (Documents & Text)

文件格式常见扩展名文件头 (16进制)备注
 PDF  .pdf  25 50 44 46  25 50 44 46 是 “%PDF” 的ASCII码。
 Microsoft Office  .doc.xls.ppt (旧版本) D0 CF 11 E0 A1 B1 1A E1 旧版OLE复合文档格式,所有旧版Office文档共享此头。
 Microsoft Office  .docx.xlsx.pptx (新版本) 50 4B 03 04 如前所述,它们就是ZIP文件,所以文件头与ZIP相同。
 UTF-8 BOM  .txt 等 EF BB BF  字节顺序标记(BOM),不是必须的,但有时会出现在文件开头标识编码。

5. 音视频格式 (Audio & Video)

文件格式常见扩展名文件头 (16进制)备注
 MP3  .mp3  FF FB 或 FF F3 或 49 44 33 MP3文件可能有ID3标签(49 44 33 即 “ID3”),或者直接以帧同步信号开始(FF F?)。
 WAV  .wav  52 49 46 46 ?? ?? ?? ?? 57 41 56 45  52 49 46 46 是 “RIFF”,57 41 56 45 是 “WAVE”。
 AVI  .avi  52 49 46 46 ?? ?? ?? ?? 41 56 49 20  52 49 46 46 是 “RIFF”,41 56 49 20 是 “AVI ”。
 MP4  .mp4  00 00 00 18 66 74 79 70 69 73 6F 6D 或 00 00 00 20 66 74 79 70 69 73 6F 6D开头是长度字段,但关键看 66 74 79 70,即 “ftyp”。
 FLV  .flv  46 4C 56 01  46 4C 56 是 “FLV” 的ASCII码。

三、如何查看和实践?

  1. 使用十六进制编辑器(Hex Editor)

    • 推荐工具:HxD (Windows), 010 Editor (跨平台, 专业), Bless Hex Editor (Linux), WinHex (Windows, 专业)。

    • 方法:用这些工具打开任何文件,你就能直接看到其最原始的十六进制字节。对照上表进行验证。

  2. 使用命令行工具(Linux/MacOS)

    • file 命令:file example.jpg 这个命令的原理就是读取并分析文件头信息。

    • xxd 或 hexdump 命令:xxd example.jpg | head -n 5 可以以十六进制形式显示文件的前几行。

  3. 在线工具

    • 搜索 “online hex editor” 或 “file signature lookup”,有很多网站可以上传文件或直接输入 hex 值进行识别。

关系图谱

Loading graph...