赞
踩
前段时间有个朋友要破解之前的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压缩文件,因为不管是否解压成功,程序都不会报错,本人代码小白,因此还在探索更好的破解方式。
程序执行慢,仅供共同学习参考。不得用于非法破解。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。