赞
踩
当遇到zip压缩文件有密码时,由于zip输入密码错误次数不限制,可以通过python相关库进行暴力破解。
zip两种加密方式:传统加密方式和AES加密方式(不勾选传统加密方式),加密方式不同
故存在两种解压方式。
通过zipfile库解压文件,itertools库通过字典密码,排列组成密码进行破解。
代码如下(示例):
- import ziffile #zip压缩文件
- import itertools #无穷迭代器
- import pyzipper #AES解密
代码如下(示例):
- 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
- # 首先得安装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相关语句实现。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。