破解 ZipCrypto 加密——bkcrack 明文攻击介绍

破解 ZipCrypto 加密——bkcrack 明文攻击介绍
在日常工作和生活中,ZIP 文件广泛用于压缩和存储数据。然而,ZIP 文件中常用的加密算法 ZipCrypto 存在已知的安全漏洞,允许攻击者通过明文攻击(Known-plaintext attack)破解加密密码。今天,我们来介绍一款强大的工具——bkcrack,它是如何利用明文攻击快速破解 ZipCrypto 加密的。
什么是 ZipCrypto?
ZipCrypto 是 ZIP 文件中一种传统且广泛支持的加密方式,它并非特别安全,主要设计用于简单保护压缩文件数据。它基于三个 32 位的密钥值对数据进行加密,流程较为简单。
尽管它支持密码保护,但由于设计上的缺陷,它并不能防止密码被暴力破解或通过明文攻击轻松破解。
什么是明文攻击?
明文攻击(Known-plaintext attack)指攻击者掌握部分加密数据对应的原始明文,通过分析这部分明文与密文的对应关系,推断出密钥,进而破解整个加密内容。
在 ZipCrypto 的场景中,攻击者只要知道或能猜出压缩文件中某个部分的原始内容,就能利用明文攻击技术还原压缩包密码。
bkcrack 是什么?
bkcrack 是一个开源的命令行工具,专门用来破解使用 ZipCrypto 加密的 ZIP 文件。它利用了 ZipCrypto 的明文攻击漏洞,允许用户通过提供部分已知明文,快速推算出压缩包的密码。
bkcrack 不同于传统的暴力破解工具,它不需要大量尝试所有密码组合,而是通过算法分析明文和密文的关系,大幅缩短破解时间。
bkcrack 破解流程简介
- 准备数据
需要获取加密 ZIP 文件和对应的部分已知明文。比如某个文件的前几百字节或者固定格式的文件头。 - 提取校验数据
bkcrack 通过读取 ZIP 文件的文件头和加密数据,结合已知明文进行分析。 - 计算密钥
工具运用 ZipCrypto 的密钥更新算法,反向计算出三个密钥的初始值。 - 恢复密码
根据密钥反推密码字符串,最终得到用于加密 ZIP 文件的密码。
bkcrack 使用示例
1、假设你有一个被 ZipCrypto 加密的 ZIP 文件 test.zip,并且你知道其中某个文件 test.png 的前 12 字节明文内容。
首先查看其中的文件,store代表是仅加密未压缩,这种可以很容易通过明文攻击得到结果。
PS F:\myfiles\zip明文攻击> bkcrack -L test.zip
bkcrack 1.7.0 - 2024-05-26
Archive: test.zip
Index Encryption Compression CRC32 Uncompressed Packed size Name
----- ---------- ----------- -------- ------------ ------------ ----------------
0 ZipCrypto Store 72ec019e 10435218 10435230 test.png
然后注意其中的文件,有很多格式的文件有固定的文件头,比如png的文件头通常如下所示。

那么我们可以新建一个文件,内容为上述字节。此处我用notepad ++新建文件,编辑内容为

