一、前言
在CTF竞赛的MISC(杂项)方向中,文件头分析是破解隐写术、文件修复、数据恢复等题目的核心技能。文件头(File Header)是文件开端的特定字节序列,用于标识文件类型和格式。本文将从实战角度总结常见文件头特征、分析技巧及解题套路。
二、文件头核心价值
-
文件类型识别:快速判断被篡改扩展名的文件真实类型
-
隐写分析:检测嵌套文件、拼接文件、加密文件
-
数据恢复:修复被破坏的文件结构
-
流量分析:在PCAP包中提取关键文件
三、常见文件头速查表
以下为CTF高频出现的文件头及其十六进制特征:
文件类型 | 扩展名 | 文件头(HEX) | ASCII可见字符 |
---|---|---|---|
PNG | .png | 89 50 4E 47 0D 0A 1A 0A | ‰PNG.... |
JPEG | .jpg/.jpeg | FF D8 FF E0 | ÿØÿà |
GIF | .gif | 47 49 46 38 | GIF8 |
ZIP | .zip | 50 4B 03 04 | PK.. |
RAR | .rar | 52 61 72 21 1A 07 00 | Rar!... |
25 50 44 46 2D | %PDF- | ||
BMP | .bmp | 42 4D | BM |
ELF | 无 | 7F 45 4C 46 | .ELF |
PE | .exe/.dll | 4D 5A | MZ |
四、高阶文件结构特征
1. 复合文件类型
-
ZIP嵌套文件:
50 4B 03 04
后紧跟[Content_Types].xml
-> 可能为DOCX/XLSX等Office文档 -
PDF隐写:
%PDF-
后查找/ObjStm
(对象流)或/EmbeddedFile
2. 内存取证类
-
内存镜像:
4D 45 4D 4F 52 59 44 55 4D 50
(MEMORYDUMP) -
磁盘镜像:
45 46 49 20
(EFI分区) /4B 44 4D 20
(KDM加密镜像)
3. 流量分析场景
-
HTTP传输文件:查找
Content-Type
与文件头是否匹配 -
Base64隐写:解码后验证文件头有效性
五、实战分析技巧
案例1:文件头修复
# 题目给出损坏的flag.jpg,使用hexeditor修复 00000000: 47 49 46 38 00 00 00 00 # 错误文件头(实际是GIF) # 修改前4字节为FF D8 FF E0 → JPEG文件头
案例2:嵌套文件提取
# 使用binwalk自动扫描 $ binwalk -Me suspicious_file # 手动检测ZIP文件头(PK)偏移量: $ hexdump -C file | grep "50 4b 03 04"
案例3:隐写术检测
# Python检测多个文件头 signatures = { b'\xFF\xD8\xFF': 'jpg', b'\x89PNG': 'png', b'GIF8': 'gif' } with open('mystery_file', 'rb') as f: header = f.read(10) for sig in signatures: if header.startswith(sig): print(f"Detected: {signatures[sig]}")