明文攻击
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:
发现加密的压缩包 Desktop.zip
中同样有一个名为 readme.txt
的文件
为了确定它们是否是同一个文件,可以通过 WinRAR、7-Zip 等解压软件来查看 CRC 值
可以看到加密的 Desktop.zip
中 readme.txt
的 CRC 值为 E615BDA4
,算法为 ZipCrypto Store
然后将 readme.txt
压缩为 zip 压缩包(需与加密压缩包内的 readme.txt
压缩格式一致),文件名随意,我这里命名为 readme.zip
可以看到这两个 readme.txt
文件的 CRC 值都是 E615BDA4
,基本可以确定是同一个文件
使用 ARCHPR 明文攻击
打开 ARCHPR,选择明文攻击,导入对应文件
明文文件就是将 readme.txt
压缩后的 readme.zip
如果在使用明文攻击的时候,ARCHPR 出现这种报错:
在选定的档案中没有匹配的文件。如果您想要仅使用文件的一部分执行明文攻击,请修改档案,使每个档案中只包含一个文件。
可能是压缩软件的问题,构造明文压缩包时要选用与加密压缩包相同的压缩软件,例如加密压缩包是通过 WinRAR 压缩的,用 7-Zip 制作明文压缩包,可能会出现报错的情况,请尝试更换压缩软件
注意:这里不需要等到 ARCHPR 破解的进度条走完
明文攻击时长一般在 5 - 10 分钟,运行至 5 分钟左右可以手动停止
如果手动停止时 ARCHPR 还没有找到密钥,则会显示“被用户终止”,此时只需再次点击“开始”,等待几分钟后再次手动停止,重复此操作
如果手动停止时 ARCHPR 已经找到密钥,会弹出一个窗口,显示加密密钥的三个 key 值,我这里是 [ df96dc88 b432ddfd df4b9e93 ]
,虽然文件口令未找到,但不要紧
点击右边的确定后,ARCHPR 会自动弹出一个保存文件的窗口,文件名为 Desktop_decrypted.zip
,这个压缩包就是去除了加密的 Desktop.zip
直接正常解压 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 | 去除源密码按照指定的新密码保存压缩包 |
- 查看压缩包中的内容
bkcrack -L zip压缩包
- 根据明文文件获取加密压缩包的三个密钥 key
bkcrack -C zip加密压缩包 -c zip加密压缩包内的文件 -p 明文文件
- 还原加密压缩包中的内容
bkcrack -C zip加密压缩包 -c zip加密压缩包内的文件(想要还原的) -k key1 key2 key3 -d 还原后保存的文件
- 去除加密压缩包的密码
bkcrack -C zip加密压缩包 -k key1 key2 key3 -U 去除加密后的压缩包文件路径 指定新的解压密码
使用上述命令,在 ~/Desktop.zip
同目录下会生成一个新的压缩包 unlocked.zip
,解压密码为 123456
,压缩包内容与 ~/Desktop.zip
一模一样
- 根据密钥 key 尝试还原出密码(太耗时,不建议也没必要)
bkcrack -k key1 key2 key3 -r 密码长度 ?参数
密码长度为
16
时,尝试 1 - 16 位密码;密码长度为11..13
时,尝试 11 - 13 位密码参数为
a
代表所有字符,p
代表可打印字符,d
代表数字,l
代表小写字母,u
代表大写字母,d/l
代表数字和小写字母,d/l/u
代表数字、小写字母和大写字母