绕过zip密码提取文件(如何给文件夹加密)

今天想做点实战干货,以前的小课讲基础一定很枯燥。有了前面的知识,你就能体会到本章的内容了。如果有什么不懂的,请复习python课堂1-16。

在大多数人眼里,黑客一直被认为是神秘的。其实我开始学python的时候,是因为在学习安全相关的东西。一个偶然的机会,我在360和艾春秋联合举办的网络课堂上,能够学到很多安全相关的知识。Python早已被公认为黑客的编程语言之一。它有强大的第三方库(也就是包和模块的统称)可以使用,语言非常好用。事不宜迟,今天就来演示一下如何编写python程序暴力破解压缩文件的密码!重点是编程的思路!

免责声明:本章内容仅供学习记录。请不要将它们用于商业或非法目的!

关于实现暴力破解的思考

Python内置的模块zipfile用于破解文件。zipfile模块有一个函数,可以传入压缩文件路径,通过函数的返回值调用提取文件的方法。如果文件是加密的,密码传入不正确,程序会出现异常(即程序给出错误)。有了这个想法,我们就可以读取一个字典文件(字典文件是一个包含各种弱密码的txt文本文件)并使用for循环读取这个文件来实现循环尝试。但是python在单线程中运行大型字典文本会非常耗时,所以这个程序使用多线程来实现调用。

PS:线程是计算机中的专有概念。举个例子,比如我们平时用的360杀毒软件,是大家作为一个整体来使用的,这样一个独立的软件,可以称之为进程。我们在使用360杀毒的时候,也可以用它来卸载软件或者清理垃圾,这样在做很多事情的同时,还可以利用多线程。一个流程软件可以同时做很多事情,线程就是一个可以做很多事情的“人”。多线程计算机程序的运行效率大大提高,减少了我们平时使用的时间消耗。

密码破解效果演示

1.自己创建一个加密的zip文件,并设置自己的密码。

我们加密一个文本文件并将其压缩成一个zip文件。

python小课堂17 - 30行代码破解加密ZIP文件

2.打开命令行并执行py脚本。

这里的命令行我用的是git bash shell,这是windows下的一个类似linux的命令行。它非常容易使用,并且兼容所有的linux命令。装了git的同学用了都说好!!~

python小课堂17 - 30行代码破解加密ZIP文件

你可以看到有一个进度条。进度条前面的数字表示每一行密码都会打开一个线程。这本字典总共有200W行。当超过2W线被读取,密码将被破解,然后程序可以手动停止。

3.如果zip加密不正确

在这里,一般情况下,即使输入错误的密码,也可以用压缩文件打开加密的zip文件,但是对应的文本文件是加密的。因此,通过手动解压加密的zip文件,甚至可以将错误的密码提取到原始文本文件中,只是乱码,如下图所示:

python小课堂17 - 30行代码破解加密ZIP文件

解释代码的实现

1.命令行功能代码

# 第一行通过调用optparse的函数创建一个parser的实例化对象parser = optparse.OptionParser(‘n %prog -z -d ’)# 第二行添加一个参数,在命令行上输入-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=’specify dictionary file’)# 第四行进行解析,得到相关参数,得到options。options, args = parser.parse_args()# 第五行,通过zname和dname判断是否传入的参数为空if options.zname and options.dname: zip_name = options.zname dict_name = options.dnameelse: print(parser.usage) exit(0)

2.多线程功能代码

# 通过try-except来抓取运行程序时的异常,若报错,说明传入的文件不存在try: # 调用zipfile模块的实例对象方法,将zip路径传入 zip_file = zipfile.ZipFile(zip_name) # 打开字典文件,用python自带的with关键词来打开,可以交由python自主关闭文件的资源 with open(dict_name, ‘r’, encoding=’utf-8′) as f: # 读取每一行,并且将密码后的n 清空,也就是清空换行符 for line in tqdm(f.readlines()): password = line.strip(‘n’) # 对每个密码开启线程去处理,调用extract_file函数,传入的参数为元组(zip_file, password) thread = Thread(target=extract_file, args=(zip_file, password)) # 调用线程开始的方法 thread.start()except Exception as e: print(f’发生异常!请检查文件是否存在!异常信息为:{e}’)

假设我输入了错误的文件名,你可以看到错误!

python小课堂17 - 30行代码破解加密ZIP文件

3.调用zipfile模块的核心代码

这里的核心代码是多线程调用时触发的函数。

def extract_file(zip_file, password): ” 提取压缩文件,通过密码不断尝试 ” try: zip_file.extractall(pwd=bytes(password,’utf-8′)) print(f’n 发现密码,正确密码为:{password}’) except: pass

代码中的附加知识点

1.安装python第三方库(python的强项就是有很多好用的第三方库,把写好的包和模块人为打包,直接使用!)

为了方便读取文件,查看相关进度,这里还额外安装了一个第三方库tqdm,一个非常有用的进度条库。Tqdm在阿拉伯语中是“进步”的意思,而在西班牙语中是“我好爱你”的缩写。

介绍一个python第三方库的官网:https://pypi.org/

这个网站有每个模块的官方安装命令和文档,如下图:

python小课堂17 - 30行代码破解加密ZIP文件

在前面的小类中,如果配置了python的环境变量,可以通过打开命令行直接安装。只需执行命令pip install modal name,如下所示:

python小课堂17 - 30行代码破解加密ZIP文件

因为我已经安装了,所以会这样提示你。如果还没有安装,可以看到下载的进度条,最后安装后会显示成功。

2.Optparse、zipfile和tqdm模块简介

Optarse:这是python自带的一个库。通过上面介绍的代码,可以像linux命令一样用参数执行。例如,如下所示:

python小课堂17 - 30行代码破解加密ZIP文件

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/unlimitedbladeworks/python-tools/blob/master/hack/zip/zip _ hack . py就是这样!

想学python的同学,请关注公众号:migezatan。(米格的谈话)

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。系信息发布平台,仅提供信息存储空间服务。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

本文来自网络,若有侵权,请联系删除,作者:刘同林,如若转载,请注明出处:

发表回复

登录后才能评论