# 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 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: hidden_data.bin # (12345 + 12 [IEND块大小] + 1) ``` ### 5. ZIP伪加密 ```bash # 检测伪加密 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 --- ## 快速搜索脚本 ```bash #!/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 ``` **使用方法**: ```bash 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)