常见文件头的hex值
目录
常见文件头的hex值
下面我将为你提供一份详细、专业且实用的常见文件头标识(Magic Number)指南。
一、什么是文件头标识(Magic Number)?
-
定义:文件头标识是位于文件开头的一系列特定字节(通常用16进制表示)。它就像一个“数字指纹”或“签名”,用于唯一地标识该文件的类型和格式。
-
作用:
-
告诉操作系统如何正确处理文件:当您双击一个文件时,系统会读取其文件头(而非文件扩展名)来决定调用哪个程序来打开它。
-
数字取证与数据恢复:当文件系统损坏、文件被删除或扩展名被恶意修改时,通过扫描磁盘的原始数据(十六进制值)来寻找文件头,是恢复和识别文件的主要手段。
-
恶意软件分析:分析可疑文件时,首先查看其文件头可以判断其真实类型(例如,一个看似
.jpg的文件可能实际上是.exe可执行文件)。 -
网络安全:WAF(Web应用防火墙)和入侵检测系统(IDS)可以通过检查文件头来过滤非法文件上传,防止 Webshell 等攻击。
-
-
重要提示:文件扩展名(如 .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 | 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码。 |
三、如何查看和实践?
-
使用十六进制编辑器(Hex Editor):
-
推荐工具:HxD (Windows), 010 Editor (跨平台, 专业), Bless Hex Editor (Linux), WinHex (Windows, 专业)。
-
方法:用这些工具打开任何文件,你就能直接看到其最原始的十六进制字节。对照上表进行验证。
-
-
使用命令行工具(Linux/MacOS):
-
file命令:file example.jpg这个命令的原理就是读取并分析文件头信息。 -
xxd或hexdump命令:xxd example.jpg | head -n 5可以以十六进制形式显示文件的前几行。
-
-
在线工具:
- 搜索 “online hex editor” 或 “file signature lookup”,有很多网站可以上传文件或直接输入 hex 值进行识别。