众所周知握手包跑包的时候密码字典的生成是个非常头疼的问题,因为10位数的纯数字密码字典就已经很大了,这里我使用的穷举法,根据所给出的字符串中的字符串,穷举出所有密码组合。

为此使用python来进行自动化跑包,而用电脑跑包又非常的浪费资源,跑包的时候完全没法使用电脑了,所以准备在树莓派上进行跑包。可是无论PC还是树莓派跑包最怕的事情就是死机或者停电,so,程序的要求如下:

首先,能够把将要生成的字典分解成小字典来生成,当每个小字典生成结束并跑完的时候,再生成另一个小字典来跑包,如此反复进行;

其次,为了防止树莓派断电,或者突然想自己的电脑,需要程序能够保存已经完成的工作,当下次再启动程序的时候继续上次没有完成的任务;

最后,考虑到多核心cpu的利用,需要生成子进程来跑包,这样程序占用的资源就足够多了,才能充分利用设备来跑包。

函数分布如下:

父进程:

  1. 将密码字符串转换为数字字符串的函数
  2. 将数字字符串转换为密码字符串的函数
  3. 根据开始密码、结束密码、任务数量将所有密码组合分割成符合任务数量的字符串列表的函数,由这个列表来分配给各个子进程需要制作的字典容量
  4. 检测子进程是否找到密码并输出密码文件的函数
  5. 集合调用上述所有函数的主函数

子进程,只有一个函数和调用,大致流程如下:

  1. 利用传入的开始字符串和停止字符串来生成小字典
  2. 字典生成后跑包,调用subprocess.check_out(),生成跑包子进程
  3. 跑包子进程结束时检查是否得到密码,得到密码后写入文件,以便上级进程能够通过文件来检测到密码已找到
  4. 若未得到密码则写入当前字典最后的一个字符串,作为可以中断的存档

好了,父子进程的关系和功能大致都已经叙述了,下面就是开源的内容了:

需要注意

这个代码需要安装aircrack-ng

运行的参数需要在hashcat_attack_tasks_malloc.py的最后修改

跑包的命令需要在hashcat_attack_task.py中修改,代码中有注释

第二次运行程序时需要输入时候继续

资源文件我已经上传,想支持我的可以去下载一下,现在改成免费的,之前不知道为啥csdn给我改成9分了,气死我了!!

//download.csdn.net/download/wachm/12118290

还有,hashcat比这个跑的快,而且可以利用GPU加速,但是不像我这个可以中断,保存任务的进度然后下次继续进行,有高性能设备的小可爱们可以试试这个!

好了,找一找,改一改吧!

