Python_暴力破解zip压缩文件
目录
前言
当遇到zip压缩文件有密码时,由于zip输入密码错误次数不限制,可以通过python相关库进行暴力破解。
zip两种加密方式:传统加密方式和AES加密方式(不勾选传统加密方式),加密方式不同
故存在两种解压方式。
一、破解原理
通过zipfile库解压文件,itertools库通过字典密码,排列组成密码进行破解。
二、使用步骤
1.引入库
代码如下(示例):
import ziffile #zip压缩文件 import itertools #无穷迭代器 import pyzipper #AES解密
2.读入数据
2.1、破解ZIP 传统加密模式
代码如下(示例):
import zipfile import itertools filename = "加密文件.zip" def uncompress(filename, password): try: with zipfile.ZipFile(filename) as zfile: zfile.extractall(./, pwd=password.encode(utf-8)) return True except: return False # 密码字典 chars = "abcdefghijklmnopqrstuvwxyz0123456789" for c in itertools.permutations(chars, 4): password = "".join(c) result = uncompress(filename, password) if not result: print("passwrod:%s is error." % password) else: print(Decompression succeeded,password is:, password) break
2.2、破解ZIP AES加密模式
# 首先得安装pyzipper库,pip insall pyzipper import pyzipper from threading import Thread flag= True def extractFile(zip_file, password): password = str(password) with pyzipper.AESZipFile(zip_file, r, compression=pyzipper.ZIP_LZMA, encryption=pyzipper.WZ_AES) as f: f.setpassword(password.encode(utf-8)) try: f.extractall() # 使用密码尝试解压 print("Found password: " + password) except: pass # 解压失败说明密码错误,跳过 def main(): # 采用AES默认加密算法的压缩文件 zip_file_name = "AES破解.zip" for number in range(1, 9999): if flag is True: extractFile(zip_file_name, number) if __name__ == __main__: main()
zfile模块 # 解压zip文件,解压时可以提供密码 zfile.extractall("./",pwd= password.encode("utf-8")) itertools模块 # 实现全字符的全排列abc/acb/bca/bac/cab/cba itertools.permutations("abc",3)
总结
此次破解密码方法简单,只需利用zipfile和itertools两个模块,通过python相关语句实现。