前言:因为要参加一个作品赛,而且要写一个PPT来介绍一下自己的作品,自己写的PPT丑的一批,所以就想到网上找一些模板。开启度娘模式,搜索PPT模板,找到百度云分享,开心,下载,下载之后懵X了,TMD还有密码这能忍.....度娘一波破解zip文件的软件(O(∩_∩)O刚开始还没想者自己写,有现成的谁不用呀)下载之后发现竟然还要付费,wcnmlgjb当我们劳动人人民是傻子呀!这么没有技术含量的东西还要付费.md自己动手丰衣足食!
 
因为对zip文件的文件格式格式不是很熟悉,所以首先想到的是python中应该封装有对zip文件读取的包,果然度娘一波就发现了确实有一个zipfile的包(python大法好呀如果大一的时候就接触到了python那也不至于当时对编程是那么的不感兴趣!最终跳到了网安这个坑,其实这都是后话跳入这个坑之后发现其实网安还是很有意思的...嘻嘻嘻)zipfile中封装了一个方法 ZipFile.extractall(path=None, members=None, pwd=None) 里面分别是zip文件的路径,成员,密码。这个函数当匹配到密码是正确的时候会直接将zip文件解压,而如果密码不正确的时候会抛出一个异常。所以我们就可以根据这个来对zip文件进行破解,其实个人感觉如果我们对zip文件的文件的二进制编码熟悉的话我们自己完全可以编写出类似于extracall这样的函数。嘻嘻。。不扯别的直接上源码
 
# -*- coding:utf-8 -*-
import zipfile
import threading
from termcolor import *

def crack(zFile,password):

    try:
        zFile.extractall(pwd=password.encode('cp850','replace'))

        print("++++++++++++++++++++++++KEY FOUND+++++++++++++++++++++++++++++++")

        print(colored("[+]",'green')+colored("Found password:"+password,'cyan'))

        event.set()

        return password

    except Exception as e:

        print(colored("[-]",'red')+colored(password,'blue')+colored(":is not the right key","yellow"))

def load():

    zFile = zipfile.ZipFile('D:\\download\\1.zip')

    # 由于系统默认的编码格式gbk所以这里要改变读取的编码格式不然会造成python抛出异常

    passFile = open('C:\\Users\\Ma\\Desktop\\Desk\\实用小工具\\zip文件破解\\1.txt',encoding='utf-8', mode = 'r')

    for line in passFile.readlines():

        if event.isSet():

            return

        else:
            password = line.strip('\n')

            t = threading.Thread(target=crack, args=(zFile, password))

            t.start()

            t.join()



if __name__ == '__main__':

    event = threading.Event()

    load()