python利用itertools生成密码字典并多线程撞库破解rar密码
脚本功能:
- 利用itertools生成密码字典(迭代器形式)
- 多线程并发从密码字典中取出密码进行验证
- 验证成功后把密码写入文件中保存
#!/usr/bin/envpython #-*-coding:UTF-8-*- #Author:Leslie-x importitertoolsasits importthreading importrarfile importos words='0123456789abcdefghijklmnopqrstuvwxyz'#涉及到生成密码的参数 flag=True#是否关闭线程的标志 defappend_on_file(password,file_name): #把解析出的密码写入到文件中 withopen('password.txt','a',encoding='utf8')asf: text=file_name+':'+password+'\n' f.write(text) defget_password(min_digits,max_digits,words): """ :parammin_digits:密码最小长度 :parammax_digits:密码最大长度 :paramwords:密码可能涉及的字符 :return:密码生成器 """ whilemin_digits<=max_digits: pwds=its.product(words,repeat=min_digits) forpwdinpwds: yield''.join(pwd) min_digits+=1 defextract(File,file_name): """ 若线程关闭标志为True,就执行循环,从密码生成器中取出密码,验证密码是否正确 密码正确,则把密码写入文件中,并将线程关闭标志flag设定为False,通知其他线程关闭 """ globalflag whileflag: p=next(passwords) try: File.extractall(pwd=p)#打开压缩文件,提供密码... flag=False print("passwordis"+p)###破解到密码 append_on_file(p,file_name) break except: print(p) defmainStep(file_path,file_name): """ 多线程并发验证密码 :paramfile_path:rar压缩文件路径列表 :return: """ file=rarfile.RarFile(file_path) forpwdinrange(3): t=threading.Thread(target=extract,args=(file,file_name)) t.start() if__name__=='__main__': #主程序 base_dir=r'E:\迅雷下载\rar' forfile_infoinos.listdir(base_dir): try: #拼接压缩文件路径 file_path=os.path.join(base_dir,file_info) #压缩文件名称 file_name=file_info.split('.')[0] #生成密码字典:密码长度最小为4,最大为11 passwords=get_password(4,11,words) #将任务分发给线程执行 mainStep(file_path,file_name) except: pass
注意:当前脚本在知道密码长度大概范围,可能涉及的字符具体范围下效率可行;如果对密码长度和涉及字符完全不知,撞库难度非常大
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。