嘟嘟社区

【技术】通过「已知明文攻击」破解加密的 ZIP 压缩包


本帖最后由 hitachi 于 2022-10-11 18:35 编辑

最近有很多踢楼帖。踢楼帖一般在主帖中附带加密压缩包,内含中奖楼层,开奖时公布密码。

然而,有些压缩加密算法不安全。

本帖将介绍如何破解那些不安全的压缩包,提升大家信息安全意识。

相关帖子:https://hostloc.com/thread-1084344-1-1.html

PS,本帖不会影响既定结果,楼层已高。

友情提示

本帖内容仅供研究使用,你应当遵守所在区域的法律。

前置知识

zip 是相当古老的格式,传统上,其加密压缩时使用 ZipCrypto 算法。而 ZipCrypto 算法是弱算法,容易破解。 对于压缩包,除了蛮力攻击(暴破)外,常用的方法是已知明文攻击。
已知明文攻击,顾名思义,通过已知的部分明文,攻击其余未知的密文数据。

现在有成熟的流程和工具破解 ZipCrypto-Store 类型的压缩包。典型工具有:

  • rbkcrack:https://github.com/Aloxaf/rbkcrack
  • bkcrack:https://github.com/kimci86/bkcrack

本文以 bkcrack 为例,其基本参数如下:

  1. -C 加密的压缩包
  2. -c 压缩包里加密的文件(或提取的密文数据)
  3. -p 明文内容
  4. -k 输入密钥
  5. -o 偏移量

复制代码

破解步骤

第一步,准备明文

这是已公布密码的踢楼压缩包文本。

通过此文本,我们得知明文内容规律为:

中奖楼层为<number>楼。

其中 <number> 为数字。

据此,我们可得固定前缀:

  1. 中奖楼层为

复制代码

注意到文本使用 UTF-8 编码,而 UTF-8 编码下每一个汉字的长度是 3 字节。因此我们得到了 15 字节的明文数据。
新建文本文件 plain.txt,内容为上述固定前缀。

第二步,列出加密压缩包目录树

下载 bkcrack,使用以下命令列出加密压缩包的内容(注意编码问题,可能引起乱码):

  1. bkcrack -L 中奖楼层.zip

复制代码

第三步,执行攻击

使用 bkcrack 执行攻击(注意编码引起的乱码):

  1. bkcrack.exe -C 中奖楼层.zip -c "涓妤煎眰.txt" -p plain.txt -o 0

复制代码

等待 10 分钟,程序会给出压缩包密钥。注意此密钥不是压缩包密码。

第四步,提取解密后的文件

通过获取的密钥提取解密后的文件:

  1. bkcrack.exe -C 中奖楼层.zip -c "涓妤煎眰.txt" -k "29e6a7b7 3819d3a6 e0ff480b" -d output.txt

复制代码

打开 output.txt,即可取得明文文本,见题图。

工具限制

  • 要求至少已知连续 12 个字节的明文(知道得越多破解得越快)
  • 压缩包要采用 ZipCrypto 类(如 Store)算法

安全压缩建议

  • 使用 7z 格式,7z 格式能够加密目录树。压缩/解压软件推荐开源的 7-zip。
  • 若非要使用 Zip,加密算法建议选择 AES-256: Deflate
找个T楼帖子来个实战讲解吧,更容易看懂
已收藏,好帖帮顶。
申请楼主报销眼药水