Python 破解带密码保护的Zip文件
2018-06-18 02:22:10来源:未知 阅读 ()
今天发生了个有趣的事情,有个朋友发了一个带密码保护的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()
注意:我用的是绝对路径,大家可以根据自己的路径修改哦
代码不难,却是很有趣,做什么事情没有绝对的兴趣也没有绝对的枯燥乏味,我们要自己让自己觉得有意思起来:这个很有趣,这个很有趣...(心里:一点也没有!! 哈哈 开个玩笑。)
希望我们抱着一种开心的心态学习和进步。大家一起努力吧~~
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:urllib库基本使用
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash