标签 Aztec码 下的文章
- 作者: 纯情
- 时间:
- 分类: 开源
- 评论
题目:
注:这是 题目/比赛海报(裁剪版),想要题目的可以去参加阿里ctf获取
分析
PNG Chunk 隐写:存在非法 Chunk Fl4G
对题目PNG图片进行chunk解析,PNG chunk type 按规范应是 4 个字母,但文件里存在 Fl4G(含数字),所以该 chunk 的 data 以 0x78 0x9c 开头,是 zlib压缩流。
zlib 解压得到 WAV
对 Fl4G chunk 的 data 做 zlib.decompress,解出 RIFF....WAVE,得到隐藏音频。
脚本如下:
音频参数:
●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 ...
得到
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
最后也是拿到了衣服