了解如何使用内置的 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 文件,我们使用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 文件密码,如果你无法使用此列表破解它,请尝试使用更大的单词列表。
最后,我强烈建议你使用多个线程来更快地破解密码,如果你成功了,请在下面的评论中与我们分享你的结果!