很久以前做了一个项目:需求是仿照"WiFi万能钥匙"做一个能一键上网,这个功能提出的时候就被推翻了原因大家都知道:苹果是不允许访问到Wi-Fi列表的,我们想在App的内部拿到Wi-Fi的列表然后点击某个Wi-Fi进行验证上网(借助于私有的API但不能上线)那是不可能的,那Wi-Fi万能钥匙是怎么做到的呢?下面做一下猜测:
WiFi万能钥匙设计思路(iOS)
苹果不提供获取附近的Wi-Fi列表(Wi-Fi命和SSID简单的信息提高)还有就是获取安装该软件用户连接过的WiFi的密码,这是WiFi万能钥匙需要攻克的第一个难题,解决的办法那就是有一个通过蜘蛛网的方式收集用户连接过的Wi-Fi信息,拿到这些信息就可以进行数据的匹配处理毕竟Wi-Fi这些信息一旦在安装的时候设定好在一段时间内用户修改的很少。
获取附近的Wi-Fi信息
1.定位查询和收集
打开软件的时候,你应该看到了它会向你申请「获取位置信息」的请求,确定定位后就会把位置信息发送给万能钥匙的云端进行查找Wi-Fi信息和密码的匹配。
那问题来了一开始的时候万能钥匙怎么会有你当前位置的Wi-Fi信息和密码呢?这个问题我们谈到首先Android版的万能钥匙了。万能钥匙的Android版本比iOS版本出来的时间应该早一年多左右,据万能钥匙说是苹果的限制需要做技术的攻克,据我个人猜测他们的技术人员应该从开始就知道用建立庞大的数据库进行匹配的思想了只是缺少数据,那问题就是收集了。
对于Android版本的发布对于极度想上网的网民绝对如同甘露,一时间会风靡这样用户量就会指数上升了,而Android系统的手机无线账号数据是储存在一个文件里的,那就是 /data/misc/wifi/wpa_supplicant.conf ,这个是系统文件,权限不够高是无法访问的,而这个文件极其重要,得到了这个文件,或者能看到这个文件的内容,就意味着能得到这台手机登录过的所有 Wi-Fi 热点,以及它们的明文密码!Wi-Fi 万能钥匙就是需要这个文件里的内容。所以如果用户root了自己的手机,软件可以随意获取。这样从一个用户身上可以挖到至少一个WiFi id和WiFi密码。
截图扫描,暴力破解,撞库分析
那对于没有打开定位服务或者定位不准查不到的咋办?Wi-Fi万能钥匙也提供了一种机制那就是上传Wi-Fi列表的截图这样通过扫描能更加提高匹配的准确度,撞库分析拿到数据,自然少不了对数据进行统计和分析,拿到一些常用的弱口令,如八个8、四个123、八个0等,了解路由设置和WiFi设置的人本来就不多,很多上门服务的师傅一般就将密码设置成简单好记的,这也很大程度提高了撞库的成功率。对于拿不到密码的WiFi,软件毫无疑问会作出这种尝试,成本低、成功率还高。还有一种情况就是云端查询不到怎么办很简单暴力破解.
我的一键上网
通过对Wi-Fi万能钥匙的分析(应该是正确的哈)和参考阿里一个叫做“喵街”的APP我的一键上网功能大概如下:
首先我是做外包的客户是不能建一个像Wi-Fi万能钥匙那样一个强大的后台的(一些算法我们的后台也是没能力和时间去设计研究的)所以我们简化这些步骤。
介绍一下我的项目需求:
客户想达到在他们在和他们合作的商场投放一种自定义协议的Wi-Fi发射器,但只有注册这款APP的用户通过验证登陆才可以使用。
在商场肯定要考虑到各个地方,一种我们需要选择定位服务,另一种把商城的ID发给后台进行查询,为了简单我们选择了第二种当用户选择某个商场的时候(商场是分楼层的为了提高信号需要分别投放Wi-Fi发射器)在列表的时候我们也会呈现这个商场的多个合作的商家这样我们把商场的ID和商家的ID发给后台就可以查询到Wi-Fi的名称当用户点击一键上网的时候就可以让他手动的切换到设置页面链接上这个Wi-Fi
链接上只是一个Wi-Fi热点上网还是需要验证的下面我分享我门验证的几个步骤:
1.获取当前路由器的网关
2.拿到这个网关我们和这个路由器的网关进行异步请求
3.2中我们会得到一个key然后我们通过这个key进行MD5加密验证成功就可以上网了(是不是很简单)