然后使用下述命令,可以得到3个key。
PS F:\myfiles\zip明文攻击> bkcrack -C test.zip -c test.png -p plain.txt
bkcrack 1.7.0 - 2024-05-26
[19:54:25] Z reduction using 9 bytes of known plaintext
100.0 % (9 / 9)
[19:54:25] Attack on 672802 Z values at index 6
Keys: 77f6c3a4 8c3afefa 2121da8f
70.1 % (471439 / 672802)
Found a solution. Stopping.
You may resume the attack with the option: --continue-attack 471439
[19:58:04] Keys
77f6c3a4 8c3afefa 2121da8f
通过3个key可以解压文件。通过下述命令。
PS F:\myfiles\zip明文攻击> bkcrack -C test.zip -k 77f6c3a4 8c3afefa 2121da8f -D test_without_password.zip
bkcrack 1.7.0 - 2024-05-26
[20:06:58] Writing decrypted archive test_without_password.zip
100.0 % (1 / 1)
Zip error: could not find end of central directory record.
2、非store压缩
压缩加密的流程是先压缩,再加密,对于store压缩,其实就是压缩选项中的不压缩,所以明文攻击针对的就是原文件的字节内容。但是对于非store压缩,例如deflate。那么明文攻击中的明文,其实是采取相同压缩方式的非加密版的文件字节。比如我新建一个压缩文件test2.zip。
PS F:\myfiles\zip明文攻击> bkcrack -L test2.zip
bkcrack 1.7.0 - 2024-05-26
Archive: test2.zip
Index Encryption Compression CRC32 Uncompressed Packed size Name
----- ---------- ----------- -------- ------------ ------------ ----------------
0 ZipCrypto Deflate 15016e21 155266 155164 1720533192014.jpg
1 ZipCrypto Deflate 72ec019e 10435218 10424783 test.png
显然上述的方法就失效了,因为经过压缩的test.png字节已经不符合标准的png了。这样的话就只有一种方法,必须有test.png的原文件,而且还要知道采用的什么压缩软件。不同的压缩软件生成的压缩包的头信息一般是不同的,下面的可以作为参考。
360 & 7-zip
50 4B 03 04 14 00 01 00 08 00
bandizip
50 4B 03 04 14 00 0B 00 08 00
50 4B 03 04 14 00 09 00 08 00
50 4B 03 04 14 00 00 00 08 00
winrar
50 4B 03 04 14 00 09 00 08 00
2345 haozip
50 4B 03 04 14 00 01 08 08 00
假设此时我们已经有了原文件test.png,也知道了采取的压缩软件和方法。采用相同的压缩软件进行压缩,但是不设置密码。可以得到test_plain.zip。然后运行如下命令。
PS F:\myfiles\zip明文攻击> bkcrack -C test2.zip -c test.png -P test_plain.zip -p test.png
bkcrack 1.7.0 - 2024-05-26
[20:28:36] Z reduction using 1048569 bytes of known plaintext
2.4 % (25327 / 1048569)
[20:28:38] Attack on 56 Z values at index 1023471
Keys: 824281f1 702a474c 55096a9e
100.0 % (56 / 56)
Found a solution. Stopping.
[20:28:38] Keys
824281f1 702a474c 55096a9e
bkcrack不一定必须要明文文件,只通过已知的12个字节也可以。比如下面的-x的第一个参数是偏移量,第二个是连续的字节。
PS F:\myfiles\zip明文攻击> bkcrack -C test.zip -c test.png -x 0 89504e470d0a1a0a0000000d49484452
bkcrack 1.7.0 - 2024-05-26
[20:31:32] Z reduction using 9 bytes of known plaintext
100.0 % (9 / 9)
[20:31:32] Attack on 704192 Z values at index 6
Keys: 77f6c3a4 8c3afefa 2121da8f
15.2 % (107229 / 704192)
Found a solution. Stopping.
You may resume the attack with the option: --continue-attack 107229
[20:32:20] Keys
77f6c3a4 8c3afefa 2121da8f
明文攻击的限制和应用场景
- 需要部分明文:bkcrack 的明文攻击依赖于已知的部分明文数据。如果完全没有明文信息,无法利用该漏洞。
- 对 ZipCrypto 有效:现代的 AES 加密方式不会被 bkcrack 攻破。
- 适用旧压缩包:许多老旧 ZIP 工具默认仍使用 ZipCrypto,bkcrack 针对这类加密文件效果显著。
总结
bkcrack 利用 ZipCrypto 加密设计的弱点,通过明文攻击方式实现快速破解,是破解 ZipCrypto 加密文件的利器。它提醒我们:ZipCrypto 不再安全,建议在需要密码保护的场景中使用更安全的 AES 加密方式。
以上只是bkcrack的简单示例,具体请参考原作者的仓库
标题:破解 ZipCrypto 加密——bkcrack 明文攻击介绍
作者:zmt2486
地址:HTTPS://www.zmtdemo.site/articles/2025/08/11/1754915881310.html
评论