文件头、文件尾与真实类型
文件头、文件尾与真实类型
本文适合
刚拿到 Misc 附件、需要判断真实格式和提取方向的学习者。学完你能:用文件头、文件尾、偏移和工具输出证明一个文件的真实类型,并从伪装、附加、损坏或嵌套中找到下一层材料
Misc 附件分析的第一步是确认真实文件类型。文件后缀可以伪造,但文件头通常能暴露真实格式。
一句话判断
文件名和打开方式都不可信;只要后缀、magic bytes、文件尾、体积、file、binwalk 的结果不一致,就按真实结构而不是文件名继续分析。
题目中常见信号
说明:后缀伪装
第一动作:按 magic bytes 改扩展名或换工具
说明:可能有尾部附加
第一动作:找格式结束标记后面的数据
说明:文件内嵌套其他文件
第一动作:按偏移提取并验证
说明:可能字段损坏
第一动作:对照格式签名修复头尾
说明:可能嵌入压缩包或文档
第一动作:记录偏移并 dd 提取
说明:文本层线索
第一动作:保存上下文,判断是否下一层密码
核心概念
文件类型由结构决定,不由扩展名决定。多数格式有固定文件头,部分格式有明确结束标记,例如 PNG 的 IEND、JPEG 的 FFD9、PDF 的 %%EOF、ZIP 的中央目录。
CTF 常见手法有四类:
- 伪装:把 ZIP 改成 JPG,或把 PCAP 改成 DAT。
- 附加:正常图片后拼接压缩包、脚本或密文。
- 损坏:改坏 header、CRC、长度、目录字段。
- 嵌套:一个文件里按偏移藏多层不同格式。
最小分析流程
- 记录文件名、大小和哈希,避免多次修改后说不清来源。
- 跑
file初判真实类型。 - 用
xxd看前 32 字节和末尾 64 字节,确认 header/footer。 - 跑
binwalk和strings,找内嵌偏移、可读提示和密码。 - 如果有偏移,用
dd或binwalk -e提取,再对提取物重复步骤 2。 - 如果格式损坏,先备份,再按文件签名和结构字段最小修复。
- 产出 WP 时写清“偏移、提取命令、提取物类型和下一步动作”。
最小验证示例
file challenge.bin
xxd -l 32 challenge.bin
xxd challenge.bin | tail
strings -n 6 challenge.bin | head
binwalk challenge.bin按 binwalk 偏移手动提取:
# 假设 binwalk 显示 0x1A000 处有 ZIP
dd if=challenge.bin of=layer1.zip bs=1 skip=$((0x1A000)) status=none
file layer1.zip
7z l layer1.zip判断依据:
file 与后缀冲突 -> 后缀伪装成立
IEND/FFD9/%%EOF 后还有数据 -> 尾部附加成立
提取物能被 file/7z 识别 -> 偏移提取有效常见利用 / 解题路线
路线总览:
关键证据:magic bytes 和后缀不一致
常用动作:改扩展名或按真实类型打开
关键证据:正常结束标记后仍有数据
常用动作:裁剪尾部,交给下一类文章
关键证据:binwalk 多偏移
常用动作:binwalk -e 或 dd 提取
关键证据:header/footer/CRC/长度异常
常用动作:对照格式最小修复
关键证据:提取物仍是未知文件
常用动作:重复文件类型分析并记录层级
关键证据:strings/exif/comment 有密码
常用动作:带着提示转压缩包或编码题
常见失败原因
常见原因:只看渲染结果,漏掉尾部附加
排查动作:查结束标记和 binwalk
常见原因:偏移误判或文件损坏
排查动作:手动 dd 提取并 file 验证
常见原因:只修了文件头,长度/CRC/目录仍错
排查动作:对照格式结构继续修
常见原因:Office/APK/JAR 也是 ZIP 容器
排查动作:看内部目录判断真实类型
常见原因:没有记录层级和命令
排查动作:建立 layer0/layer1/layer2 记录
迷你案例
题目给 cat.jpg,图片能打开但大小 8 MB。验证:
file cat.jpg
binwalk cat.jpgbinwalk 显示 0x2F1A0 处有 ZIP。提取:
dd if=cat.jpg of=hidden.zip bs=1 skip=$((0x2F1A0)) status=none
7z x hidden.zip解压得到 hint.txt 和 flag.png。这说明题目不是“看图”,而是“JPEG 尾部附加 ZIP”。WP 必须保留偏移 0x2F1A0,否则别人无法复现。