发布时间:2025-12-09 21:41:09 浏览次数:4
根据网上一些使用py3破解zip密码的教程,这里记录我实现的几个过程和遇到的问题
问题:
1.zip压缩包,必须是zip老版本的否则无法破解
2.zip密码的格式如果不是ascii的可能会破解失败
3.破解得到密码后,不会自动停止,我已经改进
源码:
import optparseimport zipfiledef extract_zip(zFile,password):try:#pwd需要的是一个byte类型的 我们需要转换不然是破解不出来密码的print("[+][{Pass}] Cracking.....".format(Pass=password));zFile.extractall(pwd=password.encode("ascii"));#如果解压成功 返回密码 如果失败 就抛出异常return password;except:passdef main():#设置helpparser = optparse.OptionParser("usage -f <zifFIle> -d <dict>");#绑定参数 -f =》zname -d =》dnameparser.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