题目:

image.png



注:这是 题目/比赛海报(裁剪版),想要题目的可以去参加阿里ctf获取



分析

PNG Chunk 隐写:存在非法 Chunk Fl4G

对题目PNG图片进行chunk解析,PNG chunk type 按规范应是 4 个字母,但文件里存在 Fl4G(含数字),所以该 chunk 的 data 以 0x78 0x9c 开头,是 zlib压缩流。

image.png





zlib 解压得到 WAV

对 Fl4G chunk 的 data 做 zlib.decompress,解出 RIFF....WAVE,得到隐藏音频。

image.png



脚本如下:

音频参数:

1 channel

16-bit

48000 Hz

5707200 frames



WAV 频域隐写 → 字节流 → PNG

将音频按 **0.1s 一段(4800 samples**切片;每段用 8 个频点是否存在表示 8 bit

频点(Hz):[100, 200, 400, 800, 1600, 3200, 6400, 12800]
阈值:频点幅值 > 1e6 认为该 bit=1

bit 顺序:低频=低位(LSB)
这样 1189 段 = 1189 字节,字节流开头正好是 PNG 头:89 50 4E 47 ...

image.png





image.png



得到



Aztec 解码得到 flag

ZXing / 任何支持 Aztec 的解码器扫这张图,输出即 flag

脚本:
import zxingcpp

from PIL import Image

img = Image.open("decoded_from_audio.png").convert("RGB")

res = zxingcpp.read_barcode(img)

print(res.text)



运行得到flag



最后也是拿到了衣服

ecaf5629022677fa08be2c6fa5522b67.jpg



标签: CTF Writeup, PNG隐写, WAV隐写, Zlib解压, Aztec码

添加新评论