写在前面

前几天在某个 CTF 的交流群想看看大佬们都在聊什么,偶然间看到有人发了一个 pdf (就是这篇文章),一开始顺手点下载下来没怎么看,过几天打开看了一下发现写得挺好的,这篇文章应该是一个大佬的博客里的文章,但是尝试去找到大佬的博客地址却一直没有找到,很遗憾 QAQ

[TOC]

伪加密、爆破、明文攻击和CRC32碰撞

  • zip 文件格式:

    zip 文件由三部分组成:压缩的文件内容源数据、压缩的目录元数据、目录结束标识结构

伪加密

  • 如果是没有加密的 zip 文件,压缩源文件数据区和压缩源文件目录区的全局方式位标记都为00 00

  • 如果是真正加密的 zip 文件,压缩源文件数据区和压缩源文件目录区的全局方式位标记都为09 00
    • 不同的压缩软件有差异,有些软件的全局方式位标记是01 00

  • 如果将未加密的 zip 文件中的压缩源文件目录区的全局方式位标记改为01 00(或者09 00),就会被压缩软件认定为是已加密,这就是伪加密的原理

如何破解伪加密?

1、把压缩文件目录区的全局方式标记改回00 00

2、kali360压缩 能够直接打开伪加密压缩包

爆破

  • 爆破就是逐个尝试字典中的密码去对压缩包进行解密,大概分为暴力破解掩码破解字典破解三种
  1. 暴力破解:选择密码的范围、长度等,由软件组合生成的密码进行破解
  2. 掩码破解:知道密码中的一部分,只需要按照规则构造其他部分进行破解
  3. 字典破解:通常是用户总结出来的常用的密码字典,导入字典文件用字典中的密码进行破解,强度取决于每个人的字典强度
  • 爆破常用工具是 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的性能,只适用于较小文本文件