zip 明文攻击

zip 明文攻击是针对加密 zip 压缩包的一种高效攻击手段,由于同一个 zip 压缩包里的所有文件都是使用同一个加密密钥来加密的,因此可以利用压缩包中的某个已知文件,在不知道解压密码的情况下还原出压缩包中的所有文件

zip 传统加密算法本质上是伪随机数流和明文进行异或,产生这个伪随机流需要用到 3 个 32 bits 的 key,找到这 3 个 key,就能解开加密的文件。如果可以获得加密压缩包中的任意一个文件,用同样的压缩方法进行无密码的压缩,分析无密码 zip 和有密码 zip 的不同之处就能得到 3 个 key,进而在不知道解压密码的情况下获取加密压缩包中的文件

ARCHPR

使用 ARCHPR 进行明文攻击时,首先需要确定明文文件与加密的 zip 压缩包中的文件是否为同一个文件,另外,压缩包要采用 ZipCrypto 类(如:Store)算法,不能采用 AES-256 加密

确定明文文件

例如,获取到一个没有密码的明文文件 readme.txt,且文件大小大于 12 Byte:

CTF-Misc_明文攻击2.png

发现加密的压缩包 Desktop.zip 中同样有一个名为 readme.txt 的文件

CTF-Misc_明文攻击3.png

为了确定它们是否是同一个文件,可以通过 WinRAR、7-Zip 等解压软件来查看 CRC 值

可以看到加密的 Desktop.zipreadme.txt 的 CRC 值为 E615BDA4,算法为 ZipCrypto Store

CTF-Misc_明文攻击1.png

然后将 readme.txt 压缩为 zip 压缩包(需与加密压缩包内的 readme.txt 压缩格式一致),文件名随意,我这里命名为 readme.zip

CTF-Misc_明文攻击4.png

可以看到这两个 readme.txt 文件的 CRC 值都是 E615BDA4,基本可以确定是同一个文件


使用 ARCHPR 明文攻击

打开 ARCHPR,选择明文攻击,导入对应文件

明文文件就是将 readme.txt 压缩后的 readme.zip

如果在使用明文攻击的时候,ARCHPR 出现这种报错:

在选定的档案中没有匹配的文件。如果您想要仅使用文件的一部分执行明文攻击,请修改档案,使每个档案中只包含一个文件。

可能是压缩软件的问题,构造明文压缩包时要选用与加密压缩包相同的压缩软件,例如加密压缩包是通过 WinRAR 压缩的,用 7-Zip 制作明文压缩包,可能会出现报错的情况,请尝试更换压缩软件

CTF-Misc_明文攻击5.png

注意:这里不需要等到 ARCHPR 破解的进度条走完

明文攻击时长一般在 5 - 10 分钟,运行至 5 分钟左右可以手动停止

如果手动停止时 ARCHPR 还没有找到密钥,则会显示“被用户终止”,此时只需再次点击“开始”,等待几分钟后再次手动停止,重复此操作

CTF-Misc_明文攻击8.png

如果手动停止时 ARCHPR 已经找到密钥,会弹出一个窗口,显示加密密钥的三个 key 值,我这里是 [ df96dc88 b432ddfd df4b9e93 ],虽然文件口令未找到,但不要紧

CTF-Misc_明文攻击6.png

点击右边的确定后,ARCHPR 会自动弹出一个保存文件的窗口,文件名为 Desktop_decrypted.zip,这个压缩包就是去除了加密的 Desktop.zip

CTF-Misc_明文攻击7.png

CTF-Misc_明文攻击9.png

直接正常解压 Desktop_decrypted.zip 即可获得加密的 Desktop.zip 中的所有文件


bkcrack

使用 bkcrack 可以不需要明文文件,只需要知道加密压缩包内容的连续 12 字节(至少 12 字节,知道得越多破解得越快),即可进行明文攻击,压缩包要采用 ZipCrypto 类(如:Store)算法

下载地址:kimci86/bkcrack: Crack legacy zip encryption with Biham and Kocher’s known plaintext attack.

常用参数:

参数含义
-L查看压缩包中的内容
-C加密的压缩包
-c压缩包内加密的文件(参照 bkcrack -L 中的 Name 项来写)
-p明文内容(无需压缩为 zip)
-k输入 key
-x偏移量
-d攻击完成后导出解密文件
-U去除源密码按照指定的新密码保存压缩包
  1. 查看压缩包中的内容
bkcrack -L zip压缩包

CTF-Misc_明文攻击10.png

  1. 根据明文文件获取加密压缩包的三个密钥 key
bkcrack -C zip加密压缩包 -c zip加密压缩包内的文件 -p 明文文件

CTF-Misc_明文攻击11.png

  1. 还原加密压缩包中的内容
bkcrack -C zip加密压缩包 -c zip加密压缩包内的文件(想要还原的) -k key1 key2 key3 -d 还原后保存的文件

CTF-Misc_明文攻击12.png

  1. 去除加密压缩包的密码
bkcrack -C zip加密压缩包 -k key1 key2 key3 -U 去除加密后的压缩包文件路径 指定新的解压密码

CTF-Misc_明文攻击13.png

使用上述命令,在 ~/Desktop.zip 同目录下会生成一个新的压缩包 unlocked.zip,解压密码为 123456,压缩包内容与 ~/Desktop.zip 一模一样

  1. 根据密钥 key 尝试还原出密码(太耗时,不建议也没必要
bkcrack -k key1 key2 key3 -r 密码长度 ?参数
  • 密码长度为 16 时,尝试 1 - 16 位密码;密码长度为 11..13 时,尝试 11 - 13 位密码

  • 参数为 a 代表所有字符,p 代表可打印字符,d 代表数字,l 代表小写字母,u 代表大写字母,d/l 代表数字和小写字母,d/l/u 代表数字、小写字母和大写字母