关于bkcrack
ZIP压缩文件中可能包含许多内容可以被压缩或加密的条目,而这些数据条目可以使用基于密码的对称加密算法(称为传统PKWARE加密、传统加密或ZipCrypto)进行加密。该算法生成一个伪随机字节流(密钥流),将其与条目的内容(明文)进行异或运算,以生成加密数据(密文)。生成器的状态由三个32位整数组成,使用密码进行初始化,然后随着加密的进行,使用明文不断更新。Eli Biham和Paul C.Kocher在研究论文《PKZIP流密码的已知明文攻击》中所示,这种加密算法易受已知明文攻击。给定密文和12个或更多字节的对应明文,可以恢复密钥流生成器的内部状态。这种内部状态足以完全解密密文以及使用相同密码加密的其他条目。它还可以用于对复杂度为nl-6的密码进行加密,其中n是字符集的大小,l是密码的长度。
bkcrack是一款基于已知明文攻击的传统zip加密破解工具,该工具基于Biham和Kocher的已知明文攻击实现其功能。该工具是一款命令行工具,并实现了下列功能:
1、从密文和明文中恢复内部状态;
2、使用内部状态更改ZIP文件的密码;
3、从内部状态恢复原始密码;
工具安装
预编译包
我们可以直接访问该项目的【Releases页面】下载官方发布的最新bkcrack预编译版本。
项目提供了针对Ubuntu、macOS和Windows操作系统的预编译包,我们可以选择所需版本下载并解压即可。
在Windows平台上,我们还需要安装和配置微软运行时库,如果没有安装的话,请自行下载最新版本的Microsoft Visual C++ Redistributable包。
源码编译
除此之外,我们还可以使用下列命令将该项目源码克隆至本地:
git clone https://github.com/kimci86/bkcrack.git
然后使用CMake手动构建项目代码。
接下来,运行下列命令将会在项目install目录中创建一个安装版本:
cmake -S . -B build -DCMAKE_INSTALL_PREFIX=install cmake --build build --config Release cmake --build build --config Release --target install
第三方包
工具使用
枚举数据条目
我们可以使用下列命令查看名为archive.zip文档中的所有条目名称和元数据:
bkcrack -L archive.zip
使用ZipCrypto加密的条目无法抵御已知明文攻击。
恢复内部密钥
此操作需要至少12字节的已知明文,相邻的已知明文越多,破解速度越快。
从ZIP文档加载数据
假设ZIP文档名为encrypted.zip,条目cipher为密文,plain.zip中包含条目plain为已知明文,即可运行下列命令:
bkcrack -C encrypted.zip -c cipher -P plain.zip -p plain
从文件加载数据
假设文件cipherfile中包含密文,plainfile包含已知明文,即可运行下列命令:
bkcrack -c cipherfile -p plainfile
偏移量
如果明文对应于密文开头以外的部分,则可以指定偏移量。如果明文包含加密Header的一部分,则该值可能为负值:
bkcrack -c cipherfile -p plainfile -o offset
稀疏明文
如果你知道很少的连续明文(在8到11个字节之间),但知道一些其他已知偏移量的字节,则可以提供这些信息以达到总共12个已知字节的要求。为此,请使用-x参数,后跟偏移量和十六进制字节:
bkcrack -c cipherfile -p plainfile -x 25 4b4f -x 30 21
线程数量
如果bkcrack是在启用并行模式的情况下构建的,则可以通过环境变量OMP_NUM_threads设置使用的线程数。
解密器
如果攻击成功,可以使用下列命令保存解密数据以及相关的密文:
bkcrack -c cipherfile -p plainfile -d decipheredfile
如果从之前的攻击获取到了密钥,则可以使用下列命令继续解密数据:
bkcrack -c cipherfile -k 12345678 23456789 34567890 -d decipheredfile
解压缩
python3 tools/inflate.py < decipheredfile > decompressedfile
解锁加密文档
bkcrack -C encrypted.zip -k 12345678 23456789 34567890 -U unlocked.zip password
恢复密码
根据给定的内部密钥,bkcrack还可以尝试找出原始密码:
bkcrack -k 1ded830c 24454157 7213b8c5 -r 10 ?p
我们还可以指定最小的密码长度:
bkcrack -k 18f285c6 881f2169 b35d661d -r 11..13 ?p
许可证协议
本项目的开发与发布遵循Zlib开源许可证协议。
项目地址
bkcrack:【GitHub传送门】