hashcat_attack_tasks_malloc.py
import subprocess
import time
import hashcat_attack_name as han# 进制转换
# 进制字符串, 待转换至10进制的字符串
# 返回,10进制数字
def base_change_special_normal(_rule_str, _special):_rule_str = "".join(_rule_str)_special = "".join(_special)t_base = _rule_str.__str__().__len__()t_total = 0t_length = _special.__len__()t_s = _special.__getitem__(t_length - 1)t_total = t_total + _rule_str.index(t_s)t_unit_base = t_basefor i in range(t_length-2, -1, -1):t_total = t_total + t_unit_base * _rule_str.index(_special.__getitem__(i))t_unit_base = t_unit_base*t_basereturn t_total# 进制转换
# 进制字符串,10进制数字, 填充长度
# 返回,给定进制字符串形式的进制
def base_change_normal_special(_rule_str, _decimal, _fill_length):# 进制基数t_base = _rule_str.__str__().__len__().__int__()t_list = []t_decimal = _decimal.__int__()while t_decimal > 0:t_mod = t_decimal % t_baset_decimal = t_decimal // t_baset_list.append(_rule_str.__getitem__(t_mod))if _fill_length > 0 and t_list.__len__() < _fill_length:for i in range(t_list.__len__(), _fill_length):t_list.append(_rule_str.__getitem__(0))t_list.reverse()return "".join(t_list)# dict_string表示所有组合的字符源,task_mount表示分割的任务数,task_length表示生成的长度
# task_starts指定开始的字符串,task_stops指定结束的字符串
# 返回一个列表,以[开始字符串,结束字符串,开始字符串,结束字符串,。。。]的形式返回
def str_task_split(_dict_str, _task_mount, _task_length, _task_starts, _task_stops):_task_mount = int(_task_mount)_task_length = int(_task_length)if str(_task_starts).__len__() != str(_task_stops).__len__():print("str_task_split 参数错误,4,5长度不等")return 0if _task_length != str(_task_starts).__len__():print("str_task_split 参数错误,长度不匹配")return 0# 进制转换t_starts_d = base_change_special_normal(_dict_str, _task_starts)t_stops_d = base_change_special_normal(_dict_str, _task_stops)# 剩余需要生成的总数t_total = t_stops_d-t_starts_d# 每个任务的数量t_task_average = t_total // _task_mount# 任务余数,这个加在最后一个任务里t_task_mod = t_total % _task_mountt_return_list = []for i in range(0, _task_mount - 1):t_return_list.append(base_change_normal_special(_dict_str, t_starts_d, _task_length))print(t_starts_d, end="-->")t_stops_d = t_starts_d + t_task_averageprint(t_stops_d)t_return_list.append(base_change_normal_special(_dict_str, t_stops_d, _task_length))t_starts_d = t_stops_d+1t_return_list.append(base_change_normal_special(_dict_str, t_starts_d, _task_length))print(t_stops_d, end="-->")t_stops_dt_stops_d = t_stops_d + t_task_average + t_task_modt_return_list.append(base_change_normal_special(_dict_str, t_stops_d, _task_length))print(t_stops_d)return t_return_list# 检测是否子进程是否找到密码并输出文件,文件内容是否包含密码
# 文件名前缀,进程数量,文件扩展名
# 返回True表示找到密码
def hashcat_attack_sub_has_passwd(_out_pre, _mount, _out_type):_mount = int(_mount)_has_passwd = Falsefor i in range(0,_mount):_file_name = _out_pre+str(i)+_out_typetry:f = open(_file_name, 'r')if f.readline().find('KEY FOUND') >= 0:_has_passwd = Truef.close()breakexcept IOError:passreturn _has_passwd# 得到分配列表
# 分配进程
# 读取子进程进度,记录子进程已完成的密码,显示子进程已完成的密码
def hashcat_attack_tasks_malloc(_dict_str, _task_mount, _task_length, _task_starts, _task_stops):_task_mount = int(_task_mount)_task_length = int(_task_length)# 检测是否存在上一次的任务,并且是否继续上一次的任务print(time.asctime(time.localtime(time.time())))_has_load_task = Falsetry:continue_file = open(han.continue_file_name, 'r')__task_mount = continue_file.readline().strip()_is_finish = continue_file.readline().strip()continue_file.close()if _is_finish == han.continue_flag:ask = input('是否继续未完成的任务(Y/n):')print(ask)if ask.lower() == 'yes' or ask.lower() == 'y' or ask == '\n':task_str_list = list()for i in range(0, _task_mount):_task_load_file = open(han.split_load_file_pre+str(i)+han.split_load_file_type)task_str_list.append(_task_load_file.readline().strip())_has_load_task = True_task_mount = int(__task_mount)except IOError:pass# 分配列表if not _has_load_task:task_str_list = str_task_split(_dict_str, _task_mount, _task_length, _task_starts, _task_stops)task_list = list()# 创建任务列表for i in range(0, _task_mount):task_argument_list = ['python', 'hashcat_attack_task.py', _dict_str, task_str_list[i * 2], task_str_list[i * 2 + 1], str(i)]task_list.append(subprocess.Popen(task_argument_list))# 创建记录文件continue_file = open(han.continue_file_name, 'w')continue_file.write(str(_task_mount)+'\n')continue_file.write(han.continue_flag)continue_file.close()while True:# 60秒查询一次子进程的状态,当有进程得到密码时,停止所有的进程time.sleep(60)# 用于判断所有进程是否结束task_all_over = 0# 检测任务是否结束,检测子进程是否输出密码文件for i in range(0, _task_mount):if task_list[i].poll().__str__().strip() == "None":# 检测是否输出密码文件的函数if hashcat_attack_sub_has_passwd(han.output_pre, _task_mount, han.output_type):# 结束所有进程task_all_over = _task_mount# 写入任务完成continue_file = open(han.continue_file_name, 'w')continue_file.write(str(_task_mount) + '\n')continue_file.write(han.continue_flag)continue_file.close()print('找到密码请查看目录下文件')print(time.asctime(time.localtime(time.time())))else:task_all_over = task_all_over+1if task_all_over == _task_mount:for i in range(0,_task_mount):task_list[i].terminate()breakprint('当前字符集所有组合已经全部尝试')dict_str = "1234567890"
task_length = 10
task_mount = 4
task_starts = "1234491111"
task_stops = "1234560000"
hashcat_attack_tasks_malloc(dict_str, task_mount, task_length, task_starts, task_stops)
hashcat_attack_task.py
# coding=utf-8
import sys
import subprocess
import shlex
import hashcat_attack_name as han# number是当前进程被分配的字符串标记,用来防止写文件的时候重名
# 参数:字典的源字符集,开始字符串,停止字符串,文件标记
def hashcat_attack_task(_dict_string, _starts, _stops, _number):# limit限制字典条数limit = 10000000dict_file_name = han.dict_pre + _number + han.dict_typedict_file = open(dict_file_name, 'w')_dict_string = str(_dict_string)_starts = str(_starts)_stops = str(_stops)dict_string_length = _dict_string.__len__()tab_key = list()tab_count = list()tab_length = _starts.__len__()# initfor i in range(0, tab_length):tab_key.append(_dict_string.__getitem__(i))tab_count.append(0)# set from startsfor i in range(0, tab_length):tab_count.__setitem__(i, _dict_string.index(_starts.__getitem__(i)))tab_key.__setitem__(i, _dict_string.__getitem__(tab_count.__getitem__(i)))print("starts:" + "".join(tab_key))print(tab_key.__len__())print(tab_count.__len__())gcount = 0_found_key = Falsekey = "none"while "".join(tab_key) != _stops :# global countergcount = gcount + 1# last key ++cur = tab_count.__getitem__(tab_length - 1)tab_count.__setitem__(tab_length - 1, cur + 1)# check length-1 to 1, the 1st can't be checked in herefor i in range(tab_length - 1, 0, -1):if tab_count.__getitem__(i) == dict_string_length:pre = tab_count.__getitem__(i - 1)tab_count.__setitem__(i - 1, pre + 1)tab_count.__setitem__(i, 0)# check the 1stif tab_count.__getitem__(0) == dict_string_length:break# reload tab_keyfor i in range(0, tab_length):tab_key.__setitem__(i, _dict_string.__getitem__(tab_count.__getitem__(i)))# writekey = "".join(tab_key)dict_file.write(key + "\n")# 中断,写字典,跑包if gcount >= limit or key == _stops:dict_file.close()# 使用aircrack跑包命令在此,请自行修改,可以删去-b参数argument = 'aircrack-ng -a2 -b 88:10:8f:36:6c:6c -w ./' + dict_file_name + ' ./-05.cap'argument = shlex.split(argument)result = subprocess.check_output(argument).decode(encoding="utf-8").split('\n')# 记录当前任务_task_save = open(han.split_load_file_pre + _number + han.split_load_file_type, 'w')_task_save.write(key+'\n')_task_save.write(_stops)_task_save.close()# 如果找到密码则写入文件for i in result:if i.find('KEY FOUND') >= 0:_output = open(han.output_pre + _number + han.output_type, 'w')_output.write(i)_output.close()_found_key = Truebreakdict_file = open(dict_file_name, 'w')if _found_key:breakdict_file.close()# hashcat_attack_task('1234567890', '1234564444', '1234567890', str(5))
hashcat_attack_task(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4])
hashcat_attack_name.py
output_pre = 'hashcat_attack_passwd_'
output_type = '.txt'dict_pre = 'hashcat_attack_dictionary_'
dict_type = '.txt'continue_file_name = 'hashcat_attack_continue.txt'
continue_flag = 'unfinished!'split_load_file_pre = 'hashcat_attack_task_'
split_load_file_type = '.txt'

