仅一小段Python代码,就能破解加密zip文件的密码?
off999 2024-09-23 11:34 85 浏览 0 评论
之前在家里的老电脑中,发现一个加密zip压缩包,由于时隔太久忘记密码了,依稀记得密码是6位字母加数字,网上下载了很多破解密码的软件都没有效果,于是想到自己用Python写一个暴力破解密码的脚本。
Python 有一个内置模块 zipfile 可以解压 zip 压缩包。先来测试一波:创建一个测试文件,压缩,设置解压密码为123。
import zipfile
# 创建文件句柄
file = zipfile.ZipFile("测试.zip", 'r')
# 提取压缩文件中的内容,注意密码必须是bytes格式,path表示提取到哪
file.extractall(path='.', pwd='123'.encode('utf-8'))
运行效果如下图所示,提取成功。
既然如此,那我不停尝试所有可能的密码组合去解压缩不就行了嘛~
好了,开始破解老文件的密码。
为了提高速度,我还加了多线程的代码:
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)
然而,事情并没有那简单……
代码跑一会儿,内存爆了!
于是,为了找寻问题所在,我就去查看了一下源码,发现ThreadPoolExecutor默认使用的是无界队列。而程序中尝试密码的速度跟不上生产密码的速度,就会把生产任务无限添加到队列中。导致内存被占满。内存直接飙到95:
找到病根儿,剩下的就是对症下药了。
继承并重写了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。
再次执行……
程序输入如下图内容:
Bingo!破解成功!(原来密码如此简单……)
话说回来,毕竟这个压缩包我是隐约知道它的位数和范围(字母和数字),所以破解出来需要的时间是可以忍受的。如果有天你在网上找了一个无人认领的加密压缩包,想要一窥究竟但又并不知道它有多少位密码,那我只能祝你好运啦~
作者:Python之禅
原文链接:https://mp.weixin.qq.com/s/sY6jJpM_J-fqYybbXV4jIw
相关推荐
- pe启动工具(pe启动工具排行榜)
-
u盘pe是可以重复使用的,没有问题的,可以给无数的电脑安装系统。用u盘的做的pe只要不是中病毒,或者你格式化u盘,里面的pe系统一直都是可以用的哈。只是说现在的pe系统最新的更新的技术不一样,...
- 笔记本电脑按键失灵怎么解决
-
笔记本电脑按键失灵可能是由于键盘内部灰尘或者物质堵塞,也可能是由于键盘接触不良或者硬件故障导致。修复方法可以尝试清洗键盘或更换键盘,如果还是不行则需要检查硬件或者寻求专业维修人员的帮助。在日常使用中,...
- 苹果手机imei查询官网(苹果手机imei查询官网免费)
-
IMEI查询官网:首页:http://www.imeidb.comIMEIdb的客户包括了国内知名手机厂商、IMEIdb始创于2011年IMEIdb是国内唯一的提供面向普通用户和商业用户的IMEI一体...
- 斐讯路由器还能用吗(2021年斐讯路由器还能用吗)
-
斐讯路由器K2P以上型号的路由器还能用并且还不错。k2p接人个500M左右的网络还可以,K3、K3C更不用说了。斐讯虽然倒闭了,但网络上好多大师给这些路由器续命,适配了不少优秀的路由固件。可以呀,我有...
- windows 10下载工具(win10下载软件的工具)
-
Windows10系统下载软件方法,如果你想使用你的Windows10系统下载软件,那么你可以去你的电脑的应用市场里面,首先下载一个ie的浏览器,这样把你的ie浏览器安装到电脑桌面上面,然后可以在...
- 个人电子邮箱格式怎么填写(电子邮箱 个人)
-
很高兴为您解答,电子邮箱的格式通常为:xxx@xx.com。其中xxx为用户名(邮箱帐户名),“@”后面的是域名;如腾讯的邮箱格式一般为:xxxx@qq.com(xxxx为QQ号码)邮箱名加艾特加邮箱...
- internet下载地址(internet download manager下载安装版)
-
下载IE7破解版安装是先验证然后不会通过啊!那样你就把C:\DocumentsandSettings\AllUsers\ApplicationData\WindowsGenuineAdvantage\...
- flash官方插件手机版(手机flash插件下载安卓版)
-
1、下载最新版本的AdobeFlashPlayer的APP到你的Android设备上。2、确保你的浏览器支持Flash,并在你的设备上依次度打开设置>安全勾选上“未知的来源”。3、...
- 如何启动资源管理器(如何启动资源管理器中的文件)
-
在Windows中,启动资源管理器有以下三种方法:1.使用快捷键Win+E:这是最常用的方法,按下Windows键和字母"E"键同时,即可快速打开资源管理器。这种方法简便快捷,...
- 格式化手机储存是什么意思(格式化手机内存是什么)
-
意思就是把你的内存卡回复出厂设置,卡里面的东西就一并删除了,格式化存储卡也就是把存储卡里的东西全部删掉,不过得注意一些自己有用东西。手机格式化就是恢复出厂设置,删除分区内的所有东西,操作应当慎重。格式...
- 怎么下载32位版本的qq(qq32位下载手机)
-
64位系统支持32位系统的软件,而32位系统不支持64位系统软件,现在大多数软件都是按32位开发环境开发的,像QQ这些,如果出64位将会增加成本。如有一天淘汰了32位系统,所有软件就是64位了除去后者...
- 声卡驱动在哪里打开win11(声卡驱动在那)
-
要更新Win11的声卡驱动,首先需要打开设备管理器,找到声音、视频和游戏控制器选项,右键点击需要更新的声卡驱动,选择“更新驱动程序”,然后选择“自动搜索更新的驱动程序”,系统会自动搜索并下载最新的驱动...
- 下载钉钉软件(下载钉钉软件有什么风险)
-
应用商店下载正版的。可以通过应用商城下载,这里面下载是自动安装的,也可以下载一个浏览器,然后在浏览器中输入钉钉,并点击搜索找到官方网站进行合适的资源下载步步高家教机可以下载安装钉钉下载钉钉要用手机号码...
- windows10序列号查看(win10怎样查看序列号)
-
Win10快速查看序列号的方法: 1、使用电脑快捷键组合“WIN+R”,打开运行窗口。? 2、输入“regedit”,打开注册表编辑器。? 3、打开注册表,路径HKEY_LOCAL_MA...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
系统u盘安装(win11系统u盘安装)
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
