来源:How to do a ZipCrypto plaintext attack
省流: 应用一款bkcrack工具来破解被加密的zip压缩文件。其实,只是对一个过时的加密方法 ZipCrypto 进行明文攻击,利用这款攻击可以在知道极少的明文的情况下发起攻击,但是在现在的实际情况下使用这种加密方法的压缩文件很少了,并无太多实际攻击利用价值。
工具下载:bkcrack
在开始前,需要你要确认你的zip压缩文件的加密方式。
加密方式 | 难度 |
---|---|
AES256 | 不适用❌ |
ZipCrypto Deflate | 困难⚠ |
ZipCrypto Store | 适合✅ |
我使用7-zip,可以这样查看压缩包文件使用了怎样的算法。
这里的明文攻击,指的是我知道这个加密的压缩包中的某个文件未加密前的一部分明文且知道这部分明文所在文件的位置,这样就可以开始明文攻击了。bkcrack这个工具至少需要12个字节的明文信息,其中最少有8个字节是连续的。
举个例子就是,某些文件格式有固定的内容信息,在压缩包内有这样的文件,我就可以利用这样固定的信息来展开攻击。
实际举例加操作步骤:
准备工作:
生成加密的压缩文件
我选择将一个png图片和一个pdf文件添加到一个加密压缩包文件中。 以7-zip的界面为例。需要选择加密算法为 “ZipCrypto”,压缩等级选择“仅存储”,记得不要忘记输入密码(随便输入,反正等会要来破解)。
准备好明文文件
你可以安装HxD来直接观察及修改文件的字节。因为png格式的图片有固定的文件头89 50 4E 47 0D 0A 1A 0A
和文件尾00 00 00 00 49 45 4E 44 AE 42 60 82
,所以我们创建一个pnghead
文件写入上面的文件头字节。因为要开展攻击需要至少12个字节的明文信息,所以等会还要提交png文件尾的字节序(同时需要这段字节序在文件中的偏移量)。
展开攻击
获取key
.\bkcrack.exe -C "Desktop.zip" -c "a.png" -p pnghead -x 108567 0000000049454E44AE426082
# -x 偏移量 png固定的文件尾字节序
# 因为 a.png 大小为108567,文件尾固定字节序长度为12,所以偏移量是 108567-12 = 108567
得到key
提取pdf文件
.\bkcrack.exe -C "Desktop.zip" -c "5519D.pdf" -k 093be83c 92bb5eca 9858b13a -d "1.pdf"
这下,可以看见pdf文件的内容了。
尝试恢复密码
.\bkcrack.exe -C "Desktop.zip" -k 9bab1626 bf89dfb6 fb02257c -r 15 ?p
# -r 尝试在指定的长度下恢复密码,15为密码最大长度。
# 具体见 bkcrack -h
某些情况下,人家总是使用同一种密码呢😏
为什么 Deflate 困难?
因为 ZipCrypto Deflate 是先压缩再加密,压缩后内容的与之前的大变样了,在不知道整个文件是如何的情况下很难知道那些明文是如何被压缩的。感觉这个方向还可以再深究一下。
这个工具的官方教程:tutorial.md
推荐阅读:
下篇预告:这个小玩意还不够过瘾,想去尝试了解下更厉害的工具 hashcat。