结束!

wifi握手包自动跑包相关推荐

  1. IDEA 设置自动导入包,以及手动导入包

    IDEA 设置自动导入包,以及手动导入包 自动导入包 IntellJ IDEA -> Preferences -> Editor -> Auto Import 选中 Add unam ...

  2. 无线WiFi安全渗透与攻防(十三)之WPA破解-windows下GPU跑包加速

    WPA破解-windows下GPU跑包加速 实现GPU加速的前提条件: 英伟达公司 设计的 计算统一设备架构 AMD 设计的 流开放计算库 openCL 通过这两个技术,可以让显卡帮我们进行计算渗透 ...

  3. Spark3.0发布了,代码拉过来,打个包,跑起来!| 附源码编译

    作者 | 敏叔V587 责编 | 徐威龙 封图| CSDN 下载于视觉中国 Spark3.0已经发布有一阵子了,官方发布了预览版,带来了一大波更新,对于我们程序员来说,首先当然是代码拉过来,打个包,跑 ...

  4. Spark 3.0 发布了,代码拉过来,打个包,跑起来!| 附源码编译

    作者 | 敏叔V587 责编 | 徐威龙 封图| CSDN 下载于视觉中国 Spark3.0已经发布有一阵子了,官方发布了预览版,带来了一大波更新,对于我们程序员来说,首先当然是代码拉过来,打个包,跑 ...

  5. (一)串口通信:同步通信与异步通信的区别;异步通信:握手、收发过程、心跳包、定时器、粘包、拆包、丢包、误包(或误码)、帧结构、奇偶校验、CRC校验等等

    目录 第一章.简介 第二章.并行通信 第三章.串行通信 3.1.同步通信 3.1.1.同步通信的原理 3.1.2.同步通信的数据格式 3.1.3.同步通信特点 3.2.异步通信 3.2.1.异步通信的 ...

  6. python 第三方包自动导入_7行代码,彻底告别python第三方包import导入问题!

    最近有不少小伙伴咨询关于pyton第三方包导入的问题,今天我们就来聊聊第三方包导入那些事. 随着对python学习的渐入臻境,越来越多的小伙伴们开始导入自己所需的第三方包,实现各种各样的功能.但是,他 ...

  7. eclipse自动排版快捷键、自动引入包

    ctrl+shift+f快捷键,自动排版 ctrl+shift+o快捷键,自动引入包 注意,有些输入法(如搜狗和百度输入法)中的简繁体字切换功能和eclipse的自动排版功能一致,必须先关掉输入法之后 ...

  8. idea 自动导入包和自动将没用的包去除

    加快开发效率,除去没用的包,洁癖者必用!      这样设置,就可以自动导入包以及除去没有用到的包

  9. 注解不自动导包_玩转SpringBoot2.X:SpringBoot自动配置原理大揭秘

    我们在使用SpringBoot的时候,是不是觉得特方便,根本不需要我们去配置什么端口号,应用名称,又比如我们再整合redis的时候,其实也不需要我们去指定端口号,IP,都会有默认的.是不是特方便.那么 ...

  10. 解决 IDEA 调用其他类的时候自动加上包路径和类名的情况_idea 快捷键汇总(转)...

    1.IDEA常用快捷键 Alt+回车 导入包,自动修正 Ctrl+N 查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+L 格式化代码 Ctrl+Alt+O 优化导入的类和包 Alt+In ...

