Python 暴力破解ZIP、7z文件

Python 暴力破解ZIP、7z文件

前段时间有个朋友要破解之前的zip文件。网上找了各种工具,不是报错就是提示不是zip文件。
心想不如自己写个Py代码自行暴力破解。
经查阅各位大神代码,最后发现乱码问题很难解决。最后还是这位大神提供了最好的做法。
具体请参考:https://blog.csdn.net/qq_21076851/article/details/122752196
下面也分享下自己的代码,希望大家一起学习。

import zipfile
import itertools


def support_gbk(zip_file: zipfile):
    name_to_info = zip_file.NameToInfo
    # copy map first
    for name, info in name_to_info.copy().items():
        real_name = name.encode('cp437').decode('gbk')
        if real_name != name:
            info.filename = real_name
            del name_to_info[name]
            name_to_info[real_name] = info
    return zip_file


def zipfile_decrypt(zipfile_path, password_dic, decrypt_path, password_digits):
    # 定义zip压缩文件的解密函数,需要传入4个参数
    # zipfile_path为7z文件绝对路径,绝对路径,例如:r'F:\myPython\新建文件夹.zip'
    # password_dic为密码字典,即可能出现的密码字符,字符类型,例如:'abcdefghijklmnopqrstuvwxyz0123456789'
    # decrypt_path解压到的文件路径,绝对路径,例如:r'F:\myPython'
    # password_digits最高密码位数,整数。

    zip_file = zipfile.ZipFile(zipfile_path)
    zip_file = support_gbk(zip_file)
    for length in range(1, password_digits):
        for combination in itertools.product(password_dic, repeat=length):
            password = ''.join(combination)
            try:
                zip_file.extractall(path=decrypt_path, pwd=password.encode())
                print('破解密码Password found:', password)
                return
            except:
                pass


jieya = r'F:\myPython\新建文件夹.zip' #请改为需要破解zip文件路径
zidian = 'abcdefghijklmnopqrstuvwxyz0123456789'	#请输入密码可能的字符
jieyadao = r'F:\myPython\新建文件夹' #请改为需要破解到的文件路径
weishu = 7 #请输入密码的最高位数
zipfile_decrypt(jieya, zidian, jieyadao, weishu)

同时采用同种方法解压7z压缩文件。

import py7zr
import itertools


def seven_file_decrypt(seven_file_path, password_dic, decrypt_path, password_digits):
    # 定义7z压缩文件的解密函数,需要传入4个参数
    # seven_file_path为7z文件绝对路径,绝对路径,例如:r'F:\myPython\新建文件夹.7z'
    # password_dic为密码字典,即可能出现的秘密字符,字符类型,例如:'abcdefghijklmnopqrstuvwxyz0123456789'
    # decrypt_path解压到的文件路径,绝对路径,例如:r'F:\myPython'
    # password_digits最高密码位数,整数。

    for length in range(1, password_digits):
        for combination in itertools.product(password_dic, repeat=length):
            pwd = ''.join(combination)

            try:
                seven_file = py7zr.SevenZipFile(file=seven_file_path, mode='r', password=pwd)
                seven_file.extractall(path=decrypt_path)
                print('破解密码Password found:', pwd)
                return
            except:
                # print('测试密码Password found:', pwd)
                pass


jieya = r'F:\myPython\新建文件夹.7z'
zidian = 'abcdefghijklmnopqrstuvwxyz0123456789'
jieyadao = r'F:\myPython'
weishu = 7
seven_file_decrypt(jieya, zidian, jieyadao, weishu)

之前有位大神提供的代码采用break跳出循环,后面测试,发现程序输出正确密码后依然会继续执行。因此本人采用return来结束程序的运行。
至于rar压缩文件,因为不管是否解压成功,程序都不会报错,本人代码小白,因此还在探索更好的破解方式。
程序执行慢,仅供共同学习参考。不得用于非法破解。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
首先你需要了解一下zip文件的结构,一个zip文件包含多个文件和目录,其中每个文件或目录都有一个相对路径,路径信息存储在zip文件的中央目录中。中央目录位于zip文件的末尾,记录了每个文件的信息,包括文件名、文件大小、压缩前大小、压缩方式、压缩时间等。 如果你知道了zip文件的密码,可以直接使用Python自带的zipfile库进行解压,示例代码如下: ```python import zipfile zip_file = zipfile.ZipFile('example.zip') # 解压所有文件到指定目录 zip_file.extractall(path='extract_dir', pwd=b'password') ``` 其中,'example.zip'是待解压的zip文件,'extract_dir'是解压后文件的存放目录,b'password'是zip文件的密码。 如果你不知道zip文件的密码,可以使用Python中的字典攻击工具来破解密码。字典攻击工具通常需要准备一个密码字典文件,然后逐一尝试字典中的每个密码,直到找到正确的密码为止。 下面是使用Python中的fcrackzip库进行字典攻击的示例代码: ```python import fcrackzip # 设置字典文件路径 wordlist_path = 'passwords.txt' # 设置zip文件路径 zip_file_path = 'example.zip' # 创建fcrackzip对象 cracker = fcrackzip.FCrackZip() # 设置字典文件路径和zip文件路径 cracker.set_dictionary(wordlist_path) cracker.set_zipfile(zip_file_path) # 开始破解 result = cracker.crack() # 输出破解结果 print(result) ``` 其中,'passwords.txt'是密码字典文件的路径,'example.zip'是待破解的zip文件的路径。fcrackzip库使用的是暴力破解和字典破解两种方式,因此可能会耗费很长时间才能破解成功。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值