首先我们要导入三个模块
zipfile zip模块
optparse 解析命令行选项模块
threading 线程模块
parser = optparse.OptionParser(‘xxxxx’)
这个是定义好optparse模块
add_option(‘-f’, dest=’zname’, type=’string’,\
help=’specify zip file’)
'-f' 是设定的一个命令参数
dest='zname' 这个代表的是我们在获取命令行值的属性
例如 :运行zippass.py -f opti
print options.zname
结果为:opti
(options, args) = parser.parse_args()
print options
结果为:{zname:opti} 这是一个对象
我们通过判断这个用户是否输入过相对应内容
然后通过判断,只要有其中一个命令参数不存在 , 我们就退出程序
if (options.zname == None) | (options.dname == None):
exit(0)
parser = optparse.OptionParser("usage %prog "+\
"-f <zipfile> -d <dictionary>")
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
我们通过zipfile.ZipFIle(zname)导入压缩包
zname 就是我们在-f eval.zip 这个内容
通过命令行参数,我们在这里设定-f 的内容为压缩包的名称
我们通过open(dname) 打开字典文件
这个dname的值就是 -d dictionary.txt 这个内容
然后通过for line in passFile.readlines(): 来循环字典进行破解
Thread()方法是线程的一个方法.
target=extractFile 这个是方法名
args=(zFile,password) 这个是方法参数
t.start() 启动线程
zFile = zipfile.ZipFile(zname)
passFile = open(dname)
for line in passFile.readlines():
password = line.strip('\n')
t = Thread(target=extractFile, args=(zFile, password))
t.start()
这个是最重要的一部分,开始破解.
通过接受到的参数 zFile password
zFile.extractall(pwd=password) 开始尝试参数, 是否是压缩包密码.
如果是就找到显示的密码
如果不是就进入
except:
pass
def extractFile(zFile, password):
try:
zFile.extractall(pwd=password)
print '[+] Found password ' + password + '\n'
except:
pass
这个是最后运行的结果
程序源码连接:https://pan.baidu.com/s/1boQGHIn
#!/usr/bin/python
# -*- coding: utf-8 -*-
import zipfile
import optparse
from threading import Thread
def extractFile(zFile, password):
try:
zFile.extractall(pwd=password)
print '[+] Found password ' + password + '\n'
except:
pass
def main():
parser = optparse.OptionParser("usage %prog "+\
"-f <zipfile> -d <dictionary>")
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')
t = Thread(target=extractFile, args=(zFile, password))
t.start()
if __name__ == '__main__':
main()