CTF案例 | MISC隐写-解题思路大杂烩讲解
字数 1999 2025-08-20 18:18:23

CTF MISC隐写技术全面解析

一、前言

在CTF竞赛的MISC方向中,隐写术是非常常见的题型。各种文件格式都可以用于隐藏flag信息,包括但不限于:PNG、JPG、BMP、GIF、Word、PPT等。本文将系统性地介绍各类文件的隐写方式、解密原理及相关工具使用方法。

二、PNG文件隐写

1. 文件头修复

常见文件头尾签名:

  • PNG: 文件头 89 50 4E 47 0D 0A 1A 0A,文件尾 AE 42 60 82
  • JPEG: 文件头 FF D8 FF,文件尾 FF D9
  • GIF: 文件头 47 49 46 38 39(37) 61,文件尾 00 3B
  • BMP: 文件头 42 4D
  • ZIP: 文件头 50 4B 03 04,文件尾 50 4B 01 0250 4B 05 06

使用010 Editor等16进制编辑器可以查看和修复文件头。

2. 宽高隐写

PNG文件结构关键点:

  • 前8字节为文件头签名
  • 接下来4字节00 00 00 0D表示数据块长度为13
  • 接着4字节49 48 44 52(IHDR)是文件头数据块标识
  • 接下来的13字节数据块中,前4字节为宽度,后4字节为高度

宽高修复脚本示例:

import zlib
import struct
import itertools

bin_data = open(args.f, 'rb').read()
crc32key = zlib.crc32(bin_data[12:29])  # 计算crc
original_crc32 = int(bin_data[29:33].hex(), 16)  # 原始crc

if crc32key == original_crc32:
    print('宽高没有问题')
else:
    for i, j in itertools.product(range(4095), range(4095)):
        data = bin_data[12:16] + struct.pack('>i', i) + struct.pack('>i', j) + bin_data[24:29]
        crc32 = zlib.crc32(data)
        if(crc32 == original_crc32):
            print(f"宽度: {i}, hex: {hex(i)}")
            print(f"高度: {j}, hex: {hex(j)}")
            exit(0)

3. LSB隐写

最低有效位(LSB)隐写原理:

  • 修改RGB颜色分量的最低二进制位
  • 每个像素可携带3比特信息
  • 人眼难以察觉变化

常用工具:

  • StegSolve 1.4:提供Data Extract功能查看隐藏信息
  • zsteg:检测PNG和BMP中的隐藏数据
    zsteg filename.png  # 简单检测
    zsteg -a filename  # 检测所有通道LSB
    zsteg -e b8,a,lsb,xy file.png -> out  # 提取特定通道数据
    

4. 盲水印

分为单图和双图盲水印:

  • 双图盲水印工具:BlindWaterMark
    python bwm.py decode hui.png hui_with_wm.png wm_from_hui.png
    
  • 单图盲水印可使用watermark工具

5. 附加文件隐写

使用工具提取隐藏文件:

  • binwalk:
    binwalk filename  # 查看附加文件
    binwalk -e filename --run-as=root  # 提取文件
    
  • foremost:
    foremost -o output_dir filename
    

6. IDAT块隐写

检测工具:

  • pngcheck
  • PNGdebugger

三、JPG/JPEG文件隐写

1. 宽高修改

JPG文件结构:

  • FF C0为起始头
  • 宽高信息位于:FF C0 00 11 08 [精度] [高] [宽]

2. EXIF信息

EXIF可能包含flag、密码等关键信息。

查看工具:

  • 在线网站:https://exif.tuchong.com/
  • Linux:exiftool
  • Windows:元数据编辑器

四、BMP文件隐写

关键点:

  • 文件头:42 4D
  • 宽高修改方式与PNG类似

五、GIF文件隐写

1. 逐帧分析

使用工具:

  • StegSolve逐帧查看
  • convert工具分割帧:
    convert glance.gif flag.png  # 逐帧分割
    montage flag*.png -tile x1 -geometry +0+0 flag.png  # 合并图片
    

2. 帧信息分析

使用identify工具:

identify -format "%T" flag.gif

六、音频文件隐写

1. 拨号音分析

使用DTMF解码工具:https://github.com/ribt/dtmf-decoder

2. SSTV隐写

工具:

  • MMSSTV
  • e2eSoft

3. 频谱/波形分析

工具:

  • Audacity
  • Adobe Audition

4. MP3隐写

使用mp3stego工具:

# 加密
encode.exe -E hidden_text.txt -P pass svega.wav svega_stego.mp3
# 解密
decode.exe -X svega_stego.mp3 -P pass

七、文本文件隐写

1. 零宽隐写

在线解码网站:

  • https://www.qqxiuzi.cn/bianma/yincangjiami.php
  • http://330k.github.io/misc_tools/unicode_steganography.html

2. snow隐写

工具:SNOW

SNOW.exe -p password filename > outfile

八、Office文档隐写

1. Word/PPT隐写

技巧:

  • 修改后缀为zip后解压查找
  • 文字颜色修改
  • 全选(Ctrl+A)可能有意外发现
  • 密码爆破

2. Excel隐写

常见形式:

  • 方块规律转换为二进制
  • 黑白块组成二维码

九、Pyc隐写

工具:Stegosaurus

  • 在Python字节码文件(pyc/pyo)中嵌入Payload
  • GitHub: https://github.com/AngelKitty/stegosaurus

