[2019RoarCTF]黄金六年

本篇将分享一道关于视频隐写的 CTF 题目解题思路,涉及视频拆帧、二维码识别、Base64 解码和压缩包破解。

解题步骤

1. 拆解视频帧,提取二维码

首先,使用 ffmpeg 将视频 atta.mp4 拆分为静态图像序列,以便分析每一帧的内容。

1
ffmpeg -i atta.mp4 -r 60 %d.bmp

视频拆帧

遍历所有生成的图像,发现其中四张包含二维码。

包含二维码的图像

扫描这些二维码,得到四段密钥:iwantplayctf。将它们拼接成一个完整的字符串:iwantplayctf

2. 提取并解码 Base64 数据

使用十六进制编辑器检查 atta.mp4 文件,发现文件末尾附加了一段 Base64 编码的字符串。

文件尾部的 Base64 字符串

对该字符串进行 Base64 解码,可以发现其内容为一个 RAR 压缩包。

解码后的压缩包内容

使用 Python 脚本将解码后的数据流保存为 decoded_file.rar 文件。

1
2
3
4
5
6
7
8
9
import base64

data = '''UmFyIRoHAQAzkrXlCgEFBgAFAQGAgADh7ek5VQIDPLAABKEAIEvsUpGAAwAIZmxhZy50eHQwAQAD
Dx43HyOdLMGWfCE9WEsBZprAJQoBSVlWkJNS9TP5du2kyJ275JzsNo29BnSZCgMC3h+UFV9p1QEf
JkBPPR6MrYwXmsMCMz67DN/k5u1NYw9ga53a83/B/t2G9FkG/IITuR+9gIvr/LEdd1ZRAwUEAA=='''
decoded_data = base64.b64decode(data)

with open("decoded_file.rar", "wb") as f:
f.write(decoded_data)

3. 解压文件,获取 Flag

使用第一步拼接的密钥 iwantplayctf 作为密码,解压 decoded_file.rar 文件。

解压文件

成功解压后,打开 flag.txt 文件,即可获得最终的 Flag。

Flag: roarctf{CTF-from-RuMen-to-RuYuan}