压缩包隐写
字数 1336 2025-08-11 21:26:16
压缩包隐写技术详解
一、压缩包基础原理
压缩包的基本原理是通过查找文件内的重复字节,建立"词典"文件并用代码表示重复内容,从而减少冗余数据。例如:
- 原始数据:"000011111"
- 压缩后:"0(4)1(5)"
在CTF比赛中常见的压缩包类型:
- ZIP文件
- RAR文件
二、文件头识别
1. ZIP文件头
- 文本格式:以"PK"开头
- 十六进制:504B或更完整的504B0304
- 在010editor中的表现:
2. RAR文件头
- 文本格式:以"Rar"开头
- 十六进制:
- RAR5:52 61 72 21 1A 07 01 00
- RAR4:52 61 72 21 1A 07 00
- RAR4文件尾:C4 3D 7B 00 40 07 00
三、压缩包隐写技术
1. 爆破技术
- 适用场景:已知压缩包被加密且密码有规律
- 常用工具:ARCHPR
- 爆破策略:
- 6位纯数字
- 生日日期
- 姓名首字母等特定组合
2. 伪加密技术
ZIP伪加密
- 原理:修改全局方式位标记
- 奇数(如01):表示加密
- 偶数(如00):表示未加密
- 修改方法:
- 标志位位于504B0304之后的固定位置
- 将偶数改为奇数即可实现伪加密
RAR伪加密
- 原理:修改HEAD_FLAGS内的PASSWORD_ENCRYPTED字段
- 修改方法:
- 使用010editor的文件模板识别
- 将PASSWORD_ENCRYPTED字段改为1
3. CRC32爆破
- 原理:利用CRC32校验值的唯一性
- 适用条件:被压缩文件很小(通常<10字节)
- 实现方式:
- 使用开源脚本爆破
- 从结果中筛选有意义的单词组合
4. 已知明文攻击
- 原理:利用压缩包中已知文件推算加密密钥
- 必要条件:
- 已知文件大小>12Byte
- 使用相同压缩软件和压缩方式
- 攻击步骤:
- 创建无密码的相同文件压缩包
- 比较两个压缩包中相同文件
- 提取差异部分(3个32bit key)
- 使用key解密其他文件
5. DOCX文件分析
- 本质:ZIP格式的压缩文件
- 文件头:504B0304
- 分析步骤:
- 修改后缀为.zip
- 解压后可查看XML、Image等文件
- 查找隐藏文件或图片
6. 注释信息隐藏
- 位置:压缩包的注释信息位
- 查看方法:使用常规解压缩软件查看
7. 文件修复
- 常见问题:文件头损坏
- 修复方法:
- 识别正确的文件头
- 手动添加缺失的文件头
- 重新解压
四、实战示例
示例1:十六进制转压缩包
- 识别504B0304开头的十六进制数据
- 使用CyberChef转换为ZIP文件
- 解压获取flag.txt
示例2:CRC32爆破
- 获取多个CRC32值
- 使用脚本爆破得到可能结果
- 组合有意义单词如"th1s_hxb_secret"
示例3:明文攻击
- 找到压缩包中已知的无加密版本文件
- 使用相同方式压缩该文件
- 用Advanced Archive Password Recovery进行攻击
五、工具推荐
- 010editor:分析文件结构
- ARCHPR:密码爆破
- CyberChef:数据转换
- Advanced Archive Password Recovery:明文攻击
六、防御措施
- 使用强密码
- 避免在压缩包中包含可预测的文件
- 定期检查压缩包完整性
- 对敏感文件使用多重加密