python 多线程 30行代码破解加密ZIP文件
# coding = utf-8
import optparse
import zipfile
from threading import Thread
from tqdm import tqdm
def extract_file(zip_file, password):
""" 提取压缩文件,通过密码不断尝试 """
try:
zip_file.extractall(pwd=bytes(password, 'ansi'))
print(f'\n 发现密码,正确密码为:{password}')
except:
pass
def main():
# 第一行通过调用optparse的函数创建一个parser的实例化对象
parser = optparse.OptionParser('\n %prog -z <zipfile> -d <dictionary>')
# 第二行添加一个参数,在命令行上输入-z xxxx 可将命令行上的zip路径作为字符串传入到变量zname中
parser.add_option('-z', dest='zname', type='string', help='specify zip file')
# 第三行添加一个参数,在命令行上输入-d xxxx 可将命令行上的字典文件作为字符串传入到变量dname中
parser.add_option('-d', dest='dname', type='string', help='specify dictionary file')
# 第四行进行解析,得到相关参数,得到options。
options, args = parser.parse_args()
# 第五行,通过zname和dname判断是否传入的参数为空
if options.zname and options.dname:
zip_name = options.zname
dict_name = options.dname
else:
print(parser.usage)
exit(0)
zip_name = 'zip.zip'
dict_name = 'mima3.txt'
#多线程函数代码
# 通过try-except来抓取运行程序时的异常,若报错,说明传入的文件不存在
try:
# 调用zipfile模块的实例对象方法,将zip路径传入
zip_file = zipfile.ZipFile(zip_name)
# 打开字典文件,用python自带的with关键词来打开,可以交由python自主关闭文件的资源
with open(dict_name, 'r', encoding='ansi') as f:
# 读取每一行,并且将密码后的\n 清空,也就是清空换行符
for line in tqdm(f.readlines(),ascii=True):
password = line.strip('\n')
# 对每个密码开启线程去处理,调用extract_file函数,传入的参数为元组(zip_file, password)
thread = Thread(target=extract_file, args=(zip_file, password))
# 调用线程开始的方法
thread.start()
except Exception as e:
print(f'发生异常!请检查文件是否存在!异常信息为:{e}')
main()
运行下面的命令执行程序 带参数
python app.py -z zip.zip -d top10W.txt
optarse:这是一个python自带的库,通过上面介绍的代码可以和linux命令似的,带参数执行
zipfile: python自带的库,可以对zip文件进行解压缩,本章实现的重点模块,需要注意的是,在用extractall时,传入的字符串密码进行字节编码的转化。zip_file.extractall(pwd=bytes(password,’utf-8′))
关于解压出来的文件名字会有乱码的情况,请看文章:
tqdm:需要安装的第三方库,在可以循环迭代的对象上使用即可。如:
for line in tqdm(f.readlines()):
爆破字典的开源项目,其中收录了不少相关的密码,可以star 或者 fork到自己的仓库记录使用。地址如下:
欢迎留下你的看法
共 0 条评论