Python字典暴力破解zip文件仅遍历26个词就停止问题求助
问题根因
你的代码存在遍历对象错误的问题:
在with open(wordlist, "rb") as list:代码块中,你写的循环是for word in tqdm(wordlist, total=total, unit="words"),这里传给tqdm遍历的wordlist是你定义的字典文件路径字符串"/home/drk/Desktop/list.txt",而非打开的字典文件句柄list。
遍历字符串时会逐个读取字符,该路径的字符长度刚好为26,所以程序跑完26次循环就直接结束,根本没有读取字典里的密码词条。
修复方法
把循环行的遍历对象替换为你打开的文件句柄即可,修改后代码段如下:
with open(wordlist, "rb") as fp: # tqdm传入文件句柄遍历字典内容,而非路径字符串 for word in tqdm(fp, total=total, unit="words"): try: file.extractall(pwd=word.strip()) except: continue else: print("[+] Password Found!: " + word.decode().strip()) # 找到密码后主动退出,避免无意义遍历 exit(0) print("[-] None of the passwords did work. ")
补充优化建议
- 不要用
list作为变量名,这是Python内置类型的关键字,容易引发命名冲突,建议替换为fp、word_file这类含义更清晰的变量名 - 空的
except会捕获所有异常包括键盘中断等非密码错误的异常,建议明确捕获zipfile.BadZipFile、RuntimeError这类和密码验证错误相关的异常,方便后续调试 - 字典使用完后建议主动调用
file.close()关闭zip文件句柄,避免资源泄漏
内容的提问来源于stack exchange,提问作者Darkest Surface
相关产品推荐
相关产品推荐

