如何在Python暴力破解 ZIP 文件密码?
在本文中,我们将看到一个Python程序,该程序将使用暴力破解方法破解 zip 文件的密码。
ZIP 文件格式是一种常见的存档和压缩标准。它用于压缩文件。有时,压缩文件是保密的,所有者不想让每个人都可以访问。因此,zip 文件受密码保护。如果密码是通用的,那么它很容易被破解。在这里,我们将使用蛮力方法来破解 zip 文件的密码。
蛮力方法是使用一组预定义值来破解密码直到成功的方法。这基本上是一种“命中和尝试”方法。如果值集很高,这种方法可能需要很长时间,但它的成功率很高。值的数量越多,破解密码的机会就越大。在这里,我们将使用大小为 133 MB 的“rockyou”文本文件和超过 1400 万组密码来尝试。在此处下载文本文件。
方法:
- 首先,导入 zipfile 模块。
- 初始化 ZipFile 对象,这有助于提取 zip 文件的内容。
- 计算“rockyou.txt”文件中出现的单词数并将其显示在终端上。
- 调用“crack_password”函数,如果找到密码则返回true,否则返回false。将文本文件的名称和 ZipFile 对象作为参数传递。
- idx 变量用于跟踪行号。
- 以“rb”模式打开文本文件“rockyou.txt”,以二进制形式处理文件内容。这是因为文件包含一些特殊符号,如果文件以“r”模式打开,则无法处理这些特殊符号,并且会生成UnicodeDecodeError 。
- 打开文件后,从文件中提取该行,然后从中拆分单词。
- 在 try 块中,通过将密码提供给 extractall 方法的 pwd 字段来提取 zip 文件的内容。 extractall()方法会将 zip 文件的所有内容提取到当前工作目录。上面的程序在与这个Python脚本相同的目录中提取了一个名为“gfg.zip”的zip文件。
- 如果密码不正确,则会产生异常。在 except 块中,继续循环以检查文件中的其他单词。
- 如果找到密码返回真否则最后返回假并显示所需的消息。
下面是完整的实现:
Python3
import zipfile
def crack_password(password_list, obj):
# tracking line no. at which password is found
idx = 0
# open file in read byte mode only as "rockyou.txt"
# file contains some special characters and hence
# UnicodeDecodeError will be generated
with open(password_list, 'rb') as file:
for line in file:
for word in line.split():
try:
idx += 1
obj.extractall(pwd=word)
print("Password found at line", idx)
print("Password is", word.decode())
return True
except:
continue
return False
password_list = "rockyou.txt"
zip_file = "gfg.zip"
# ZipFile object initialised
obj = zipfile.ZipFile(zip_file)
# count of number of words present in file
cnt = len(list(open(password_list, "rb")))
print("There are total", cnt,
"number of passwords to test")
if crack_password(password_list, obj) == False:
print("Password not found in this file")
输出: