bkcrack 明文攻击解zip加密包

Ant大约 6 分钟

bkcrack 明文攻击解zip加密包

bkcrack 是一个用于解密 zip 加密包的工具,它可以使用明文攻击来解密 zip 加密包。

bkcrack下载及安装教程参见github项目库:bkcrackopen in new window

bkcrack使用明文攻击解密zip加密包需要具备两个条件: 1.使用传统加密算法(如传统PKWARE加密、ZipCrypto等) 2.知道加密包中密文对应的明文,至少是连续的12个字节

一、用法

以下内容来源于github中的项目介绍

1、查看文件列表

要查看名为 archive.zip 的压缩文件内所有条目的文件名及元数据,可使用如下命令:

bkcrack -L archive.zip

使用 ZipCrypto 加密的条目易受已知明文攻击。

2、恢复内部密钥

进行攻击至少需要 12 字节的已知明文,其中至少 8 字节必须是连续的。已知的连续明文越多,攻击速度越快。

2.1 从 ZIP 压缩文件加载数据

假设加密压缩文件 encrypted.zip 中包含作为密文的条目 cipher,而包含已知明文的 plain.zip 中有条目 plain,则可按如下方式运行 bkcrack:

bkcrack -C encrypted.zip -c cipher -P plain.zip -p plain

2.2 从文件加载数据

(笔者注:推荐优先使用这个)

如果密文内容保存在文件 cipherfile 中(文件开头需包含对应的 12 字节加密头数据),已知明文保存在文件 plainfile 中,则可按如下方式运行 bkcrack:

bkcrack -c cipherfile -p plainfile

3、偏移量

如果已知明文对应的是密文中非起始位置的某部分,您可以指定一个偏移量。如果已知明文包含部分加密头数据,偏移量可以为负值。

bkcrack -c cipherfile -p plainfile -o 偏移量

4、稀疏已知明文

如果您已知的连续明文较少(介于 8 到 11 字节之间),但在其他已知偏移位置还知道一些零散字节,您可以通过提供这些信息来满足总计 12 字节已知明文的要求。使用 -x 标志,后跟偏移量和十六进制表示的字节即可。

bkcrack -c cipherfile -p plainfile -x 25 4b4f -x 30 21

5、解密数据

如果攻击成功,可以将与所用密文相关的已解密数据保存出来:

bkcrack -c cipherfile -p plainfile -d 解密后数据文件

如果通过之前的攻击已经获得了内部密钥,也可以使用 bkcrack 来解密数据:

bkcrack -c cipherfile -k 12345678 23456789 34567890 -d 解密后数据文件

6、解压缩

解密得到的数据可能仍是压缩的,这取决于创建 ZIP 文件时是否启用了压缩。如果使用了 Deflate 压缩算法,可以使用工具文件夹中提供的 Python 3 脚本进行解压。

python3 tools/inflate.py < 解密后数据文件 > 解压后数据文件

7、移除密码

要一步到位地获取加密压缩文件中所有条目的访问权限,您可以生成一个内容相同但无加密的新压缩文件。此操作默认所有条目最初均使用同一密码加密。

bkcrack -C encrypted.zip -k 12345678 23456789 34567890 -D 解密后压缩包.zip

8、更改密码

您也可以使用自选密码生成一个新的加密压缩文件:

bkcrack -C encrypted.zip -k 12345678 23456789 34567890 -U 解锁后压缩包.zip 新密码

您也可以通过指定与新密码对应的内部密钥表示来定义新密码:

bkcrack -C encrypted.zip -k 12345678 23456789 34567890 --change-keys 解锁后压缩包.zip 581da44e 8e40167f 50c009a0

上述两条命令可以结合使用,从而在不知道原密码但已知内部密钥的情况下修改加密压缩文件的内容:您可以先制作一个用自选密码加密的副本,然后在存档管理器中编辑该副本(在提示时输入您设定的密码),最后将修改后的存档用原始内部密钥重新加密。

9、恢复密码

在获得内部密钥的前提下,bkcrack 可以尝试找回原始密码。

9.1 暴力破解密码恢复

您可以在指定的字符集范围内搜索密码:

bkcrack -k 1ded830c 24454157 7213b8c5 -b ?p

您可以将搜索范围限制在特定长度或长度区间的密码:

bkcrack -k 1ded830c 24454157 7213b8c5 -b ?p -l 9
bkcrack -k 1ded830c 24454157 7213b8c5 -b ?p -l 8..10

选项 -r <长度> <字符集> 是 -l 0..<长度> -b <字符集> 的快捷方式:

bkcrack -k 1ded830c 24454157 7213b8c5 -r 10 ?p

9.2 基于掩码的密码恢复

如果您对密码的构成模式有所了解,可以通过指定掩码来限制搜索空间,从而极大加快恢复速度。这对于较长(例如 12 个或更多字符)的密码尤其重要,因为暴力破解会非常耗时。

例如,假设您模糊记得密码是由 8 个小写字母、一个连字符和 6 个数字组成,可以使用以下命令:

bkcrack -k 1940e266 d3fd3d89 71ce9871 -m ?l?l?l?l?l?l?l?l-?d?d?d?d?d?d

此命令可在毫秒级完成,而若采用暴力破解则需数小时。

10、字符集

暴力破解和基于掩码的密码恢复,其搜索空间都由字符集定义。字符集可以是一串具体的字符,也可以是预定义字符集的快捷方式。预定义字符集如下所列:

预定义字符集
预定义字符集

除了预定义字符集,您还可以使用 -s 选项定义自定义字符集。自定义字符集可以引用预定义字符集或其他自定义字符集。这在需要精确定义基于掩码的恢复搜索空间时特别有用。

例如,如果您知道密码由 10 个字母(大写或小写)和 5 个二进制数字(0 或 1)组成,可以使用以下命令:

bkcrack -k b8c377a6 f603160f 1832a78b -m ?x?x?x?x?x?x?x?x?x?x?y?y?y?y?y -s x ?u?l -s y 01

二、示例

bugku题库:https://ctf.bugku.com/challenges/detail/id/390.html?id=390&page=1open in new window

题目描述
题目描述

1、查看压缩包信息 使用的是ZipCrypto加密算法和Store压缩算法,压缩包中包含flag.png文件。(使用的是ZipCrypto加密算法,满足第一个条件)

压缩包信息
压缩包信息

2、使用bkcrack恢复密码

因为png格式的文件,前12位是固定的,所以可以使用前12位作为已知明文,恢复密码。方法如下:

自行构造一个png文件,用010Editor打开,只保留前12个字节,其他内容全部删除,命名为1.png。

恢复密码
恢复密码

使用key解密压缩包,将flag.png输出到当前目录。

输出flag
输出flag

在当前目录下找到flag.png文件,即为解压缩后的文件,双击打开。

flag内容
flag内容
Loading...