首页 文章详情

“同学你好,能帮我破解一下 zip压缩文件嘛?”“可以呀,我很快的!”

天作之程 | 344 2020-07-28 16:37 0 0 0
UniSMS (合一短信)

曾经,在网上下载过一份“学习资料”,zip格式的一份不小的压缩文件。

费劲巴拉的从“某盘”下载,却发现解压需要“密码”,顿时心里有句不当讲的话...

为了破解压缩文件的密码,我在搜索引擎输入“python zip”两个关键词。

经过过一番总结,发现破解的思路都是一样的,暴力破解。

过程如下:

  1. 建立密码字典(常用密码)
  2. 尝试用每一个密码,来解压文件
  3. 解压成功,跳出循环

密码字典

比如,现在一个纯数字的六位密码“050825”

可以从依次遍历“000000”到“999999”,把所有的结果保存到txt文件。

这样的缺点就是比较死板,只能是6位数字,另外就是比较占内存。

于是,有个大神写了个“字典生成器”,你需要做的是传入两个参数“字典的组成元素”和“密码的长度列表”

比如,纯数字的“050825”,你就传入如下的参数:

  • [0,1,2,3,4,5,6,7,8,9],数字就这9个
  • [6],密码的长度

如此,便可按你的要求得到密码的Python 生成器。我们知道,生成器是不占用内存的。

如果数字不过瘾,比如有的密码是字符串。可以考虑在第一个参数中,加入“a-z”和“A-Z”

zipfile解压文件

zipfile模块是python自带的,用于对zip文件的读、写、追加、解压操作等。

“解压”主要是用到ZipFile对象的extractall()方法

extractall(path=None, members=None, pwd=None)方法主要有三个参数。

我们来看一下每个参数的含义:

  • path 指定解压后文件的存储位置
  • members(可选)指定Zip文件中要解压的文件,这个文件名称必须是通过namelist()方法返回列表的子集
  • pwd 指定Zip文件的解压密码(编码“utf-8”)

贴个代码:

import zipfile 
try:
    with zipfile.ZipFile('test.zip'as zFile:     
        # 创建ZipFile对象
        # 解压文件
        zFile.extractall(path='./',pwd=b'1234')
        print('解压成功!')
except:
    print('解压失败')

进度条可视化

上次的进度条,这次派上用场了,关于进度条,本程序使用 tqdm扩展库,可以参考下面的链接:用python 制作可视化进度条

代码中的tqdm有两个参数:

  • 1、密码迭代器
  • 2、密码总个数
for pwd in tqdm(chain.from_iterable(all_passwd(dictionaries, maxlen) for maxlen in lengths), total=total):
    if extract(zfile, pwd):    # 记得extract函数返回的是bool类型的哦
        break

这是破解的结果:

5%|▌         | 50691/1000000 [00:04<01:2311389.24it/s]
Password is050825

bingo

4s结束战斗...

我是小结

如果是密码相对简单的,值得一试。

如果过于复杂的话,假设你有时间,可以等一等,毕竟有进度条了(手动狗头),等着也不会那么枯燥。

源码下载

已上传网盘,后台回复 “ zip ” 即可获取

求在看,求点赞。

下回见...

-END-

往期精彩推荐 --  

-- 1、这个在线代码编辑器,可以分享给任何人
-- 2、Python 造假数据,用Faker就够了
-- 3、在Python中玩转Json数据



-- 你  “三连”  了吗?


good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter