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()

  注意:我用的是绝对路径,大家可以根据自己的路径修改哦

 

 

代码不难,却是很有趣,做什么事情没有绝对的兴趣也没有绝对的枯燥乏味,我们要自己让自己觉得有意思起来:这个很有趣,这个很有趣...(心里:一点也没有!! 哈哈 开个玩笑。)

希望我们抱着一种开心的心态学习和进步。大家一起努力吧~~

 

posted @ 2018-04-13 21:19  FlashOliver  阅读(13070)  评论(4编辑  收藏  举报