python zipfile 加密,python解压密码文件
python小类中17-30行代码破解加密ZIP文件前言今天我们来做一些实战干货。想必之前的小班课一直讲基础会很无聊。有了前面的相关知识,我们才能体会到本章的内容。如果有什么不懂的,请复习python课堂1-16。
在大多数人眼里,黑客一直被认为是神秘的。其实我开始学python的时候,是因为在学习安全相关的东西。一个偶然的机会,我在360和艾春秋联合举办的网络课堂上,能够学到很多安全相关的知识。Python早已被公认为黑客的编程语言之一。它有强大的第三方库(也就是包和模块的统称)可以使用,语言非常好用。事不宜迟,今天就来演示一下如何编写python程序暴力破解压缩文件的密码!重点是编程的思路!
声明:本章内容仅供学习记录。请不要将它们用于商业或非法目的!
暴力破解的思路是利用python的内置模块zipfile来破解文件。zipfile模块有一个函数,可以传入压缩文件路径,通过函数的返回值调用提取文件的方法。如果文件被加密,密码传入不正确,程序就会异常(即程序报错)。有了这个想法,我们就可以读取一个字典文件(字典文件是一个包含各种弱密码的txt文本文件)并使用for循环读取这个文件来实现循环尝试。但是python在单线程中运行大型字典文本会非常耗时,所以这个程序使用多线程来实现调用。
PS:线程是计算机中的专有概念。举个例子,比如我们平时用的360杀毒软件,是大家作为一个整体来使用的,这样一个独立的软件,可以称之为进程。我们在使用360杀毒的时候,也可以用它来卸载软件或者清理垃圾,这样在做很多事情的同时,还可以利用多线程。一个流程软件可以同时做很多事情,线程就是一个可以做很多事情的“人”。多线程计算机程序的运行效率大大提高,减少了我们平时使用的时间消耗。
密码破解效果演示1。自己创建一个加密的zip文件,并设置自己的密码。
我们加密一个文本文件并将其压缩成一个zip文件。
2.打开命令行并执行py脚本。
这里的命令行我用的是git bash shell,这是windows下的一个类似linux的命令行。它非常容易使用,并且兼容所有的linux命令。装了git的同学用了都说好!~
你可以看到有一个进度条。进度条前面的数字表示每一行密码都会打开一个线程。这本字典总共有200W行。当超过2W线被读取,密码将被破解,然后程序可以手动停止。
3.如果zip加密不正确
在这里,一般情况下,即使输入错误的密码,也可以用压缩文件打开加密的zip文件,但是对应的文本文件是加密的。因此,通过手动解压加密的zip文件,甚至可以将错误的密码提取到原始文本文件中,只是乱码,如下图所示:
代码实现说明1。命令行功能代码
#第一行通过调用optparse的函数创建实例化对象parser=opt parse . option parser( \ n % Prog-zzipfile-d dictionary )#第二行添加一个参数,在命令行输入-z xxxx将命令行上的zip路径作为字符串传递到变量zname parser.add _ option (-z ,dest= zname ,type= string ,help= specify zip file) #第三行添加一个参数, 在命令行输入-d xxxx将命令行上的字典文件作为字符串传入变量dname中parser.add _ option (-d ,dest= dname ,type= string ,help= specified dictionary file )#的第四行,解析得到相关参数和选项。 第五行Options,args=parser.parse _ args () #通过zname和dname判断传递的参数是否为空:zip _ name=options . znamedict _ name=options . dname else:print(parser . usage)exit(0)2 .多线程函数
#通过try-except运行程序时捕获异常。如果报错,说明传入的文件不存在。试试:#调用zipfile模块的instance对象方法,将zip路径传入zip _ file=zip file . zip file(zip _ name)#打开字典文件,用python自带的with关键字打开。open (dict _ name, r ,encoding= utf-8 )为f: #,可以交给python独立关闭文件的资源,读取每一行,清除密码后的\n。也就是说在tqdm (f.readlines())中为line清除换行符:password=line.strip (\ n) #为每个要处理的密码打开一个线程,调用extract_file函数。传递的参数是元组(zip_file,Password)thread=thread(target=extract _ file,args=(zip _ file,password)) #调用线程启动方法thread . start()exception exception as e:print(f )发生异常!请检查文件是否存在!例外是:{e} )假设我输入了错误的文件名,你可以看到错误!
3.调用zipfile模块的核心代码
这里的核心代码是多线程调用时触发的函数。
DEF EXTRACT _ FILE (zip _ file,password): 提取压缩文件,并继续尝试输入密码try:zip _ file . extract all(pwd=bytes(password, UTF-8 ))print(f \ n找到password,正确的密码是:{password} )除:通行码中的附加知识点。1.安装python第三方库。(python的优势在于有很多好用的第三方库。可以把写好的包和模块人工打包,直接使用!)
为了方便读取文件,查看相关进度,这里还额外安装了一个第三方库tqdm,一个非常有用的进度条库。Tqdm在阿拉伯语中是“进步”的意思,而在西班牙语中是“我好爱你”的缩写。
介绍一个python第三方库的官网:https://pypi.org/
这个网站有每个模块的官方安装命令和文档,如下图:
在前面的小类中,如果配置了python的环境变量,可以通过打开命令行直接安装。只需执行命令pip install modal name,如下所示:
因为我已经安装了,所以会这样提示你。如果还没有安装,可以看到下载的进度条,最后安装后会显示成功。
2.Optparse、zipfile和tqdm模块简介
Optarse:这是python自带的一个库。通过上面介绍的代码,可以像linux命令一样用参数执行。例如,如下所示:
Zipfile: python自己的库,可以解压zip文件。本章实现的key模块,需要注意的是,使用extractall时,传入的字符串密码被转换成字节码。zip_file.extractall(pwd=bytes(密码, utf-8 ))
请看关于解压文件名称混乱的文章:
https://www . cnblogs . com/limengjie 0104/archive/2018/06/17/9192449 . html
Tqdm:需要安装的第三方库,可以用在可以循环迭代的对象上。比如:
对于tqdm中的行(f.readlines()):
爆炸词典项目爆炸词典是一个开源项目,里面包含了很多相关的密码,可以被star或者fork在自己的仓库里记录使用。地址如下:
https://github.com/rootphantomer/Blasting_dictionary
本篇文章的完整代码地址如下:
https://github。com/unlimitbladeworks/python-tools/blob/master/hack/zip/zip _ hack。巴拉圭
至此完!
有想学大蟒的同学,欢迎关注公号:
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。