CTF-Misc-二维码(二):隐藏数据与多层压缩的破解之道

张开发
2026/4/13 2:15:32 15 分钟阅读

分享文章

CTF-Misc-二维码(二):隐藏数据与多层压缩的破解之道
1. 二维码背后的秘密从扫描失败到发现隐藏数据第一次参加CTF比赛时我遇到一个看似简单的二维码题目。扫描后只显示secret is here但就是找不到flag。后来才发现原来二维码图像里藏着压缩包。这种把数据隐藏在二维码中的手法在Misc类题目中非常常见。二维码本身就是一个数据容器除了可见的黑白方块还可以通过修改像素点的方式嵌入其他文件。常见的手法包括尾部追加在二维码文件末尾直接添加ZIP等压缩包数据LSB隐写利用最低有效位(LSB)修改像素值隐藏信息多层结构将二维码作为容器嵌套多个压缩层级我常用的检测工具是binwalk和foremost。比如这个命令组合就很好用binwalk QR_code.png foremost -i QR_code.png -o outputbinwalk能快速识别文件中的魔术头foremost则能完整提取出隐藏文件。有次比赛我遇到一个题目binwalk显示有ZIP但提取失败改用foremost才成功这就是工具互补的重要性。2. 破解多层压缩的实用技巧2.1 识别嵌套结构遇到需要密码的压缩包时先用zipinfo看看内部结构zipinfo encrypted.zip有次我解压后得到另一个加密压缩包连续五层都是这样。后来发现用file命令可以快速判断文件类型file stage1.zip stage2.bin常见的套娃模式有ZIP→ZIP→ZIP的纯嵌套ZIP→PNG→ZIP的混合嵌套伪加密的干扰项2.2 密码破解实战当遇到4位数字密码时fcrackzip的暴力破解效率很高fcrackzip -b -c1 -l 4 -u secret.zip但更复杂的情况需要技巧字典攻击收集历届CTF常用密码生成字典fcrackzip -D -p passwords.txt -u data.zip掩码攻击知道部分密码特征时fcrackzip -b -c a1! -l 6-8 -u flag.zip我整理过一份CTF常见密码规律题目名称变形如qrcode2023比赛名称缩写如bctf2022简单键盘序列如qwerty3. 进阶工具链与自动化处理3.1 自动化提取脚本面对多层压缩时我写了个bash脚本自动处理#!/bin/bash while [ 1 ]; do file_type$(file -b current_file) case $file_type in *Zip*) unzip -P $password current_file ;; *RAR*) unrar x -p$password current_file ;; *) break ;; esac done3.2 二进制分析技巧有时需要用hex编辑器手动分析。比如发现PK头被修改成PJ时用xxd查看十六进制xxd suspicious.bin | head使用sed修复文件头sed -i s/PJ/PK/ suspicious.bin4. 实战案例分析去年一道真题的完整解法初始文件qr.png扫描无效binwalk发现内含ZIPbinwalk -e qr.png提取出的zip需要密码观察文件名hint.txt尝试密码hint解压后得到加密的7z文件用John the Ripper生成字典john --wordlistrockyou.txt --rules --stdout dict.txt最终破解密码qrcode!#关键点在于不要忽略文件名本身的提示混合使用多种破解工具保持对文件结构的敏感性5. 常见陷阱与调试技巧最容易翻车的几种情况伪加密zip文件的加密标志位被修改但实际未加密解决方法用zipdetails检查加密位非常见压缩格式如lzma、arj等解决方法安装p7zip-full套件损坏的文件头故意破坏的文件结构解决方法用dd重建文件头调试时建议使用strace跟踪工具行为strace -o log.txt unzip secret.zip在虚拟机中测试危险操作随时备份中间文件有次我花了3小时破解的密码结果发现是伪加密。现在我的第一反应永远是先用zipinfo -v检查加密状态。

更多文章