前言
这道题目结合了图片隐写与多种编码转换技术。Uuencode 是一种将二进制信息转换为可打印字符的编码方案,常用于邮件传输,现在虽多被 MIME 取代,但在 CTF 中仍常见。解题过程涉及文件提取、Base64 解码、文件头修复以及密码破解。
解题思路
1. 初步分析
拿到附件是一张 PNG 图片。常规手段如 Winhex 和 Stegsolve 看不出明显问题,这时候需要借助 binwalk 进行深度扫描。
2. 文件提取
使用 binwalk 对图片进行分离提取,命令如下:
binwalk -e e4103617b4a6476fb7aa8f862f2ee400.png
执行后会在当前目录生成一个文件夹,里面包含提取出的隐藏数据。打开其中一个文本文件,会发现一段 Base64 编码的字符串:
S1ADBBQAAQAAADkwl0xs4x98WgAAAE4AAAAEAAAAY29kZePegfAPrkdnhMG2gb86/AHHpS0GMqCrR9s21bP43SqmesL+oQGo50ljz4zIctqxIsTHV25+1mTE7vFc9gl5IUif7f1/rHIpHql7nqKPb+2M6nRLuwhU8mb/w1BLAQI/ABQAAQAAADkwl0xs4x98WgAAAE4AAAAEACQAAAAAAAAAIAAAAAAAAABjb2RlCgAgAAAAAAABABgAAFvDg4Xa0wE8gAmth9rTATyACa2H2tMBUEsFBgAAAAABAAEAVgAAAHwAAADcAFtQeXRob24gMi43XQ0KPj4+IKh9qH2ofQ0KDQpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6DQogIEZpbGUgIjxweXNoZWxsIzA+IiwgbGluZSAxLCBpbiA8bW9kdWxlPg0KICAgIKh9qH2ofQ0KWmVyb0RpdmlzaW9uRXJyb3I6IKh9qH2ofah9qH2ofah9qH2ofah9qH2ofah9qH2ofah9qH2ofah9qH2ofah9qH2ofah9qH2ofah9qH2ofSA8LSBwYXNzd29yZCA7KQ0KPj4+IAA=
3. Python 脚本解码
这段 Base64 数据实际上是一个压缩包的二进制内容。我们可以用简单的 Python 脚本来还原它:
import base64
t = "S1ADBBQAAQAAADkwl0xs4x98WgAAAE4AAAAEAAAAY29kZePegfAPrkdnhMG2gb86/AHHpS0GMqCrR9s21bP43SqmesL+oQGo50ljz4zIctqxIsTHV25+1mTE7vFc9gl5IUif7f1/rHIpHql7nqKPb+2M6nRLuwhU8mb/w1BLAQI/ABQAAQAAADkwl0xs4x98WgAAAE4AAAAEACQAAAAAAAAAIAAAAAAAAABjb2RlCgAgAAAAAAABABgAAFvDg4Xa0wE8gAmth9rTATyACa2H2tMBUEsFBgAAAAABAAEAVgAAAHwAAADcAFtQeXRob24gMi43XQ0KPj4+IKh9qH2ofQ0KDQpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6DQogIEZpbGUgIjxweXNoZWxsIzA+IiwgbGluZSAxLCBpbiA8bW9kdWxlPg0KICAgIKh9qH2ofQ0KWmVyb0RpdmlzaW9uRXJyb3I6IKh9qH2ofah9qH2ofah9qH2ofah9qH2ofah9qH2ofah9qH2ofah9qH2ofah9qH2ofah9qH2ofah9qH2ofSA8LSBwYXNzd29yZCA7KQ0KPj4+IAA="
a = base64.b64decode(t)
with open('a', "bw") as f:
f.write(a)
运行脚本后得到名为 a 的二进制文件。用 Winhex 打开查看,发现文件头是 4b 50 03 04,这看起来像 ZIP 格式,但标准 ZIP 头应该是 50 4b 03 04(PK\x03\x04)。这里字节顺序反了,导致无法直接识别为压缩包。
4. 文件头修复与解压
在 Winhex 中将开头的 4b 50 修改为 50 4b,并将后缀改为 .zip。再次尝试解压时,系统提示需要密码。
回到之前提取的文本文件中,有一行报错信息:


