如何在Python中暴力破解ZIP压缩包文件密码

今天突然发现自己以前的压缩包密码忘了,网上很多的破解软件又要收费,怎么办,自己用python写一个压缩包密码暴力破解程序把。

 如何在<a href='/tag/python.html'>Python</a>中暴力破解ZIP压缩包文件密码

在本教程中,您将编写一个简单的Python脚本,尝试使用Dictionary Attack破解zip文件的密码。

我们将使用Python的内置zipfile模块和第三方tqdm库来快速打印进度条:

pip3 install tqdm

如前所述,我们将使用字典攻击,这意味着我们将需要一个词表来暴力破解此受密码保护的zip文件。在本教程中,我们将使用较大的rockyou单词表(大小约为133MB),如果您使用的是Kali Linux,则可以在/usr/share/wordlists/rockyou.txt.gz路径下找到它。否则,下载地址为https://github.com/brannondorsey/naive-hashcat/releases/download/data/rockyou.txt。

我们在编辑器或bfwstuio中打开一个新的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)


请注意,我们阅读了整个单词表,然后仅获取要测试的密码数量,这对于tqdm证明是有用的,因此我们可以跟踪暴力破解过程中的位置,以下是其余代码:

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了解文件中有多少个单词的原因。

我们打开单词表并逐个单词地读取它,然后尝试将其作为密码来提取zip文件,读取整行将带有换行符,因此,我们使用strip()方法删除空格。

每当密码不正确时,方法extractall()都会引发异常,因此在这种情况下,我们可以尝试下一个密码,否则,我们将输出正确的密码并退出程序。

我已经稍微修改了代码以接受命令行参数中的zip和wordlist文件,请在此处进行检查。

看看我的运行结果:

root@bfw:~# gunzip /usr/share/wordlists/rockyou.txt.gz
root@bfw:~# 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


如您所见,经过大约435K的试用,我找到了密码,这花了我一分钟的时间。请注意,rockyou单词表有超过1400万个单词,它们是按频率排序的最常用密码。

好了,我们已经成功构建了一个简单但有用的脚本来破解zip文件密码,如果您无法使用此列表来破解它,请尝试使用更大的单词列表。

最后,我强烈建议您使用多个线程更快地破解密码,如果成功,请在下面的评论中与我们分享您的结果!

免责声明:本教程旨在揭秘破解过程,不能用于非法目的。

{{collectdata}}

网友评论0