Python编写zip密码破解脚本(超详细) |
您所在的位置:网站首页 › 口令破解定义 › Python编写zip密码破解脚本(超详细) |
Python编写zip暴破脚本
原理python的zipfile库暴破zip文件口令利用线程提高性能用户自定义参数脚本完整代码
最近看到一篇关于zip密码破解脚本的文章,梳理了一番,向分享给大家 原理原理很简单,就是循环遍历字典中的每一个密码,尝试破解。除此之外,此脚本用线程提高性能,用脚本选项提高了灵活性 最后脚本运行结果如下,完整代码在最下面 编写Zip文件口令破解脚本前,我们要先了解一下python的zipfile库。 如果没有安装库,需要先用pip安装库 在终端中打开python,查看zipfile库的帮助信息 python help('zipfile')可以看到如下信息: 我们编写一个脚本了解一下zipfile库的使用方法 在python编辑器上创建一个名为 zip_crack.py 的文件,我用的是pycharm,大家也可以用其他的编辑器 先导入zipfile库,然后用加密后的zip文件实例化一个ZipFile类 若没有加密的zip文件,可以在kali下用zip命令加密zip文件,具体如下 我们用此加密的zip文件实例化ZipFile类 zFile = zipfile.ZipFile("grit.zip")然后使用extractall()方法 解压这个zip文件,并在pwd参数上填入加密此zip的口令 zFile.extractall(pwd=‘12345’)
运行此脚本,看看结果 下面,我们尝试用字典破解有口令保护的zip文件 大家如果有自己的字典,可以用自己的,如果没有,可以创建一个简单的字典 遍历测试字典中的每一个单词,若口令不正确,则抛出异常,若口令正确,则输出口令 for line in passFile.readlines(): password = line.strip('\n') try: zFile.extractall(pwd=password) print("[+] Found password " +password+ '\n') except Exception,e: pass我们执行一下这个脚本,看看效果 main()函数遍历字典,尝试密码 def main(): zFile = zipfile.ZipFile("grit.zip") passFile = open("dict.txt") for line in passFile.readlines(): password = line.strip('\n') extractFile(zFile, password)这样能遍历每一个单词,执行完一个才能执行下一个,如果字典文件非常大,那需要很长时间才能读完字典。为了提高性能,我们可以用线程同时尝试多个口令,这就需要用到python中线程模块了 我们改进一下我们的代码 首先导入包 from threading import Thread然后再main()函数中用线程执行extractall()函数 用到线程,就提高了性能。但我们对不同的zip破解时,或想用其他字典时,我们还要改代码,来修改zip文件和字典文件。 为了提高脚本的灵活性,我们可以用python中的optparse库来设置参数选项 同样,需要导入模块 import optparse若没有,需要自己安装,这里就不演示了 在main()函数中写入参数配置代码 parser = optparse.OptionParser("usage%prog" + "-f -d ") parser.add_option('-f', dest='zname', type='string', help='specify zip file') parser.add_option('-d', dest='dname', type='string', help='specify dictionary file') (options, args) = parser.parse_args() if (options.zname == None) | (options.dname == None): print parser.usage exit(0) else: zname = options.zname dname = options.dname并将zFile和 passFile 参数改为对应的变量 最后,为了能更好的理解代码运行,可以加入一些输出代码输出一些提示信息 脚本完整代码下面是脚本的完整代码 import zipfile import optparse from threading import Thread def extractFile(zFile, password): try: zFile.extractall(pwd=password) print("[+] Found password " +password+ '\n') except: print("[-] " + password + " Failed") def main(): parser = optparse.OptionParser("usage%prog" + "-f -d ") parser.add_option('-f', dest='zname', type='string', help='specify zip file') parser.add_option('-d', dest='dname', type='string', help='specify dictionary file') (options, args) = parser.parse_args() if (options.zname == None) | (options.dname == None): print parser.usage exit(0) else: zname = options.zname dname = options.dname zFile = zipfile.ZipFile(zname) passFile = open(dname) for line in passFile.readlines(): password = line.strip('\n') print("[*] Trying password: "+ password) t = Thread(target=extractFile, args=(zFile, password)) t.start() if __name__ == '__main__': main()我们在终端运行脚本,最后成功破解了口令 如有错误,还望指正 如果有什么问题,可以在评论区留言,我会尽力为大家解决! |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |