python 破解加密zip文件的密码


Posted in Python onApril 22, 2021

今天的文章来自 盏茶作酒 同学。他在老电脑中发现了一个加密的 zip 文件,于是用 Python 破解了文件密码。在破解的过程中出现了内存爆炸的问题,通过阅读 Python 源代码找到了解决方案。

下面就来给大家分享一下他的操作。

之前在家里的老电脑中,发现一个加密zip压缩包,由于时隔太久忘记密码了,依稀记得密码是6位字母加数字,网上下载了很多破解密码的软件都没有效果,于是想到自己用Python写一个暴力破解密码的脚本。
Python 有一个内置模块 zipfile 可以解压 zip 压缩包。先来测试一波:创建一个测试文件,压缩,设置解压密码为123。

python 破解加密zip文件的密码

import zipfile

# 创建文件句柄
file = zipfile.ZipFile("测试.zip", 'r')
# 提取压缩文件中的内容,注意密码必须是bytes格式,path表示提取到哪
file.extractall(path='.', pwd='123'.encode('utf-8'))

运行效果如下图所示,提取成功。

python 破解加密zip文件的密码

既然如此,那我不停尝试所有可能的密码组合去解压缩不就行了嘛~

好了,开始破解老文件的密码。

为了提高速度,我还加了多线程的代码:

import zipfile
import itertools
from concurrent.futures import ThreadPoolExecutor

def extract(file, password):
    if not flag: return
    file.extractall(path='.', pwd=''.join(password).encode('utf-8'))


def result(f):
    exception = f.exception()
    if not exception:
        # 如果获取不到异常说明破解成功
        print('密码为:', f.pwd)
        global flag
        flag = False


if __name__ == '__main__':
    # 创建一个标志用于判断密码是否破解成功
    flag = True
    # 创建一个线程池
    pool = ThreadPoolExecutor(100)
    nums = [str(i) for i in range(10)]
    chrs = [chr(i) for i in range(65, 91)]
    # 生成数字+字母的6位数密码
    password_lst = itertools.permutations(nums + chrs, 6)
    # 创建文件句柄
    zfile = zipfile.ZipFile("加密文件.zip", 'r')
    for pwd in password_lst:
        if not flag: break
        f = pool.submit(extract, zfile, pwd)
        f.pwd = pwd
        f.pool = pool
        f.add_done_callback(result)

然而,事情并没有那简单……

代码跑一会儿,内存爆了!

python 破解加密zip文件的密码

于是,为了找寻问题所在,我就去查看了一下源码,发现ThreadPoolExecutor默认使用的是无界队列。而程序中尝试密码的速度跟不上生产密码的速度,就会把生产任务无限添加到队列中。导致内存被占满。内存直接飙到95:

python 破解加密zip文件的密码

找到病根儿,剩下的就是对症下药了。

继承并重写了ThreadPoolExecutor类中的_work_queue属性,将无界队列改成有界队列,这样就不会出现内存爆满的问题,看代码:

import queue
from concurrent.futures import ThreadPoolExecutor


class BoundedThreadPoolExecutor(ThreadPoolExecutor):
    def __init__(self, max_workers=None, thread_name_prefix=''):
        super().__init__(max_workers, thread_name_prefix)
        self._work_queue = queue.Queue(self._max_workers * 2) # 设置队列大小

用自定义的BoundedThreadPoolExecutor类替代前面代码中的ThreadPoolExecutor。

再次执行……

python 破解加密zip文件的密码

程序输入如下图内容:

python 破解加密zip文件的密码

Bingo!破解成功!(原来密码如此简单……)
话说回来,毕竟这个压缩包我是隐约知道它的位数和范围(字母和数字),所以破解出来需要的时间是可以忍受的。如果有天你在网上找了一个无人认领的加密压缩包,想要一窥究竟但又并不知道它有多少位密码,那我只能祝你好运啦~

