写在前面
前几天在某个 CTF 的交流群想看看大佬们都在聊什么,偶然间看到有人发了一个 pdf (就是这篇文章),一开始顺手点下载下来没怎么看,过几天打开看了一下发现写得挺好的,这篇文章应该是一个大佬的博客里的文章,但是尝试去找到大佬的博客地址却一直没有找到,很遗憾 QAQ
伪加密、爆破、明文攻击和CRC32碰撞
zip 文件格式:
zip 文件由三部分组成:压缩的文件内容源数据、压缩的目录元数据、目录结束标识结构
伪加密
- 如果是没有加密的 zip 文件,压缩源文件数据区和压缩源文件目录区的
全局方式位标记
都为00 00
- 如果是真正加密的 zip 文件,压缩源文件数据区和压缩源文件目录区的
全局方式位标记
都为09 00
- 不同的压缩软件有差异,有些软件的全局方式位标记是
01 00
- 不同的压缩软件有差异,有些软件的全局方式位标记是
- 如果将未加密的 zip 文件中的
压缩源文件目录区
的全局方式位标记改为01 00
(或者09 00
),就会被压缩软件认定为是已加密,这就是伪加密
的原理
如何破解伪加密?
1、把压缩文件目录区的全局方式标记改回
00 00
2、
kali
和360压缩
能够直接打开伪加密压缩包
爆破
- 爆破就是逐个尝试字典中的密码去对压缩包进行解密,大概分为
暴力破解
、掩码破解
、字典破解
三种
- 暴力破解:选择密码的范围、长度等,由软件组合生成的密码进行破解
- 掩码破解:知道密码中的一部分,只需要按照规则构造其他部分进行破解
- 字典破解:通常是用户总结出来的常用的密码字典,导入字典文件用字典中的密码进行破解,强度取决于每个人的字典强度
- 爆破常用工具是 Windows 的软件
AZPR
,也可以自己动手写 py 脚本来爆破
已知明文攻击
- 已知明文攻击:攻击者已知明文、密文及算法,求密钥的过程
- 明文攻击是一个高效的攻击手段,比如当你不知道一个 zip 压缩包文件的密码,但是你有 zip 包中的一个已知文件(
文件大小要大于12Byte
)时,因为同一个 zip 压缩包里的所有压缩文件使用的是同一个加密密钥来加密的,所以可以用已知文件来找加密密钥,利用密钥来解锁其他加密文件 - 简单来说,就是利用已知文件推理爆破出加密所用密钥,利用这个密钥来解密其他文件
举个栗子:
现在我压缩了带密码的四个文件,已知明文 攻击测试.zip 中的 明文攻击.docx
进行对已知文件进行压缩,对比crc值
是否跟加密文件中的crc值
一样
同样是利用软件AZPR
进行明文攻击,成功获取到密文
注意:当明文的大小比较小时,或者密文过长,攻击速度会比较慢;即使有时没有恢复密码,也可以使 用明文攻击,最后点保存还是能得到压缩包里内容的,如果出现错误可以多试几款压缩软件
CRC32碰撞
- CRC32:CRC 本身是“冗余校验码”的意思,CRC32 标识则会产生一个 32bit (8 位 16 进制)的校验值
- CRC校验实用程序库,在数据存储和数据通讯领域,为了保证数据的正确,就不得不采用检错的手段,在诸多检错手段中,CRC 是最著名的一种,CRC 的全程是
循环冗余校验
- 在产生CRC32 时,源数据块的每一位都参与了运算,因此即使数据块中只有一位发生改变也会得到不同的CRC32 值,利用这个原理可以直接爆破出加密文件中的内容
- 每个文件都有唯一的CRC32 值,即便数据中的一个 bit 发生变化,也会导致CRC32 值不同,若是知道一段数据的长度和CRC32 值,便可以穷举数据,与其CRC32 对照,以此达到暴力破解的目的,但是限于CPU的性能,只适用于较小文本文件