Python 破解带密码保护的Zip文件

时间:2022-09-14 11:52:50

今天发生了个有趣的事情,有个朋友发了一个带密码保护的Zip文件给我,却不给我密码,我就琢磨这怎么可以'猜'到密码呢?

经过一系列的尝试,最终使用python把这个密码给'猜'出来了。要想写出破解密码的脚本需要了解一下python的zipfile库,这里百度上的资源多的很,我就直接给大家上代码再一一解释。

 

import  zipfile
from  threading import  Thread

  首先导入zipfile 和 Thread库下的threading,作用分别是:可以通过代码来打开zip文件,有密码保护我们提供密码就行了(至于怎么提供我后面会讲^_^); 开启多线程来'猜'密码,使得效率更高!

 

这里我们可以练习一下zipfile是怎么打开文件的呢?

1
2
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....真的很大...

接下来就开始猜密码了:

1
2
3
4
5
6
def  extractFile(zipFile, password):    ###提取文件的类
     try :
         zipFile.extractall(pwd =  bytes(password,  "utf8"  ))      ###打开压缩文件,提供密码...
         print ( "This file\'s password is "  +  password)        ###破解到密码
     except :
         pass     ###假如失败,就跳过继续

 写了一个方法:这个方法需要我们提供需要破解的文件的相关信息, 然后需要我们提供这个文件的密码(我们当然不知道密码,不过很快就会知道的了~~~)

1
2
3
4
5
6
7
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' )
         =  Thread(target = extractFile, args = (zipFile, Pwd))
         t.start()

  然后我们再写一个方法:这个方法是为extractFile方法提供需要破解文件的相关信息的, 然后在打开‘密码字典’把密码字典的所有东西都读到PwdLists里面, 通过for循环把PwdLists里面的每个密码都拿去尝试,直到有正确密码为止   t = Thread(target=extractFile, args=(zipFile, Pwd))  这个的意思是在线程先运行使得尝试的速度更快,具体可以百度了解线程的知识。

 

Python 破解带密码保护的Zip文件 Python 破解带密码保护的Zip文件

 

这个是我生成的密码字典 和 我破解的朋友的密码~~~/得意 O(∩_∩)O哈哈~

我贴出全部代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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' )
         =  Thread(target = extractFile, args = (zipFile, Pwd))
         t.start()
if  __name__  = =  '__main__' :
     mainStep()