Python 破解带密码保护的Zip文件
Posted FlashOliver
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 破解带密码保护的Zip文件相关的知识,希望对你有一定的参考价值。
今天发生了个有趣的事情,有个朋友发了一个带密码保护的Zip文件给我,却不给我密码,我就琢磨这怎么可以\'猜\'到密码呢?
经过一系列的尝试,最终使用python把这个密码给\'猜\'出来了。要想写出破解密码的脚本需要了解一下python的zipfile库,这里百度上的资源多的很,我就直接给大家上代码再一一解释。
import zipfile from threading import Thread
首先导入zipfile 和 Thread库下的threading,作用分别是:可以通过代码来打开zip文件,有密码保护我们提供密码就行了(至于怎么提供我后面会讲^_^); 开启多线程来\'猜\'密码,使得效率更高!
这里我们可以练习一下zipfile是怎么打开文件的呢?
zipFile = zipfile.ZipFile("test1.zip") zipFile = extractall(pwd= bytes("123", "utf8" ))
我们在和这个练习的python脚本相同路径下生成一个压缩密码为:123的压缩包,命名为test1.zip 当然你可以在任何地方生成练习文件,打开的时候记得写上绝对路径就OK啦~~
你会发现这个代码运行后你的压缩文件被解压啦,我们思考一下那么密码错误怎么办呢,当然就是打不开啦。我们利用这个特性,使用python的预防错误机制try ,except 这个机制的意思是:如果我放在try:里面要执行的代码有问题,程序不会报错而会运行except: 下面的代码。
核心:那我们就利用这点,让程序去给我们尝试几乎无限种可能的密码的排列组合,如果密码错误就跳过,知道找到密码为止~
题外话:我觉得我那个朋友设置的密码应该会是数字,所有我用python写了一个.txt文件:将0到10000000的数字全部写入。貌似有80多MB....真的很大...
接下来就开始猜密码了:
def extractFile(zipFile, password): ###提取文件的类 try: zipFile.extractall(pwd= bytes(password, "utf8" )) ###打开压缩文件,提供密码... print("This file\\\'s password is " + password) ###破解到密码 except: pass ###假如失败,就跳过继续
写了一个方法:这个方法需要我们提供需要破解的文件的相关信息, 然后需要我们提供这个文件的密码(我们当然不知道密码,不过很快就会知道的了~~~)
def mainStep(): zipFile = zipfile.ZipFile(\'C:\\\\Users\\\\Flash\\\\Desktop\\\\Secret.zip\') # 这里的第二个参数用r表示是读取zip文件,w是创建一个zip文件,默认是r PwdLists = open(\'C:\\\\Users\\\\Flash\\\\Desktop\\\\dictionary.txt\') #读入所有密码 for line in PwdLists.readlines(): #挨个挨个的写入密码 Pwd = line.strip(\'\\n\') t = Thread(target=extractFile, args=(zipFile, Pwd)) t.start()
然后我们再写一个方法:这个方法是为extractFile方法提供需要破解文件的相关信息的, 然后在打开‘密码字典’把密码字典的所有东西都读到PwdLists里面, 通过for循环把PwdLists里面的每个密码都拿去尝试,直到有正确密码为止 t = Thread(target=extractFile, args=(zipFile, Pwd)) 这个的意思是在线程先运行使得尝试的速度更快,具体可以百度了解线程的知识。
这个是我生成的密码字典 和 我破解的朋友的密码~~~/得意 O(∩_∩)O哈哈~
我贴出全部代码:
import zipfile from threading import Thread def extractFile(zipFile, password): ###提取文件的类 try: zipFile.extractall(pwd= bytes(password, "utf8" )) ###打开压缩文件,提供密码... print("This file\\\'s password is " + password) ###破解到密码 except: pass ###假如失败,就跳过继续 def mainStep(): zipFile = zipfile.ZipFile(\'C:\\\\Users\\\\Flash\\\\Desktop\\\\Secret.zip\') # 这里的第二个参数用r表示是读取zip文件,w是创建一个zip文件,默认是r PwdLists = open(\'C:\\\\Users\\\\Flash\\\\Desktop\\\\dictionary.txt\') #读入所有密码 for line in PwdLists.readlines(): #挨个挨个的写入密码 Pwd = line.strip(\'\\n\') t = Thread(target=extractFile, args=(zipFile, Pwd)) t.start() if __name__ == \'__main__\': mainStep()
注意:我用的是绝对路径,大家可以根据自己的路径修改哦
代码不难,却是很有趣,做什么事情没有绝对的兴趣也没有绝对的枯燥乏味,我们要自己让自己觉得有意思起来:这个很有趣,这个很有趣...(心里:一点也没有!! 哈哈 开个玩笑。)
希望我们抱着一种开心的心态学习和进步。大家一起努力吧~~
以上是关于Python 破解带密码保护的Zip文件的主要内容,如果未能解决你的问题,请参考以下文章
原来Python破解受密码保护的zip文件这么简单,不保证一定成功