
1. 初识zip伪加密从一道CTF题说起第一次接触zip伪加密是在BUUCTF的一道杂项题里。当时下载附件后双击压缩包系统突然弹出密码输入框我下意识就想去爆破密码。但转念一想CTF题目往往有更巧妙的解法于是开始研究zip文件结构。这才发现原来zip加密还分真加密和伪加密两种形式而后者根本不需要破解密码只需要修改几个字节就能轻松搞定。伪加密的本质就像给房门贴了个已上锁的标签实际上锁芯根本没装。Windows系统看到这个标签就会要求输入密码而其他解压工具可能直接忽略这个标签。我后来测试发现用7-zip打开伪加密的压缩包时经常能直接看到里面的文件这就是因为不同工具对zip标准的解读存在差异。2. 解剖zip文件结构三个关键区域要理解伪加密原理得先掌握zip文件的基本结构。用Winhex打开任意zip文件你会看到它由三个核心部分组成压缩源文件数据区以50 4B 03 04开头存放实际压缩数据目录区以50 4B 01 02开头相当于文件索引表目录结束标志以50 4B 05 06结尾其中加密相关的关键位就在数据区和目录区。数据区的加密标志位于文件头后第7-8字节目录区则在第9-10字节。这两个位置的值决定了系统是否认为文件被加密00 00无加密01 00真加密09 00伪加密仅目录区标记3. 实战破解手把手修改加密标志现在我们来还原BUUCTF那道题的破解过程。假设我们有个伪加密的flag.zip解压时要求密码按照以下步骤操作用Winhex或010 Editor打开zip文件# 如果用Linux系统可以用xxd命令查看hex xxd flag.zip | less定位目录区加密标志搜索50 4B 01 02目录区标识从第一个字节开始数第9-10字节就是加密标志常见伪加密会显示09 00修改目录区标志把09 00改为00 00保存后尝试解压如果还提示密码说明数据区也有加密标记处理数据区加密标志搜索50 4B 03 04数据区标识第7-8字节改为00 00再次保存后即可正常解压我遇到过最狡猾的情况是数据区和目录区都设置了伪加密标志这时候需要两处都修改才能成功解压。有些题目还会在多个文件条目中设置不同标志需要逐个检查修改。4. 进阶技巧自动化识别与修复手动修改几次后我琢磨着能不能写个脚本自动识别伪加密。用Python的zipfile库可以快速检测加密状态import zipfile def check_fake_encryption(zip_path): with zipfile.ZipFile(zip_path) as zf: for info in zf.infolist(): if info.flag_bits 0x1: # 检查加密位 print(f{info.filename} 可能为伪加密) else: print(f{info.filename} 未加密或真加密)更彻底的解决方案是直接修复伪加密文件。这里分享一个我常用的bash命令组合可以批量处理伪加密zip# 使用zipdetails工具分析 zipdetails fake_encrypted.zip | grep -A 3 GP flag # 使用zip -FF修复部分情况有效 zip -FF fake_encrypted.zip --out fixed.zip5. 防御与检测CTF出题人的视角站在出题人角度设计一个精妙的伪加密题目需要考虑这些要素混合加密部分文件真加密部分伪加密多层嵌套外层伪加密内层藏真加密非常规标志使用0x0800等罕见加密位检测伪加密有个小技巧用unzip -l命令列出文件如果能显示文件列表但解压要密码大概率是伪加密。而真加密的情况下unzip -l也会要求输入密码。6. 文件格式的陷阱与启示通过zip伪加密这个案例我深刻体会到理解文件格式的重要性。很多看似复杂的安全防护其实都是建立在系统对文件格式的特定解读上。类似的技术思路还可以应用到PNG文件的IHDR块校验ELF文件的section header修改PDF文件的交叉引用表修复记得有一次比赛遇到个损坏的PDF就是通过手动修复文件头解决的。这种二进制文件分析能力在逆向工程、数字取证等领域都是必备技能。7. 工具链推荐从入门到精通经过多次实战我整理了一套处理zip伪加密的工具组合基础工具WinhexWindowsBless Hex EditorLinux010 Editor跨平台命令行工具xxd grep组合zipdetailsPerl脚本binwalk自动化分析高级分析HxD的模板解析功能010 Editor的zip模板radare2的二进制分析特别推荐010 Editor的模板功能它能自动解析zip结构并高亮显示关键字段比纯肉眼找偏移量效率高得多。模板文件可以从官网下载也可以自己根据zip规范编写。8. 从CTF到实战伪加密的变种与应用在实际渗透测试中伪加密技术有些有趣的变种应用。比如某些恶意软件会利用伪加密逃避杀毒软件扫描或者通过故意损坏zip文件头来隐藏数据。我曾在分析一个钓鱼邮件附件时发现攻击者把恶意脚本藏在伪加密的zip里大部分安全软件都会直接跳过检查。还有个有趣的技巧是制作自解压的伪加密zip。通过精心构造文件头可以让压缩包在Windows上显示需要密码但在Mac/Linux上自动解压。这种特性差异常被用于针对特定平台的攻击。