十、综合隐写工具

1. 常用工具

  • oursecret:支持多种文件格式
  • Outguess:支持PPM、PNM、JPG格式
  • steghide:支持JPG、BMP、WAV
  • F5隐写:支持BMP、GIF、JPG
  • stegdetect:检测图片隐写方式
  • SilentEye:支持JPEG、BMP、WAVE的LSB隐写
  • DeepSound:WAV文件隐写

2. 集成工具

  • CTF站点导航:https://ctf.mzy0.com/
  • ToolsFx:跨平台密码学工具箱
  • TaowaTools:集成snow+stegohide+jsteg+LSB等功能

十一、总结

MISC隐写技术种类繁多,关键在于:

  1. 熟悉各种文件格式结构
  2. 掌握常用工具使用方法
  3. 培养敏锐的观察力和分析能力
  4. 积累常见隐写模式的识别经验

通过系统学习和大量实践,才能在各种CTF比赛中游刃有余地解决隐写类题目。

CTF MISC隐写技术全面解析 一、前言 在CTF竞赛的MISC方向中,隐写术是非常常见的题型。各种文件格式都可以用于隐藏flag信息,包括但不限于:PNG、JPG、BMP、GIF、Word、PPT等。本文将系统性地介绍各类文件的隐写方式、解密原理及相关工具使用方法。 二、PNG文件隐写 1. 文件头修复 常见文件头尾签名: PNG: 文件头 89 50 4E 47 0D 0A 1A 0A ,文件尾 AE 42 60 82 JPEG: 文件头 FF D8 FF ,文件尾 FF D9 GIF: 文件头 47 49 46 38 39(37) 61 ,文件尾 00 3B BMP: 文件头 42 4D ZIP: 文件头 50 4B 03 04 ,文件尾 50 4B 01 02 或 50 4B 05 06 使用010 Editor等16进制编辑器可以查看和修复文件头。 2. 宽高隐写 PNG文件结构关键点: 前8字节为文件头签名 接下来4字节 00 00 00 0D 表示数据块长度为13 接着4字节 49 48 44 52 (IHDR)是文件头数据块标识 接下来的13字节数据块中,前4字节为宽度,后4字节为高度 宽高修复脚本示例: 3. LSB隐写 最低有效位(LSB)隐写原理: 修改RGB颜色分量的最低二进制位 每个像素可携带3比特信息 人眼难以察觉变化 常用工具: StegSolve 1.4:提供Data Extract功能查看隐藏信息 zsteg:检测PNG和BMP中的隐藏数据 4. 盲水印 分为单图和双图盲水印: 双图盲水印工具:BlindWaterMark 单图盲水印可使用watermark工具 5. 附加文件隐写 使用工具提取隐藏文件: binwalk: foremost: 6. IDAT块隐写 检测工具: pngcheck PNGdebugger 三、JPG/JPEG文件隐写 1. 宽高修改 JPG文件结构: FF C0 为起始头 宽高信息位于: FF C0 00 11 08 [精度] [高] [宽] 2. EXIF信息 EXIF可能包含flag、密码等关键信息。 查看工具: 在线网站:https://exif.tuchong.com/ Linux:exiftool Windows:元数据编辑器 四、BMP文件隐写 关键点: 文件头: 42 4D 宽高修改方式与PNG类似 五、GIF文件隐写 1. 逐帧分析 使用工具: StegSolve逐帧查看 convert工具分割帧: 2. 帧信息分析 使用identify工具: 六、音频文件隐写 1. 拨号音分析 使用DTMF解码工具:https://github.com/ribt/dtmf-decoder 2. SSTV隐写 工具: MMSSTV e2eSoft 3. 频谱/波形分析 工具: Audacity Adobe Audition 4. MP3隐写 使用mp3stego工具: 七、文本文件隐写 1. 零宽隐写 在线解码网站: https://www.qqxiuzi.cn/bianma/yincangjiami.php http://330k.github.io/misc_ tools/unicode_ steganography.html 2. snow隐写 工具:SNOW 八、Office文档隐写 1. Word/PPT隐写 技巧: 修改后缀为zip后解压查找 文字颜色修改 全选(Ctrl+A)可能有意外发现 密码爆破 2. Excel隐写 常见形式: 方块规律转换为二进制 黑白块组成二维码 九、Pyc隐写 工具:Stegosaurus 在Python字节码文件(pyc/pyo)中嵌入Payload GitHub: https://github.com/AngelKitty/stegosaurus 十、综合隐写工具 1. 常用工具 oursecret:支持多种文件格式 Outguess:支持PPM、PNM、JPG格式 steghide:支持JPG、BMP、WAV F5隐写:支持BMP、GIF、JPG stegdetect:检测图片隐写方式 SilentEye:支持JPEG、BMP、WAVE的LSB隐写 DeepSound:WAV文件隐写 2. 集成工具 CTF站点导航:https://ctf.mzy0.com/ ToolsFx:跨平台密码学工具箱 TaowaTools:集成snow+stegohide+jsteg+LSB等功能 十一、总结 MISC隐写技术种类繁多,关键在于: 熟悉各种文件格式结构 掌握常用工具使用方法 培养敏锐的观察力和分析能力 积累常见隐写模式的识别经验 通过系统学习和大量实践,才能在各种CTF比赛中游刃有余地解决隐写类题目。