大家好,今天我将以极客的态度为大家详细解析如何使用Python来破解被加密的压缩包文件。无论你是刚刚接触Python,还是完全没有编码基础的小白,阅读本文后都将轻松理解如何构建一个脚本。希望这篇文章能够激发你对Python的兴趣,了解构建脚本的基本思维,感受Python语言的魅力。
首先,我们创建一个名为“zip1.py”的文件,然后开始我们的编程之旅。在实验环境中,我们需要创建一个含有口令的压缩包,将口令设置为123456并命名为”a.zip”。
import zipfile
zFile = zipfile.ZipFile("a.zip")
zFile.extractall(pwd="123456")
在尝试读取文件时,会要求输入口令。接下来,我们将探讨脚本如何实现密码破解。打开“zip1.py”文件,输入以下代码:
import zipfile
zip_file = zipfile.ZipFile("a.zip")
zip_file.extractall(pwd=b"123456")
运行脚本后,发现文件被成功解压并存放在根目录下。
#coding=utf-8
import zipfile
zFile = zipfile.ZipFile("a.zip") #破解的目标ZIP文件
passFile=open("1.txt") #这是我们的字典
for line in passFile:
password=line.strip("n")
zFile.extractall(pwd=password)
现在,我们需要一个自定义的字典文件(1.txt)来遍历密码。将字典中的密码遍历到password变量中,并对代码进行修改:
import zipfile
zip_file = zipfile.ZipFile("a.zip")
with open("1.txt", "r") as f:
for line in f.readlines():
password = line.strip()
try:
zip_file.extractall(pwd=password.encode())
print("Password found: ", password)
except Exception as e:
pass
运行脚本后,发现报错。检查字典内容,发现正确口令。进一步追踪错误信息,发现是由口令错误导致的。为避免程序崩溃,我们使用try-except代码块。
import zipfile
zip_file = zipfile.ZipFile("a.zip")
with open("1.txt", "r") as f:
for line in f.readlines():
password = line.strip()
try:
zip_file.extractall(pwd=password.encode())
print("Password found: ", password)
except Exception as e:
pass
改进后的代码能够正常遍历字典中所有密码并输出。
#coding=utf-8
import zipfile #导入zipfile库
def extractFile(zFile,password): #定义一个函数,形参为破解目标文件名,密码
try: #避免程序崩溃
zFile.extractall(pwd=password)
return password #返回密码
except:
pass
def main():
zFile=zipfile.ZipFile('a.zip') #实例化一个类ZipFile
passFile=open("1.txt") #打开字典文件
for line in passFile.readlines(): #For遍历字典内容
password=line.strip("n") #取出空格 上下间隙
guess = extractFile(zFile, password) #将函数放入一个变量
if guess: #如果破解成功则返回出密码 并且退出
print "[*]密码是: " + password +"n"
exit(0)
if __name__ == '__main__': #如果执行的是当前脚本 则执行函数main()
main()
接下来,我们将代码模块化,使脚本更灵活。定义extractFile()函数用于破解口令,定义main()函数实例化ZIP文件并执行破解功能。
import zipfile
def extractFile(zip_file, password):
try:
zip_file.extractall(pwd=password.encode())
print("Password found: ", password)
except Exception as e:
pass
def main():
zip_file = zipfile.ZipFile("a.zip")
with open("1.txt", "r") as f:
for line in f.readlines():
password = line.strip()
extractFile(zip_file, password)
if __name__ == '__main__':
main()
最后,我们添加可选参数和多线程功能,使脚本更加灵活和高效。
现在,让我们执行脚本看看效果:破解成功!这里使用optparse库设置参数和参数解释,使代码简洁易懂。大家可以尝试使用getopt库重新定义,让刚接触Python的同学更容易理解。学习完本文后,再也不用担心别人给ZIP文件加密了!建议结合crunch字典生成工具使用,事半功倍!
脚本链接:pan.baidu.com/s/1Pg7AO8nzCxDLjfGT0nQQ3w 提取码:zkaq。感谢阅读!