从 zip 文件格式深入研究伪加密原理
字数 1896 2025-12-06 12:11:23
ZIP文件伪加密技术研究
1. ZIP文件格式基础结构
ZIP文件由三个主要部分组成:
1.1 本地文件头(Local File Header)
- 固定头标识:50 4B 03 04
- 解压所需pkware版本:14 00
- 全局方式位标记(加密标志):09 00(关键字段)
- 压缩方式:08 00
- 最后修改时间:50 A3
- 最后修改日期:A5 4A
- CRC-32校验值:21 38 76 65
- 压缩后大小:19 00 00 00
- 解压前大小:17 00 00 00
- 文件名长度:08 00
- 扩展字段长度:00 00
- 文件名:66 6C 61 67 2E 74 78 74(flag.txt)
- 文件数据:4B CB 49 4C AF 76...
1.2 中央目录文件头(Central Directory Header)
- 中央目录标识:50 4B 01 02
- ZIP程序版本字段:1F 00
- 解压所需pkware版本:14 00
- 全局方式位标记(加密标志):09 00(关键字段)
- 压缩方式:08 00
- 最后修改时间:50 A3
- 最后修改日期:A5 4A
- CRC-32校验值:21 38 76 65
- 压缩后大小:19 00 00 00
- 解压前大小:17 00 00 00
- 文件名长度:08 00
- 扩展字段长度:24 00
- 文件注释长度:00 00
- 单卷ZIP文件标识:00 00
- 内部文件属性:20 00
- 文件权限字段:00 00 00 00
- 文件名:66 6C 61 67 2E 74 78 74
- 额外字段:0A 00...
1.3 目录结束标识(End of Central Directory Record)
- EOCD标识:50 4B 05 06
- 当前磁盘编号:00 00
- 中央目录所在磁盘:00 00
- 此磁盘中央目录中的条目总数:01 00
- 中央目录中的条目总数:01 00
2. 伪加密原理详解
2.1 加密标志位含义
ZIP文件在两个位置设置加密标志:
- 本地文件头中的全局方式位标记
- 中央目录文件头中的全局方式位标记
正常未加密文件:全局方式位标记 = 00 00
伪加密文件:全局方式位标记 = 01 00 或 09 00
2.2 伪加密的本质
- 将全局方式位标记手动修改为01或09
- 使解压软件误以为文件已加密,要求输入密码
- 实际文件数据并未真正加密,压缩数据仍然是正常的deflate流
- 真正的加密ZIP中,压缩数据段应该被加密成随机字节流
3. 伪加密破解方法
3.1 完全破解(推荐)
将两个位置的加密标志都修改为00 00:
- 修改本地文件头中的全局方式位标记(偏移位置)
- 修改中央目录文件头中的全局方式位标记
3.2 部分破解
只修改其中一个位置的加密标志:
3.2.1 仅修改文件头加密标志
- 7-Zip:可以解压出文件(虽然报头部错误)
- WinRAR:无法解压
- Windows自带解压:无法解压
- Bandizip:无法解压
3.2.2 仅修改中央目录加密标志
- 所有解压软件都能正常打开文件
4. 不同解压软件的行为差异
4.1 7-Zip
- 主要检查文件头的全局方式位标记
- 如果文件头标志为00,即使中央目录标志为加密,也能正常解压
- 对部分破解的文件会报"头部错误",但能成功解压出内容
4.2 WinRAR/Windows自带/Bandizip
- 检查更为严格,需要两个位置的加密标志都正确
- 任何一个位置显示加密,都会要求输入密码
- 无法通过部分破解来解压
5. 实战操作步骤
5.1 识别伪加密文件
- 使用十六进制编辑器打开ZIP文件
- 查找50 4B 03 04(本地文件头标识)
- 检查其后第6-7字节(全局方式位标记)
- 查找50 4B 01 02(中央目录标识)
- 检查其后第8-9字节(全局方式位标记)
5.2 修复伪加密
- 使用十六进制编辑器修改相应字节
- 将01 00或09 00改为00 00
- 建议同时修改两个位置确保兼容性
- 保存文件后测试解压
6. 技术要点总结
- 双重加密标志:ZIP文件在文件头和中央目录都有加密标志
- 软件差异:不同解压软件对加密标志的检查策略不同
- 数据真实性:伪加密文件的压缩数据实际上未加密
- 完全修复:修改两个位置的加密标志确保最大兼容性
- CTF应用:此技术常见于CTF比赛的Misc类题目中
通过深入理解ZIP文件格式和伪加密原理,可以有效识别和修复这类特殊的"加密"文件,在数字取证和CTF竞赛中具有重要应用价值。