迅维网

查看: 1584|回复: 9
打印 上一主题 下一主题
[维修经验]

WiFi万能钥匙的原理是什么?

[复制链接]
跳转到指定楼层
1#
发表于 2018-5-13 10:32:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式 来自: LAN 来自 LAN

马上注册,获取阅读精华内容及下载权限

您需要 登录 才可以下载或查看,没有帐号?注册

x
WiFi万能钥匙的原理是什么?

2#
发表于 2018-5-13 10:32:38 | 只看该作者 来自: LAN 来自 LAN
搬运自:WIFI万能钥匙是怎么收集数据的? - 狂男风的回答
WiFi万能钥匙的基础功能并不是采用某些答案所述“密码库穷举(逐个尝试)暴力破解”的方式获得正确密码(那些不看题目就刷共享精灵的真的不是来搞笑的么),而是通过用户上传分享的热点(主动或“被动”)到后台服务器的方式收集、积累数据。后台服务器维护者一份热点数据库,其中包含着热点名称(或者用来唯一标识的MAC地址)以及与其对应的密码字符串。查询密码时,用户将周围扫描到的陌生热点信息上传,服务器后台查询到相对应的密码(如果分享过的话)后返回给APP供用户选择使用。不过WiFi共享钥匙有一个“深度解锁”的功能与“暴力破解”沾点边,但它也仅仅是使用几个常见的较为简单的密码来尝试连接热点,不能称得上算“密码库穷举”。
现在WiFi万能钥匙充实密码库的方式主要是用户主动分享,毕竟用户基数变大了,但在以前可不是这样。早期的WiFi万能钥匙得到热点密码数据的手段并不高明,甚至可以说是不光彩的。
我们知道Android系统中有个文件是用来存储WiFi密码的,那就是/data/misc/wifi/wpa_supplicant.conf
它的内容应该是这个样子:

此文件只有当获得root权限后才能访问。
图上显示有两个WiFi热点“network”,ssid是热点名称,psk是密码。上面那个是我的私人热点,另一个“Bjume”则是某商家提供的免费热点。请注意,其中的密码是明文显示的“bjume2013”。
得到了这个文件,或者能看到这个文件的内容,就意味着能得到这台手机登录过的所有WiFi热点,以及它们的明文密码!
早期版本的WiFi万能钥匙会向用户申请root权限:

虽然我不是专职的Android开发者,但我毕竟也开发过一些自用的小工具,对系统提供的接口和权限还是略知一二的。WiFi万能钥匙的所有业务功能,包括扫描周边的WiFi信号、通过网络查询对应WiFi信号的密码、输入密码登录WiFi、通过网络将用户在应用中输入的密码上传到服务器,这些都可以使用基本的系统API实现,不知道它为甚麽要申请root权限。难道是为了访问wpa_supplicant.conf文件?单从这一点上作恶意揣测似乎不太妥当,毕竟在android上很多别的行为也需要root(虽然我实在不知道WiFi万能钥匙哪个功能有这个需求),那么接下来的证据就无法回避了。
我对com.snda.wifilocating.apk文件进行了反编译,在得到的很多smali脚本中,有这么一个很有意思:
1051行,WiFi万能钥匙不仅访问了wpa_supplicant.conf这个文件,还把其中的内容复制了出来,放到了自己的缓存文件夹里。
我实在想不通WiFi万能钥匙的哪个功能需要使用用户登录过的所有热点密码(注意1.0这个版本还没有热点备份功能),因此唯一合理的推测便产生了!当然这种推测仍然没有十足的依据,但事实不是已经很清楚了么?没有依据的指控叫做诽谤,为了以免有“诽谤”的嫌疑,避免产生无谓的纠纷,结论我就不点破了。
望团队好自为之。

回复 支持 反对

使用道具 举报

3#
发表于 2018-5-13 10:32:38 | 只看该作者 来自: LAN 来自 LAN
很多安装这个软件的人有意或无意将自己使用的wifi密码分享给了软件厂商,厂商的服务器存储收集了大量的wifi热点信息和密码信息,当你破解一个wifi时,软件会从服务器上查询这个wifi信号的相关信息,如果有密码信息,就表示可以破解,这也就是为什么破解前,一定要保证你先联网的原因。

回复 支持 反对

使用道具 举报

