跳转至

CTF 常见文件头标识速查手册

文件头(File Header)也称为魔术字节(Magic Bytes)或文件签名(File Signature),是文件开头的特定字节序列,用于识别文件类型。


目录

  1. 图像文件
  2. 压缩文件
  3. 文档文件
  4. 音视频文件
  5. 可执行文件
  6. 脚本与代码
  7. 数据库文件
  8. 磁盘镜像
  9. 加密与证书
  10. 其他格式
  11. 快速查询表

图像文件

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 Array - CI - OS/2 Color Icon - CP - OS/2 Color Pointer - IC - OS/2 Icon - PT - 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 Header - 50 4B 01 02 - Central Directory File Header - 50 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 Media - ftypmp42 - MPEG-4 Part 2 - ftypM4A - Apple iTunes AAC - ftypqt - 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 Endian - 02 - 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 常用扩展名
PDF 25 50 44 46 %PDF- .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实战经验、文件格式标准、开源工具文档

使用建议: 1. 收藏本文档作为快速参考 2. 遇到未知文件时先查文件头 3. 结合工具(file、binwalk、foremost)分析 4. 注意文件头伪装和多文件拼接 5. 熟记常见格式的文件头(JPEG、PNG、ZIP、PDF、ELF)