最新文章

  1. linux shell mv 文件 文件夹移动重命名 命令
  2. 【C++】C++0x :: Introduction to some amazing features
  3. MySQL修改字段名、字段类型
  4. kafka _命令行操作
  5. 一个SAP开发人员的2018年终总结
  6. X264码率控制流程分析
  7. Redis官网——如何利用Redis做服务器集群的分布式锁
  8. 【Flink】Flink 1.13 将数据 写入 到 elasticsearch 7 案例
  9. oracle查看有哪些数据库用户登录,oracle如何查看当前有哪些用户连接到数据库,oracle当前有...
  10. Binary XML file line #17vector tag requires viewportWidth 0
  11. C#ToString() 格式化数值
  12. docker用gpu的参数_Docker化部署(GPU)
  13. 顺式作用元件-增强子、终止子、沉默子、绝缘子
  14. 数论-------数的倍数
  15. 报表打印(rdlc)
  16. python中execute函数_python中的函数是如何使用的?
  17. FPGA芯片的GTX/GTH/GTY/GTP/GTZ/GTM高速信号有什么区别?
  18. Java基础-SSM之mybatis一对一关联
  19. 莱斯特大学计算机科学,莱斯特大学与纽约大学计算机科学专业哪个好?看完以下对比就懂了...
  20. 现行〖金融帝国实验室〗(Capitalism Lab)官方正版游戏『销售政策指引』(2022.02.01~02.28)

热门文章

  1. 互联网-3互联网思维的应用
  2. linux开启80和443,nginx 80和443同时做负载均衡
  3. DIY回音壁多媒体音箱
  4. Go语言【ftm库】
  5. python统计三国_如何用python对《三国演义》、《红楼梦》等名著开展词云分析及字频统计、出场统计等工作。...
  6. 错误代码:0x800F081F-0x20003。在INSTALL_UPDATES操作过程中的SAFE_OS阶段,安装失败,出现错误
  7. 加息对银行股影响|加息是对银行股的利好
  8. 计算机工程与应用退休被拒,如果您退休了,还能坚持独立做科学研究,那么和大家分享一下您的经验吧...
  9. 求职信高中生计算机,高中生求职信.doc
  10. linux下搜索丢失分区,找回丢失的Linux分区拯救我的硬盘