本文不会从代码角度分析 WiFi 万能钥匙这个软件是如何「破解」密码的,主要从使用这个软件后的感受出发,分析它可能会用到的手段以及可能存在的风险。

以前因为好奇,安装了 WiFi 万能钥匙,但是从来没有打开过,当时我心里很清楚,蹭网的前提就是自己家被蹭。晚上刷微博看到一张图片,iphone 设备的 WiFi 列表中竟然出现了「🔑一键免费连接🔑」相关的提示,我用自己的手机测试了下,果真如此:

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 热点设置原理

分享一段跑题的内容。

以前使用 Window/Linux 系统的时候,尝试过将自己的电脑作为热点把网络分享给其他同学,刚开始使用了叫做 猎豹WiFi 的软件,后来自己也开始敲代码折腾,事实上,在 window 下一行代码就能产生一个无线热点:

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 万能钥匙这个软件相关功能的一些猜测,具体如何实现,可以去网上观摩下骇客们对软件代码的反编译。