4#
发表于 2018-5-13 10:32:38 | 只看该作者 来自: LAN 来自 LAN
很简单啊,你用过之后就把你家wifi密码上传到服务器了,别人在用这个软件就可以从服务器获取帐号密码自动链接wifi了,极其讨厌腾讯手机管家等qqwifi这种强制分享用户wifi的行为。

回复 支持 反对

使用道具 举报

5#
发表于 2018-5-13 10:32:38 | 只看该作者 来自: LAN 来自 LAN
被这个问题困扰很久,最近搜到一个比较透彻的文章
以下搬运wooyun路人甲的回答wifi万能钥匙蹭网原理详细剖析
本次测试版本号为3.2.3,首先通过可疑shell语句定位到疑问的问题代码:类名com.snda.wifilocating.f.ba





这段代码的作用是在有了root权限的情况下 将系统的wifi.conf拷贝出来到应用自己的目录,并赋予其全局可读写权限(其实这是个漏洞了...)。
对其做cross-ref查找引用之后可以发现,该函数主要在两个地方被直接调用。一个是com.snda.wifilocating.e.av:





这是一个api接口,主要功能是用于用户注册了之后备份自己的ap密码,同时在

WpaConfUploadActivity直接调用、GetBackupActivity中间接调用。第一个Activity在分析的版本中已经被从AndroidManifest中删除,而第二个Activity则是用户备份私有wifi时的对应的界面。这证实了备份的时候密码确实会被上传,而且从下文来看这个密码是完全可逆的。
不过在使用过程中,该应用并没有其他可疑的root行为操作。笔者打开了SuperSu的root执行监控,短暂的使用过程中也只发现了执行了上述的这一条命令。





0x01 Android系统Wifi连接API概述
Android系统通过WifiManager类来提供对Wifi的扫描、连接接口。应用在请求相应权限之后可以扫描、连接、断开无线等。在连接无线功能中,客户端基本上只要指定SSID,Pre-shared-key(即密码),就可以用代码的方式连接无线。连接一个WPA(2)无线典型代码如下,
0x02 wifi万能钥匙是怎么连接上无线的,密码从哪里来?
这也是争议较大的地方,首先该应用肯定是有云端存储了很多密码,因为应用会引导用户备份自己的密码,但这些密码有没有被滥用我们在客户端就不得而知了。在2月底的这次测试中,笔者先私有备份了自己建立的测试无线(注意不是分享),然后使用另外一个手机安装该客户端测试,该客户端的API请求接口并没有返回这个测试的无线的密码。不过这也可能只是个例说明不了什么,还是建议各位自行测试,但注意测试前清除保存的无线并给测试无线设定一个弱密码以免真的泄露了自己的密码。
无线密码获取分析
回到正题,笔者通过代理拦截到了该应用获取wifi密码的请求。应用发送目标的ssid,mac信息向云端做查询,获取到的密码到本地之后并不是明文的,而是一个AES加密。首先为了证明其在本地最终还是会以明文出现,先取了个巧,没有去逆这个算法(虽然逆下也不会很困难),而是直接hook了系统添加无线的代码(回忆上文里密码就在NetworkConfiguration.preSharedKey里)。
部分HOOK代码:
这是一个万能钥匙上传wifi ssid以及mac以请求密码的截图:





响应截图:





密码以AES可逆加密的形式通过pwd这个json key传递了回来。
同时,在其尝试通过这个密码连接目标无线的时候,本地hook模块也获取到了真实的明文密码:





个人备份分析
而个人备份模块,也就是直接会读取wifi.conf的模块,是通过findprivateap和saveprivateap这两个json api method进行,具体的http请求逻辑在com.snda.wifilocating.e.av中可以找到,这个类也基本上囊括了所有万能钥匙的api请求逻辑。
备份时的请求:把整个wifi.conf全部上传了上去。



而恢复备份时,只是将密码从云端拖了下来。
其他连接方式分析
除此之外,Wifi万能钥匙还自带了2000条的数据库记录在ap8.db中,记录了常见的弱密码。

例如



这些密码用在所谓的“深度连接”功能中,其实按代码逻辑来看就是一个wifi密码爆破,每次在字典中尝试10个密码。看下logcat就很明显。


Wifi密码加解密分析
当然真正去逆向加密代码也不是很困难,简单的搜寻即可得到解密代码:(部分直接从反编译的代码中抠出,风格未做修饰)




将API请求中获取的16进制pwd字段代入解密程序,得到的结果是如下格式:[length][password][timestamp]的格式,如下图所示,中间就是目标无线明文密码。





