经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python » 查看文章
python利用itertools生成密码字典并多线程撞库破解rar密码
来源:jb51  时间:2019/8/13 8:54:09  对本文有异议

脚本功能:

  • 利用itertools生成密码字典(迭代器形式)
  • 多线程并发从密码字典中取出密码进行验证
  • 验证成功后把密码写入文件中保存
  1. #!/usr/bin/env python
  2. # -*- coding: UTF-8 -*-
  3. # Author:Leslie-x
  4. import itertools as its
  5. import threading
  6. import rarfile
  7. import os
  8. words = '0123456789abcdefghijklmnopqrstuvwxyz' # 涉及到生成密码的参数
  9. flag = True # 是否关闭线程的标志
  10.  
  11. def append_on_file(password,file_name):
  12. # 把解析出的密码写入到文件中
  13. with open('password.txt', 'a', encoding='utf8') as f:
  14. text = file_name+':'+password + '\n'
  15. f.write(text)
  16. def get_password(min_digits, max_digits, words):
  17. """
  18. :param min_digits: 密码最小长度
  19. :param max_digits: 密码最大长度
  20. :param words: 密码可能涉及的字符
  21. :return: 密码生成器
  22. """
  23. while min_digits <= max_digits:
  24. pwds = its.product(words, repeat=min_digits)
  25. for pwd in pwds:
  26. yield ''.join(pwd)
  27. min_digits += 1
  28. def extract(File,file_name):
  29. """
  30. 若线程关闭标志为True,就执行循环,从密码生成器中取出密码,验证密码是否正确
  31. 密码正确,则把密码写入文件中,并将线程关闭标志flag设定为False,通知其他线程关闭
  32. """
  33. global flag
  34. while flag:
  35. p = next(passwords)
  36. try:
  37. File.extractall(pwd=p) # 打开压缩文件,提供密码...
  38. flag = False
  39. print("password is " + p) ###破解到密码
  40. append_on_file(p,file_name)
  41. break
  42. except:
  43. print(p)
  44. def mainStep(file_path,file_name):
  45. """
  46. 多线程并发验证密码
  47. :param file_path: rar压缩文件路径列表
  48. :return:
  49. """
  50. file = rarfile.RarFile(file_path)
  51. for pwd in range(3):
  52. t = threading.Thread(target=extract, args=(file,file_name))
  53. t.start()
  54. if __name__ == '__main__':
  55. # 主程序
  56. base_dir = r'E:\迅雷下载\rar'
  57. for file_info in os.listdir(base_dir):
  58. try:
  59. # 拼接压缩文件路径
  60. file_path = os.path.join(base_dir, file_info)
  61. # 压缩文件名称
  62. file_name = file_info.split('.')[0]
  63. # 生成密码字典:密码长度最小为4,最大为11
  64. passwords = get_password(4, 11, words)
  65. # 将任务分发给线程执行
  66. mainStep(file_path,file_name)
  67. except:
  68. pass

注意:当前脚本在知道密码长度大概范围,可能涉及的字符具体范围下效率可行;如果对密码长度和涉及字符完全不知,撞库难度非常大

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号