本文不会从代码角度分析WiFi万能钥匙这个软件是如何「破解」密码的,主要从使用这个软件后的感受出发,分析它可能会用到的手段以及可能存在的风险。
以前因为好奇,安装了WiFi万能钥匙,但是从来没有打开过,当时我心里很清楚,蹭网的前提就是自己家被蹭。晚上刷微博看到一张图片,iPhone设备的WiFi列表中竟然出现了「🔑一键免费连接🔑」相关的提示,我用自己的手机测试了下,果真如此:
软件对WiFi密码的攫取
获取安装该软件用户连接过的WiFi的密码,这是WiFi万能钥匙需要攻克的第一个难题,攻克之后,从一个用户身上可以挖到1-10个WiFi id和WiFi密码。攻克的方式嘛,可以去网上搜罗下,很多保存下来的密码都是明文的,或者是只经过了简单的加密操作,如果用户root了自己的手机,软件可以随意获取。
显然,WiFi万能钥匙有一个自己的云端,储存了大量从用户手机里攫取到的WiFi信息,每个储存单元应该包含了如下信息(按照重要性从上往下依次排列):
WiFi容器的物理地址(MAC信息)
WiFi的密码
WiFi名称
WiFi容器的区域信息
WiFi容器的IP地址
由于民众对快速上网的极度渴望,偶然听到或者看到有这么个神器,当机立断将其下载到了手机上,在这两年时间间,该软件的用户量达到了5亿之多,月活跃用户在2.3亿(数据来自网络),其用户量之多、粘性之强,恐怕只有社交类的软件可以比拟了。由此,也可以想象WiFi万能钥匙的云端数据库有多么庞大。
WiFi的连接
初次打开软件的时候,你应该看到了它会向你申请「获取位置信息」的请求,目的有两个,第一是获取你所在区域的大概位置,然后将该位置附近的WiFi信息全部缓存到你的客户端,这样做可以大大地减少对服务器的压力,其二,目前WiFi万能钥匙也会做一些商品/商家的推广,拿到位置信息方便个性化投放。
1.密码匹配
以前手机没有提供权限给它获取WiFi列表,所以软件会引导用户将WiFi列表界面截图,然后通过图片分析拿到WiFi名称。而如今,iOS设备不仅提供了获取周边WiFi列表的权限,而且还允许软件对每个WiFi进行文字备注,如最上面破解效果列表图所示。
所以我猜测,以前软件只能通过WiFi名称进行匹配,而现在可以使用WiFi的其他信息如(MAC地址)进行匹配,匹配度更高,因为WiFi名称可能会存在重复问题。
2.撞库分析
拿到了几个亿的数据,自然少不了对数据进行统计和分析,拿到一些常用的弱口令,如八个8、四个123、八个0等,了解路由设置和WiFi设置的人本来就不多,很多上门服务的师傅一般就将密码设置成简单好记的,这也很大程度提高了撞库的成功率。对于拿不到密码的WiFi,软件毫无疑问会作出这种尝试,成本低、成功率还高。
3.暴力破解
暴破应该不会用于实时的密码获取,而是会在沉默状态下,对未知WiFi进行暴力破解,破解成功的WiFi上传到云端服务器。这种方式可能在软件上线的初期使用,只是我的一种猜测。
被蹭网存在的危害
如果家里的网络被小白用户蹭了,无非就是大家同时上网的时候,网速会慢一点,而如果你家网络被一个具备黑客素质的人蹭上了,这个时候可能需要引起注意了。
如果你家里有WiFi,那么一定会有一个路由器吧,路由器的密码还是初始状态的guest/admin么,或者被你设置成了六个8?如果我是这个攻击者,一定会想各种办法拿到你们家路由器的密码,如果运气好进去了,下一步要做的事情就是把路由器的网关设置成我自己的电脑,然后各种截获和注入。
如果没有攻克路由器,也可以利用在一个局域网内的条件,通过共享、网络广播等各种欺骗手段忽悠小白用户上当,方法总是很多的。只要打开一个口子,基本上你的手机/电脑就被控制了,投毒、欺骗、诱骗等,能用上的都会用上。
如何防止被蹭
你手机上没有安装WiFi万能钥匙,也没有将密码告诉旁边的邻居、路人,结果发现自己的网络还是被蹭到了。为啥呢?回想下,原来上个月你家外甥过来了,然后他手机上有这个软件…
防止被蹭的最好的方式就是,密码不告诉任何人,即便是外甥。现在的路由器默认可以设置两个WiFi,并且可以对sub-WiFi进行流量限制。当然,有些WiFi做的比较成熟,可以通过自己的手机监控连接的设备,然后设置白名单和黑名单。不过估计用这种WiFi的人不会很多,一般的WiFi也支持在Web界面上控制上网设备。
还有一种方式是,在路由器中,将无线设置的SSID广播改为「隐藏」,周边设备就没办法找到你家的WiFi网络了。
常规的WiFi热点设置原理
分享一段跑题的内容。
以前使用Windows/Linux系统的时候,尝试过将自己的电脑作为热点把网络分享给其他同学,刚开始使用了叫做软媒魔方【IT之家编辑注:软媒魔方中的WiFi共享功能即可一键共享网络】的软件,后来自己也开始敲代码折腾,事实上,在Windows下一行代码就能产生一个无线热点:
netsh wlan set myWiFi mode=allow ssid=YOUR_WiFi_NAME key=WiFi_PASSWORD
上述命令会在系统的某个位置生成一个文件,其中key是明文保存的,然后通过如下命令就能开启WiFi:
#开启WiFi
net wlan start myWiFi
#关闭WiFi
net wlan stop myWiFi
Linux下稍微费劲些,配合hostpd和dnsmasq,不过也是差不多几行代码的事情。
最后
本文主要是对WiFi万能钥匙这个软件相关功能的一些猜测,具体如何实现,可以去网上观摩下骇客们对软件代码的反编译。