前言:因为要参加一个作品赛,而且要写一个PPT来介绍一下自己的作品,自己写的PPT丑的一批,所以就想到网上找一些模板。开启度娘模式,搜索PPT模板,找到百度云分享,开心,下载,下载之后懵X了,TMD还有密码这能忍.....度娘一波破解zip文件的软件(O(∩_∩)O刚开始还没想者自己写,有现成的谁不用呀)下载之后发现竟然还要付费,wcnmlgjb当我们劳动人人民是傻子呀!这么没有技术含量的东西还要付费.md自己动手丰衣足食!
zipfile的官方文档 https://docs.python.org/3/library/zipfile.html
因为对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()