根据网上一些使用py3破解zip密码的教程,这里记录我实现的几个过程和遇到的问题
问题:
1.zip压缩包,必须是zip老版本的否则无法破解
2.zip密码的格式如果不是ascii的可能会破解失败
3.破解得到密码后,不会自动停止,我已经改进
源码:
import optparse
import zipfile
def extract_zip(zFile,password):
try:
#pwd需要的是一个byte类型的 我们需要转换不然是破解不出来密码的
print("[+][{Pass}] Cracking.....".format(Pass=password));
zFile.extractall(pwd=password.encode("ascii"));
#如果解压成功 返回密码 如果失败 就抛出异常
return password;
except:
pass
def main():
#设置help
parser = optparse.OptionParser("usage -f -d ");
#绑定参数 -f =》zname -d =》dname
parser.add_option('-f',dest='zname',type='string',help='specify zip file');
parser.add_option('-d',dest='dname',type='string',help='specify dict file');
#不知道干啥的
(options,arg) = parser.parse_args()
#如果参数为空就打印刚设置的help信息退出
if(options.zname == None) | (options.dname == None):
print (parser.usage);
exit(0);
else:
zname = options.zname;
dname = options.dname;
#创建zip对象 一会需要传给extract_file函数
zFile = zipfile.ZipFile(zname);
#打开字典文件(*.*)
passFile = open(dname);
#从字典文件中以list的方式读到line变量中 并去除空格和换行符
for line in passFile.readlines():
password = line.strip();
#传入刚才创建的zip对象和循环读取的密码
gress = extract_zip(zFile,password);
#如果密码返回到gress中就打印出密码 停止循环
if gress:
print("\033[0;31mPassword Found:\033[0m",password);
exit();
if __name__ == '__main__':
main();
运行结果:
知识点:
1.optparse库的使用
2.zipfile库的使用
参考资料:
https://blog.csdn.net/waiting_ForLove/article/details/78231289
视频:
https://www.youtube.com/watch?v=L8UleqdNR3M