CTF 常见文件头标识速查手册¶
文件头(File Header)也称为魔术字节(Magic Bytes)或文件签名(File Signature),是文件开头的特定字节序列,用于识别文件类型。
图像文件¶
JPEG / JPG¶
文件头: FF D8 FF
文件尾: FF D9
偏移: 0x00
ASCII: ÿØÿ
扩展名: .jpg, .jpeg, .jpe, .jfif
用途: 最常见的图片隐写载体
变体:
FF D8 FF E0- JFIF 格式FF D8 FF E1- EXIF 格式(相机拍摄)FF D8 FF E2- ICC 配置文件FF D8 FF DB- Samsung D500
PNG¶
文件头: 89 50 4E 47 0D 0A 1A 0A
文件尾: 49 45 4E 44 AE 42 60 82 (IEND块)
偏移: 0x00
ASCII: .PNG....
扩展名: .png
用途: LSB隐写、数据块隐写、高度宽度修改
关键数据块:
IHDR(49 48 44 52) - 图像头部PLTE(50 4C 54 45) - 调色板IDAT(49 44 41 54) - 图像数据IEND(49 45 4E 44) - 图像结束
GIF¶
文件头: 47 49 46 38 (37|39) 61
文件尾: 00 3B
偏移: 0x00
ASCII: GIF87a 或 GIF89a
扩展名: .gif
用途: 动画帧隐写、注释块隐写
版本:
GIF87a- 1987年标准GIF89a- 1989年标准(支持透明和动画)
BMP (Bitmap)¶
文件头: 42 4D
偏移: 0x00
ASCII: BM
扩展名: .bmp, .dib
用途: LSB隐写、像素数据修改
其他BMP变体:
BA- OS/2 Bitmap ArrayCI- OS/2 Color IconCP- OS/2 Color PointerIC- OS/2 IconPT- OS/2 Pointer
TIFF¶
文件头: 49 49 2A 00 (Little Endian)
或 4D 4D 00 2A (Big Endian)
偏移: 0x00
ASCII: II*. 或 MM.*
扩展名: .tif, .tiff
用途: 元数据隐写、多页图像
WEBP¶
文件头: 52 49 46 46 xx xx xx xx 57 45 42 50
偏移: 0x00
ASCII: RIFF....WEBP
扩展名: .webp
用途: 现代Web图片格式
ICO (Icon)¶
文件头: 00 00 01 00
偏移: 0x00
扩展名: .ico
用途: Windows图标文件
SVG¶
文件头: 3C 3F 78 6D 6C 或 3C 73 76 67
ASCII: <?xml 或 <svg
扩展名: .svg
用途: 矢量图形、XML注入
压缩文件¶
ZIP¶
文件头: 50 4B 03 04 (本地文件头)
或 50 4B 05 06 (中央目录结束)
或 50 4B 07 08 (跨区文件)
文件尾: 50 4B 05 06
偏移: 0x00
ASCII: PK..
扩展名: .zip, .jar, .apk, .docx, .xlsx, .pptx
用途: 最常见的隐藏载体、伪加密、CRC爆破
ZIP签名详解:
50 4B 03 04- Local File Header50 4B 01 02- Central Directory File Header50 4B 05 06- End of Central Directory
RAR¶
文件头: 52 61 72 21 1A 07 00 (RAR 1.5+)
或 52 61 72 21 1A 07 01 00 (RAR 5.0+)
偏移: 0x00
ASCII: Rar!....
扩展名: .rar
用途: 密码爆破、卷标隐写
7Z¶
文件头: 37 7A BC AF 27 1C
偏移: 0x00
ASCII: 7z¼¯'.
扩展名: .7z
用途: 高压缩率、分卷压缩
GZIP¶
文件头: 1F 8B 08
偏移: 0x00
扩展名: .gz, .tar.gz, .tgz
用途: Linux压缩、固件分析
BZIP2¶
文件头: 42 5A 68
偏移: 0x00
ASCII: BZh
扩展名: .bz2, .tar.bz2, .tbz2
用途: 高压缩率、固件分析
TAR¶
文件头: 75 73 74 61 72 (在偏移257处)
偏移: 0x101 (257)
ASCII: ustar
扩展名: .tar
用途: Unix归档、结合gzip/bzip2
XZ¶
文件头: FD 37 7A 58 5A 00
偏移: 0x00
ASCII: .7zXZ.
扩展名: .xz, .tar.xz
用途: LZMA压缩
LZ¶
文件头: 4C 5A 49 50
ASCII: LZIP
扩展名: .lz
CAB (Cabinet)¶
文件头: 4D 53 43 46
ASCII: MSCF
扩展名: .cab
用途: Windows安装包
文档文件¶
PDF¶
文件头: 25 50 44 46 2D
文件尾: 25 25 45 4F 46 或 0D 0A 25 25 45 4F 46 0D 0A
偏移: 0x00
ASCII: %PDF-
扩展名: .pdf
用途: 隐藏对象流、注释隐写、JavaScript
版本标识:
%PDF-1.0到%PDF-2.0
DOC (MS Word 97-2003)¶
文件头: D0 CF 11 E0 A1 B1 1A E1
偏移: 0x00
扩展名: .doc, .xls, .ppt, .msg, .msi
用途: OLE复合文档、宏病毒
DOCX (Office Open XML)¶
文件头: 50 4B 03 04 (实际是ZIP)
内部标识: word/document.xml
偏移: 0x00
扩展名: .docx, .xlsx, .pptx
用途: XML注入、解压缩分析
RTF (Rich Text Format)¶
文件头: 7B 5C 72 74 66 31
ASCII: {\rtf1
扩展名: .rtf
用途: 富文本、嵌入对象
XML¶
文件头: 3C 3F 78 6D 6C
ASCII: <?xml
扩展名: .xml, .svg, .rss
用途: 数据交换、配置文件
HTML¶
文件头: 3C 21 44 4F 43 54 59 50 45 20 68 74 6D 6C
或 3C 68 74 6D 6C
或 3C 68 65 61 64
ASCII: <!DOCTYPE html 或 <html 或 <head
扩展名: .html, .htm
用途: Web页面、XSS
音视频文件¶
MP3¶
文件头: FF FB (MPEG-1 Layer 3)
或 49 44 33 (ID3v2)
偏移: 0x00
ASCII: ÿû 或 ID3
扩展名: .mp3
用途: 音频隐写、ID3标签隐写
ID3标签:
ID3v1- 文件末尾128字节ID3v2- 文件开头
MP4 / M4A / MOV¶
文件头: 00 00 00 (14|18|1C|20) 66 74 79 70
偏移: 0x00
ASCII: ....ftyp
扩展名: .mp4, .m4a, .m4v, .mov, .3gp
用途: 视频隐写、元数据
ftyp类型:
ftypisom- ISO Base Mediaftypmp42- MPEG-4 Part 2ftypM4A- Apple iTunes AACftypqt- QuickTime
AVI¶
文件头: 52 49 46 46 xx xx xx xx 41 56 49 20
偏移: 0x00
ASCII: RIFF....AVI
扩展名: .avi
用途: 视频隐写、RIFF结构
WAV (Wave Audio)¶
文件头: 52 49 46 46 xx xx xx xx 57 41 56 45
偏移: 0x00
ASCII: RIFF....WAVE
扩展名: .wav
用途: 音频隐写、无损音频
FLAC¶
文件头: 66 4C 61 43
ASCII: fLaC
扩展名: .flac
用途: 无损音频
OGG¶
文件头: 4F 67 67 53
ASCII: OggS
扩展名: .ogg, .ogv, .oga
用途: 开源音视频格式
MIDI¶
文件头: 4D 54 68 64
ASCII: MThd
扩展名: .mid, .midi
用途: 音乐序列
MKV (Matroska)¶
文件头: 1A 45 DF A3
偏移: 0x00
扩展名: .mkv, .mka, .mks
用途: 多媒体容器
可执行文件¶
ELF (Linux)¶
文件头: 7F 45 4C 46
偏移: 0x00
ASCII: .ELF
扩展名: (无扩展名或 .so, .o)
用途: Linux可执行文件、逆向分析
架构标识(第5字节):
01- 32位02- 64位
字节序(第6字节):
01- Little Endian02- Big Endian
PE (Windows EXE/DLL)¶
文件头: 4D 5A
PE签名: 50 45 00 00 (在偏移0x3C指向的位置)
偏移: 0x00
ASCII: MZ
扩展名: .exe, .dll, .sys, .ocx
用途: Windows可执行文件、逆向分析
DOS头:MZ (Mark Zbikowski)
Mach-O (macOS)¶
文件头: FE ED FA CE (32-bit Big Endian)
或 CE FA ED FE (32-bit Little Endian)
或 FE ED FA CF (64-bit Big Endian)
或 CF FA ED FE (64-bit Little Endian)
偏移: 0x00
扩展名: (无扩展名或 .dylib)
用途: macOS/iOS可执行文件
Java Class¶
文件头: CA FE BA BE
偏移: 0x00
ASCII: CAFEBABE
扩展名: .class
用途: Java字节码、反编译
DEX (Dalvik)¶
文件头: 64 65 78 0A 30 33 (35|36|37|38)
ASCII: dex.03(5|6|7|8)
扩展名: .dex
用途: Android应用、APK逆向
APK (Android Package)¶
文件头: 50 4B 03 04 (ZIP格式)
内部标识: AndroidManifest.xml
扩展名: .apk
用途: Android应用分析
SWF (Flash)¶
文件头: 46 57 53 (未压缩)
或 43 57 53 (ZLIB压缩)
或 5A 57 53 (LZMA压缩)
ASCII: FWS 或 CWS 或 ZWS
扩展名: .swf
用途: Flash动画、漏洞利用
脚本与代码¶
Python编译文件¶
文件头: 03 F3 0D 0A (Python 2.7)
或 42 0D 0D 0A (Python 3.6+)
扩展名: .pyc, .pyo
用途: 反编译、逆向分析
Shell脚本¶
文件头: 23 21 2F (Shebang)
ASCII: #!/
扩展名: .sh, .bash
示例: #!/bin/bash
PHP¶
文件头: 3C 3F 70 68 70
ASCII: <?php
扩展名: .php
用途: Web后门、Webshell
数据库文件¶
SQLite¶
文件头: 53 51 4C 69 74 65 20 66 6F 72 6D 61 74 20 33 00
偏移: 0x00
ASCII: SQLite format 3.
扩展名: .db, .sqlite, .sqlite3
用途: 数据提取、SQL注入
MySQL MyISAM¶
文件头: FE 01 (索引文件)
扩展名: .MYI (索引), .MYD (数据)
PostgreSQL¶
扩展名: 无固定文件头
目录: base/ 或 pg_data/
磁盘镜像¶
ISO 9660¶
文件头: 43 44 30 30 31 (CD001)
偏移: 0x8001, 0x8801, 或 0x9001
ASCII: CD001
扩展名: .iso
用途: 光盘镜像、文件提取
VMDK (VMware)¶
文件头: 4B 44 4D (KDM)
或 23 20 44 69 73 6B 20 44 65 73 63 72 69 70 74 6F 72
ASCII: KDM 或 # Disk Descriptor
扩展名: .vmdk
用途: 虚拟机磁盘
VDI (VirtualBox)¶
文件头: 3C 3C 3C 20 4F 72 61 63 6C 65 20 56 4D
ASCII: <<< Oracle VM
扩展名: .vdi
QCOW2 (QEMU)¶
文件头: 51 46 49 FB
ASCII: QFI.
扩展名: .qcow2
用途: QEMU虚拟机磁盘
VHD (Virtual Hard Disk)¶
文件头: 63 6F 6E 6E 65 63 74 69 78
ASCII: connectix
偏移: 文件末尾-512字节
扩展名: .vhd
加密与证书¶
PGP Public Key¶
文件头: 99 (通常紧随长度字节)
或 2D 2D 2D 2D 2D 42 45 47 49 4E 20 50 47 50
ASCII: -----BEGIN PGP
扩展名: .pgp, .gpg, .asc
RSA Private Key (PEM)¶
文件头: 2D 2D 2D 2D 2D 42 45 47 49 4E 20 52 53 41
ASCII: -----BEGIN RSA PRIVATE KEY-----
扩展名: .pem, .key
X.509 Certificate (DER)¶
文件头: 30 82
扩展名: .der, .cer, .crt
SSH Private Key¶
文件头: 2D 2D 2D 2D 2D 42 45 47 49 4E 20 4F 50 45 4E 53 53 48
ASCII: -----BEGIN OPENSSH PRIVATE KEY-----
扩展名: .pem (无扩展名)
PKCS#12¶
文件头: 30 82
扩展名: .p12, .pfx
用途: 证书和私钥容器
其他格式¶
Torrent¶
文件头: 64 38 3A 61 6E 6E 6F 75 6E 63 65
ASCII: d8:announce
扩展名: .torrent
PCAP (Wireshark)¶
文件头: D4 C3 B2 A1 (标准)
或 A1 B2 C3 D4 (变体)
或 0A 0D 0D 0A (PCAP-NG)
扩展名: .pcap, .cap, .pcapng
用途: 网络流量分析
Lua Compiled¶
文件头: 1B 4C 75 61
ASCII: .Lua
扩展名: .luac
QR Code (二维码图片)¶
文件头: 取决于图片格式 (PNG/JPEG/GIF)
用途: 数据编码、扫码题
Base64编码文本¶
特征: 仅包含 A-Z, a-z, 0-9, +, /, = 字符
识别: 字符集限制、=填充
用途: 数据编码、隐写
Hex编码文本¶
特征: 仅包含 0-9, A-F (或 a-f) 字符
识别: 偶数长度、字符集限制
用途: 二进制转文本
快速查询表¶
图像格式速查¶
格式 |
文件头(Hex) |
ASCII |
常用扩展名 |
|---|---|---|---|
JPEG |
FF D8 FF |
ÿØÿ |
.jpg |
PNG |
89 50 4E 47 0D 0A 1A 0A |
.PNG…. |
.png |
GIF |
47 49 46 38 (37|39) 61 |
GIF87a/89a |
.gif |
BMP |
42 4D |
BM |
.bmp |
TIFF |
49 49 2A 00 / 4D 4D 00 2A |
II*. / MM.* |
.tif |
ICO |
00 00 01 00 |
- |
.ico |
WEBP |
52 49 46 46 … 57 45 42 50 |
RIFF…WEBP |
.webp |
压缩格式速查¶
格式 |
文件头(Hex) |
ASCII |
常用扩展名 |
|---|---|---|---|
ZIP |
50 4B 03 04 |
PK.. |
.zip |
RAR |
52 61 72 21 1A 07 |
Rar!.. |
.rar |
7Z |
37 7A BC AF 27 1C |
7z¼¯’. |
.7z |
GZIP |
1F 8B 08 |
- |
.gz |
BZIP2 |
42 5A 68 |
BZh |
.bz2 |
XZ |
FD 37 7A 58 5A 00 |
.7zXZ. |
.xz |
TAR |
75 73 74 61 72 (偏移257) |
ustar |
.tar |
CAB |
4D 53 43 46 |
MSCF |
.cab |
可执行文件速查¶
格式 |
文件头(Hex) |
ASCII |
平台 |
|---|---|---|---|
ELF |
7F 45 4C 46 |
.ELF |
Linux |
PE |
4D 5A … 50 45 |
MZ…PE |
Windows |
Mach-O |
CF FA ED FE |
- |
macOS |
Java |
CA FE BA BE |
CAFEBABE |
JVM |
DEX |
64 65 78 0A |
dex. |
Android |
Class |
CA FE BA BE |
CAFEBABE |
Java |
音视频格式速查¶
格式 |
文件头(Hex) |
ASCII |
常用扩展名 |
|---|---|---|---|
MP3 |
FF FB / 49 44 33 |
ÿû / ID3 |
.mp3 |
MP4 |
00 00 00 (14|18|1C|20) 66 74 79 70 |
….ftyp |
.mp4 |
AVI |
52 49 46 46 … 41 56 49 20 |
RIFF….AVI |
.avi |
WAV |
52 49 46 46 … 57 41 56 45 |
RIFF….WAVE |
.wav |
FLAC |
66 4C 61 43 |
fLaC |
.flac |
OGG |
4F 67 67 53 |
OggS |
.ogg |
文档格式速查¶
格式 |
文件头(Hex) |
ASCII |
常用扩展名 |
|---|---|---|---|
25 50 44 46 |
%PDF- |
||
DOC |
D0 CF 11 E0 A1 B1 1A E1 |
- |
.doc |
DOCX |
50 4B 03 04 |
PK.. |
.docx |
RTF |
7B 5C 72 74 66 31 |
{\rtf1 |
.rtf |
XML |
3C 3F 78 6D 6C |
<?xml |
.xml |
使用工具¶
命令行工具¶
查看文件头(十六进制):
# 查看前16字节
xxd -l 16 file.bin
# 查看前32字节
hexdump -C -n 32 file.bin
# 或使用 head + od
head -c 16 file.bin | od -A x -t x1z
识别文件类型:
# file 命令(基于魔术字节)
file file.bin
# 详细信息
file -i file.bin
# 强制检查
file -z file.bin
搜索文件签名:
# 使用 binwalk
binwalk file.bin
# 使用 foremost
foremost -i file.bin -o output/
# 使用 grep (十六进制)
grep -abo "PNG" file.bin
Python脚本¶
读取文件头:
#!/usr/bin/env python3
def read_file_header(filename, length=16):
"""读取文件头部字节"""
with open(filename, 'rb') as f:
header = f.read(length)
# 十六进制格式
hex_str = ' '.join(f'{b:02X}' for b in header)
# ASCII格式(可打印字符)
ascii_str = ''.join(chr(b) if 32 <= b < 127 else '.' for b in header)
print(f"Hex: {hex_str}")
print(f"ASCII: {ascii_str}")
return header
# 使用示例
read_file_header('file.bin')
识别文件类型:
#!/usr/bin/env python3
FILE_SIGNATURES = {
b'\xFF\xD8\xFF': 'JPEG',
b'\x89\x50\x4E\x47\x0D\x0A\x1A\x0A': 'PNG',
b'\x47\x49\x46\x38': 'GIF',
b'\x50\x4B\x03\x04': 'ZIP',
b'\x52\x61\x72\x21': 'RAR',
b'\x1F\x8B\x08': 'GZIP',
b'\x42\x5A\x68': 'BZIP2',
b'\x25\x50\x44\x46': 'PDF',
b'\x7F\x45\x4C\x46': 'ELF',
b'\x4D\x5A': 'PE/EXE',
}
def identify_file(filename):
"""识别文件类型"""
with open(filename, 'rb') as f:
header = f.read(16)
for signature, filetype in FILE_SIGNATURES.items():
if header.startswith(signature):
return filetype
return 'Unknown'
# 使用示例
print(identify_file('file.bin'))
在线工具¶
文件签名数据库:https://www.garykessler.net/library/file_sigs.html
在线文件识别:https://hexed.it/
TrID:https://mark0.net/soft-trid-e.html
CTF 常见技巧¶
1. 文件头修复¶
场景:文件损坏或文件头被修改
# 查看当前文件头
xxd -l 16 broken.png
# 修复PNG文件头
printf '\x89\x50\x4E\x47\x0D\x0A\x1A\x0A' | dd of=broken.png bs=1 count=8 conv=notrunc
# 或使用 Python
python3 -c "
data = open('broken.png', 'rb').read()
fixed = b'\\x89\\x50\\x4E\\x47\\x0D\\x0A\\x1A\\x0A' + data[8:]
open('fixed.png', 'wb').write(fixed)
"
2. 文件类型伪装¶
检测方法:
# 1. 检查扩展名与文件头是否匹配
file suspicious.jpg
# 如果输出 "PNG image",说明是伪装
# 2. 查看文件头
xxd -l 16 suspicious.jpg
# 3. 修正扩展名
mv suspicious.jpg real.png
3. 多文件拼接¶
检测:
# 使用 binwalk 扫描
binwalk combined.jpg
# 输出示例:
# 0 0x0 JPEG image
# 524288 0x80000 ZIP archive
# 提取
binwalk -e combined.jpg
# 或手动提取
dd if=combined.jpg of=hidden.zip bs=1 skip=524288
4. IEND后隐藏(PNG)¶
# 查找 IEND 位置
grep -abo "IEND" image.png
# 输出:12345:IEND
# 提取IEND后数据
tail -c +12358 image.png > hidden_data.bin
# (12345 + 12 [IEND块大小] + 1)
5. ZIP伪加密¶
# 检测伪加密
xxd image.zip | grep -A 5 "504b 0304"
# 第7-8字节如果是 09 00 表示加密
# 修改为 00 00 表示未加密
# 修复伪加密
python3 << 'EOF'
data = bytearray(open('fake_encrypted.zip', 'rb').read())
# 找到 PK 头
pos = data.find(b'PK\x03\x04')
if pos != -1:
data[pos+6:pos+8] = b'\x00\x00' # 清除加密标志
open('fixed.zip', 'wb').write(data)
EOF
参考资源¶
文件签名数据库¶
Gary Kessler’s File Signatures:https://www.garykessler.net/library/file_sigs.html
Wikipedia - List of file signatures:https://en.wikipedia.org/wiki/List_of_file_signatures
PoC||GTFO Pocorgtfo:https://www.alchemistowl.org/pocorgtfo/
工具资源¶
Binwalk:https://github.com/ReFirmLabs/binwalk
Foremost:http://foremost.sourceforge.net/
TrID:https://mark0.net/soft-trid-e.html
ExifTool:https://exiftool.org/
标准文档¶
PNG Specification:https://www.w3.org/TR/PNG/
JPEG Standard:https://www.w3.org/Graphics/JPEG/
ZIP Format:https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT
PDF Reference:https://www.adobe.com/devnet/pdf/pdf_reference.html
快速搜索脚本¶
#!/bin/bash
# 批量识别文件类型
echo "=== File Type Identification ==="
echo ""
for file in "$@"; do
echo "File: $file"
# 使用 file 命令
file_type=$(file -b "$file")
echo " Type: $file_type"
# 显示文件头
header=$(xxd -l 16 -p "$file" | sed 's/../& /g')
echo " Header: $header"
# 扫描嵌入文件
embedded=$(binwalk -B "$file" 2>/dev/null | grep -c "0x")
if [ "$embedded" -gt 1 ]; then
echo " Warning: Possible embedded files detected!"
fi
echo ""
done
使用方法:
chmod +x identify_files.sh
./identify_files.sh file1.bin file2.jpg file3.zip
文档版本:v1.0 更新日期:2025-01 内容来源:CTF实战经验、文件格式标准、开源工具文档
使用建议:
收藏本文档作为快速参考
遇到未知文件时先查文件头
结合工具(file、binwalk、foremost)分析
注意文件头伪装和多文件拼接
熟记常见格式的文件头(JPEG、PNG、ZIP、PDF、ELF)