python爆破ZIP文件(支持纯数字,数字+字母,密码本)

目录

  • 乱码问题

  • 单线程纯数字爆破

  • 单线程数字字母爆破

  • 多线程爆破密码本

  • 单线程爆破3合1版(支持数字,数字+字母、密码本)

使用的是单线程,多线程会出现各种奇奇怪怪的问题,以后有时间再优化

乱码问题

破解压缩包时候会存在中文乱码问题!

1:直接使用Everything搜索出要修改的库文件 zipfile.py ,并用notepad++打开

图片

2:修改的第一段代码
大概位置在1374行

if flags & 0x800:
    # UTF-8 file names extension
    filename = filename.decode('utf-8')
else:
    # Historical ZIP filename encoding
    filename = filename.decode('gbk') # 把cp437修改为gbk

图片

3:修改的第2段代码
大概在1553行
这里也是与解决办法2的链接中不一致的地方。if语句的内容不一样,可能是zipfile升级的缘故


if fheader[_FH_GENERAL_PURPOSE_FLAG_BITS] & 0x800:
    # UTF-8 filename
    fname_str = fname.decode("utf-8")
else:
    fname_str = fname.decode("gbk")   # 把原来的cp437更改为gbk

图片

4:保存退出即可

单线程纯数字爆破

需要指定一下第6行(压缩包的位置),第20行(密码区间)


import zipfile
import os
import time
import sys

os.chdir(r'C:\Users\asuka\Desktop\123')
start_time = time.time()

# 获取zip文件
def get_zipfile():
    files = os.listdir()
    for file in files:
        if file.endswith('.zip'):
            return file

# 用来提取zip文件
def extract():
    file = get_zipfile()
    zfile = zipfile.ZipFile(file)  # 读取压缩文件
    for num in range(1, 1000000):  # 设置数字密码区间
        try:
            pwd = str(num)
            zfile.extractall(path='.', pwd=pwd.encode('utf-8'))
            print('解压密码是:', pwd)
            end_time = time.time()
            print('单线程破解压缩包花了%s秒' % (end_time - start_time))
            sys.exit(0)  # 让程序在得到结果后,就停止运行,正常退出
        except Exception as e:
            pass

if __name__ == "__main__":
    extract()

单线程数字字母爆破

脚本默认工作在脚本所在的路径,如需更改,请手动修改第49


import zipfile
import time
import sys
import random
import os


class MyIter(object):
    word = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"  # 原始的密码本

    def __init__(self, min_len, max_len):  # 迭代器实现初始方法,传入参数
        # 下面的if-else是为了解决extract函数中,for循环中传递的密码长度可能前者的值大于后者,这一bug
        if min_len < max_len:
           
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值