如何在Python中暴力破解ZIP文件密码(代码实现教程)

了解如何使用内置的 zipfile 模块在 Python 中使用字典攻击强力破解 zip 文件密码。
Python如何暴力破解ZIP文件密码?假设你的任务是调查嫌疑人的计算机,并且你发现了一个看起来非常有用但受密码保护的 zip 文件。在本教程中,你将编写一个简单的 Python 脚本,尝试使用字典攻击破解 zip 文件的密码。
暴力破解ZIP文件密码示例:我们将使用 Python 的内置zipfile模块和第三方tqdm库来快速打印进度条:

pip3 install tqdm

如何在Python中暴力破解ZIP文件密码?如前所述,我们将使用字典攻击,这意味着我们将需要一个词表来暴力破解这个受密码保护的 zip 文件。在本教程中,我们将使用大型的rockyou wordlist(大小约为133MB),如果你使用的是Kali Linux,你可以在/usr/share/wordlists/rockyou.txt.gz路径下找到它。否则,你可以在此处下载。
你还可以使用 crunch 工具来生成你指定的自定义词表。
相关:如何在 Python 中破解 PDF 文件。 
打开一个新的 Python 文件并按照以下步骤操作:
import zipfile from tqdm import tqdm

让我们指定我们的目标 zip 文件以及单词列表路径:
# the password list path you want to use, must be available in the current directory wordlist = "rockyou.txt" # the zip file you want to crack its password zip_file = "secret.zip"

【如何在Python中暴力破解ZIP文件密码(代码实现教程)】要在 Python 中读取 zip 文件,我们使用zipfile.ZipFile类,该类具有打开、读取、写入、关闭、列出和提取 zip 文件的方法(我们将在这里仅使用extractall()方法):
# initialize the Zip File object zip_file = zipfile.ZipFile(zip_file) # count the number of words in this wordlist n_words = len(list(open(wordlist, "rb"))) # print the total number of passwords print("Total passwords to test:", n_words)

Python如何暴力破解ZIP文件密码?请注意,我们读取了整个单词表,然后仅获取要测试的密码数量,这对tqdm很有用,因此我们可以跟踪我们在暴力破解过程中的位置,以下是其余暴力破解ZIP文件密码示例代码:
with open(wordlist, "rb") as wordlist: for word in tqdm(wordlist, total=n_words, unit="word"): try: zip_file.extractall(pwd=word.strip()) except: continue else: print("[ +] Password found:", word.decode().strip()) exit(0) print("[ !] Password not found, try other wordlist.")

由于 wordlist 现在是一个 Python 生成器,使用tqdm不会提供太多进度信息,这就是为什么我引入了总参数来让tqdm了解文件中有多少单词。
我们打开wordlist逐字读取,并尝试将其作为密码提取zip文件,读取整行会带有换行符,因此我们使用strip()方法去除空格。
每当密码不正确时,extractall()方法都会引发异常,因此在这种情况下我们可以传递到下一个密码,否则,我们将打印正确的密码并退出程序。
如何在Python中暴力破解ZIP文件密码?我对代码进行了一些编辑,以接受来自命令行参数的 zip 和 wordlist 文件,请在此处查看。
检查我的结果:
root@rockikz:~# gunzip /usr/share/wordlists/rockyou.txt.gz root@rockikz:~# python3 zip_cracker.py secret.zip /usr/share/wordlists/rockyou.txt Total passwords to test: 14344395 3%|▉| 435977/14344395 [ 01:15< 40:55, 5665.23word/s] [ +] Password found: abcdef12345

Python如何暴力破解ZIP文件密码?如你所见,经过大约435K 次试验后,我找到了密码,这在我的机器上花费了大约一分钟。请注意,rockyou单词表有超过1400万个单词,这些单词是按频率排序的最常用密码。
好的,我们已经成功构建了一个简单但有用的脚本来破解 zip 文件密码,如果你无法使用此列表破解它,请尝试使用更大的单词列表。
最后,我强烈建议你使用多个线程来更快地破解密码,如果你成功了,请在下面的评论中与我们分享你的结果!

    推荐阅读