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的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享
Jul 09 Python
在Python中操作字典之setdefault()方法的使用
May 21 Python
自动化Nginx服务器的反向代理的配置方法
Jun 28 Python
深入解析Python中的lambda表达式的用法
Aug 28 Python
Python 中 Virtualenv 和 pip 的简单用法详解
Aug 18 Python
pandas 数据实现行间计算的方法
Jun 08 Python
手把手教你如何安装Pycharm(详细图文教程)
Nov 28 Python
python selenium 查找隐藏元素 自动播放视频功能
Jul 24 Python
python selenium登录豆瓣网过程解析
Aug 10 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
Aug 20 Python
最新pycharm安装教程
Nov 18 Python
python实现经纬度采样的示例代码
Dec 10 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代码
2010/07/17 PHP
php实现在新浪云中使用imagick生成缩略图并上传的方法
2016/09/26 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
JQuery 插件模板 制作jquery插件的朋友可以参考下
2010/03/17 Javascript
Jquery ajaxsubmit上传图片实现代码
2010/11/04 Javascript
通过JS获取用户本地图片路径并显示的代码
2012/02/16 Javascript
JS的参数传递示例介绍
2014/02/08 Javascript
JS判断图片是否加载完成方法汇总(最新版)
2016/05/13 Javascript
利用Javascript仿Excel的数据透视分析功能
2016/09/07 Javascript
jquery心形点赞关注效果的简单实现
2016/11/14 Javascript
$.browser.msie 为空或不是对象问题的多种解决方法
2017/03/19 Javascript
WebSocket实现简单客服聊天系统
2017/05/12 Javascript
JavaScript实现页面中录音功能的方法
2019/06/04 Javascript
浅析vue-cli3配置webpack-bundle-analyzer插件【推荐】
2019/10/23 Javascript
JavaScript缺少insertAfter解决方案
2020/07/03 Javascript
使用Vue-cli 中为单独页面设置背景图片铺满全屏
2020/07/17 Javascript
python抓取网页中的图片示例
2014/02/28 Python
Python采用raw_input读取输入值的方法
2014/08/18 Python
Python计算程序运行时间的方法
2014/12/13 Python
Python第三方库的安装方法总结
2016/06/06 Python
安装python3的时候就是输入python3死活没有反应的解决方法
2018/01/24 Python
centos6.8安装python3.7无法import _ssl的解决方法
2018/09/17 Python
Python3爬虫学习入门教程
2018/12/11 Python
python pandas模块基础学习详解
2019/07/03 Python
pycharm配置当鼠标悬停时快速提示方法参数
2019/07/31 Python
pycharm远程连接vagrant虚拟机中mariadb数据库
2020/06/05 Python
推荐WEB开发者最佳HTML5和CSS3代码生成器
2015/11/24 HTML / CSS
COS美国官网:知名服装品牌
2019/04/08 全球购物
Myprotein芬兰官网:欧洲第一运动营养品牌
2019/05/05 全球购物
项目投资意向书
2014/04/01 职场文书
学校安全管理责任书
2014/07/23 职场文书
自我管理的活动方案
2014/08/25 职场文书
孝敬父母的活动方案
2014/08/31 职场文书
2015年个人自我剖析材料
2014/12/29 职场文书
市级三好生竞选稿
2015/11/21 职场文书
JS函数式编程实现XDM一
2022/06/16 Javascript