此外接口请求中有一个sign字段是加签,事实上是把请求参数合并在一起与预置的key做了个md5,细节就不赘述了。这两个清楚了之后其实完全可以利用这个接口实现一个自己的Wifi钥匙了。
0x03 总结
WiFi万能钥匙会把root之后手机保存的无线密码发向云端,当有足够的用户使用该应用时,云端就拥有了一个庞大的WiFi数据库,查询WiFi的密码时,应用会发送目标的ssid,mac信息向云端做查询,获取到的密码到本地之后并不是明文的,而是一个AES加密,本地解密后连接目标WiFi。同时内置了常见的2000条WiFi弱口令,在云端没有该WiFi密码的时候,可以尝试爆破目标的密码。

回复 支持 反对

使用道具 举报

6#
发表于 2018-5-13 10:32:38 | 只看该作者 来自: LAN 来自 LAN
你的手机如果连接过任何wifi的话,你下万能钥匙的软件时给的权限会让这个软件获取到这些wifi的密码和地址。它传送数据到他们的服务器。
  如果别人下这个软件就可以获取到你连接过的wifi的密码和地址。这也是为什么破解需要联网。联网在他们的服务器上寻找密码。
  所以现在这家公司会告诉你他们是共享wifi。你也能取消共享wifi。需要提供你的路由器信息。但默认应该是会共享的。而且如果你去过你亲戚家连过wifi,你亲戚家的wifi密码也会被获取。你连过的wifi都会被获取。而你取消分享,只是取消分享你家的wifi。
  不想分享wifi的话,最好是白名单形式允许设备连接。这样会比较麻烦。但路由器现在都会有对应app。应该会方便很多。
  以上信息纯属我自己根据网络上的一些信息猜测而来,可能会有错误,欢迎指出。

回复 支持 反对

使用道具 举报

7#
发表于 2018-5-13 10:32:38 | 只看该作者 来自: LAN 来自 LAN
装WIFI的人和我说如果用万能钥匙连接自家WIFI的话密码会被共享在万能钥匙的平台上

回复 支持 反对

使用道具 举报

8#
发表于 2018-5-13 10:32:38 | 只看该作者 来自: LAN 来自 LAN
操作系统 应该会把网络操作功能锁住,并且提供root权限才能使用操作系统的API,不知道是不是这样的

回复 支持 反对

使用道具 举报

9#
发表于 2018-5-13 10:32:38 | 只看该作者 来自: LAN 来自 LAN
Wi-Fi的安全策略有三种:WEP安全策略、WPA安全策略和WPA2的安全策略。
WEP的安全策略安全性最低,主要采用共享秘钥认证方式+Rc4的加密算法。但是即使这样,理论上也需要一天的时间破解,更别说安全性更高的WPA安全策略和WPA2安全策略。所以市场上的这些Wi-Fi万能钥匙其实就是一个WLAN的共享机制而已。

回复 支持 反对

使用道具 举报

10#
发表于 2018-5-13 10:32:38 | 只看该作者 来自: LAN 来自 LAN
个人认同上述部分观点,我曾设想过这款软件的原理,知乎上也有类似的文章。所谓的破解只对于简单的密码而言,其原理像是利用安卓系统的某些必然存在的漏洞来运行的。当用户设置此软件为默认WiFi连接软件时,该软件就会得到并利用安卓系统上软件的能力:完全的访问网络权利,这个权限只有在设置里面应用程序详情面板才能看到,很多使用者会不以为然,甚至安装时认为连接WiFi就必然需要这个权限,但这个权限的真正目的就是在成为默认WiFi连接软件或者正在通过该软件连接时,在联网后,后台发送关于使用者的WiFi连接详情(包括密码),从而逐渐完善服务器的数据库,导致你的密码被共享,其他人利用该软件与服务器连接,查找并获取自己已连接的WiFi密码。目前该软件,没有有效办法去防止,除非你不用该软件,或不对外泄露密码。但人心都是自私的,无线隐私安全问题也挡不住。都想自己免费用别人的,不想别人用自己的。最后声明,以上只是猜想,理论上成立,如果有大神精通编程破解,可以从技术上验证。
  这个原理目前适用于市场上的大部分WiFi软件,

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长提醒 上一条 /1 下一条

快速回复 返回顶部 返回列表
附近
店铺
微信扫码查看附近店铺
维修
报价
扫码查看手机版报价
信号元
件查询
点位图


芯片搜索

快速回复