以上就是python 破解加密zip文件的密码的详细内容,更多关于python 破解zip文件密码的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python实现调用其他python脚本的方法
Oct 05 Python
处理Python中的URLError异常的方法
Apr 30 Python
利用python实现命令行有道词典的方法示例
Jan 31 Python
TensorFlow在MAC环境下的安装及环境搭建
Nov 14 Python
python 用lambda函数替换for循环的方法
Jun 09 Python
Python函数装饰器实现方法详解
Dec 22 Python
浅谈Python小波分析库Pywavelets的一点使用心得
Jul 09 Python
Tensorflow累加的实现案例
Feb 05 Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
Mar 16 Python
Python实现邮件发送的详细设置方法(遇到问题)
Jan 18 Python
基于PyInstaller各参数的含义说明
Mar 04 Python
python3中apply函数和lambda函数的使用详解
Feb 28 Python
python入门之算法学习
Apr 22 #Python
python使用XPath解析数据爬取起点小说网数据
Apr 22 #Python
python 实现德洛内三角剖分的操作
python 三边测量定位的实现代码
python如何读取.mtx文件
Apr 22 #Python
Python中tkinter的用户登录管理的实现
python爬虫之利用selenium模块自动登录CSDN
You might like
利用PHP扩展vld查看PHP opcode操作步骤
2013/03/04 PHP
PHP读取文件内容后清空文件示例代码
2014/03/18 PHP
PHP中使用php5-ffmpeg撷取视频图片实例
2015/01/07 PHP
php观察者模式应用场景实例详解
2017/02/03 PHP
jquery实现ajax提交form表单的方法总结
2014/03/03 Javascript
浅析js预加载/延迟加载
2014/09/25 Javascript
一种新的javascript对象创建方式Object.create()
2015/12/28 Javascript
vue绑定class与行间样式style详解
2017/08/16 Javascript
vue+Java后端进行调试时解决跨域问题的方式
2017/10/19 Javascript
浅谈js的解析顺序 作用域 严格模式
2017/10/23 Javascript
浅谈Angular 中何时取消订阅
2017/11/22 Javascript
解决angularjs中同步执行http请求的方法
2018/08/13 Javascript
原生js实现点击轮播切换图片
2020/02/11 Javascript
Javascript摸拟自由落体与上抛运动原理与实现方法详解
2020/04/08 Javascript
Electron整合React使用搭建开发环境的步骤详解
2020/06/07 Javascript
python实现飞机大战
2018/09/11 Python
python基础知识(一)变量与简单数据类型详解
2019/04/17 Python
python+django+rest框架配置创建方法
2019/08/31 Python
Python 脚本的三种执行方式小结
2019/12/21 Python
Python3 pywin32模块安装的详细步骤
2020/05/26 Python
Python 如何查找特定类型文件
2020/08/17 Python
用python对oracle进行简单性能测试
2020/12/05 Python
详解移动端HTML5页面端去掉input输入框的白色背景和边框(兼容Android和ios)
2016/12/15 HTML / CSS
详解快速开发基于 HTML5 网络拓扑图应用
2018/01/08 HTML / CSS
科颜氏加拿大官方网站: Kiehl’s加拿大
2016/08/16 全球购物
宝拉珍选英国官网:Paula’s Choice英国
2019/05/29 全球购物
装潢设计实习自我鉴定
2013/09/19 职场文书
机修工工作职责
2014/02/21 职场文书
本科毕业生求职自荐信
2014/04/09 职场文书
班主任个人工作反思
2014/04/28 职场文书
安全宣传标语
2014/06/10 职场文书
计算机毕业生自荐信
2014/06/12 职场文书
高中学生会竞选演讲稿
2014/08/25 职场文书
买卖合同协议书范本
2014/10/18 职场文书
学子宴致辞大全
2015/07/27 职场文书
合作协议书格式范本
2016/03/21 职场文书