最近接入一个智能网关的 sdk,组网流程是这样的:
长按网关 reset 键进入初始化状态,手机连接任意一个 wifi,没外网也行,手动输入 wifi 密码,然后调用 sdk 的组网方法,网关竟然就自动接入 wifi 了??好像挺多智能设备都是这么一个操作,确实挺方便的。但按一般思维,我能想到的场景是先连接网关的热点,手机输入 wifi 信息,然后调用 sdk ( sdk 通过热点跟网关 tcp 通信之类),网关再关闭热点,连上输入的 wifi ?我开始认为可能是网关改写了 wifi 密码验证模块,网关创建一个隐藏 ssid,手机尝试连接该 ssid,将 wifi 数据放在密码里传过去。
然而 AndroidManifest.xml 里的权限只有这几项:INTERNET,ACCESS_WIFI_STATE,ACCESS_NETWORK_STATE,CHANGE_WIFI_MULTICAST_STATE,也就是说不可能有加入 wifi 的操作。看了一下 sdk 好像确实只发送了 wifi 多播数据,难不成 wifi 多播不需要连 wifi 也能接收数据?我写 demo 试了并不能啊。
那么问题来了,手机到底是怎么把 wifi 数据发送给网关的?智能网关和设备之间用 ZigBee 协议通信还能理解,不用蓝牙,不用 nfc,不用扫二维码,不用 wifi,甚至不用额外权限,手机还能发送数据?!一脸懵逼.jpg
1
paradislover 2018-10-30 21:36:54 +08:00 via Android
手机发送的多播数据含有你输入的 ssid 和 password 的编码,网关初始工作在 monitor 模式,在各个信道抓取特定的多播包,当成功抓取并解码 ssid 和 password 后,网关就可以连接 AP 了。
|
2
bukip 2018-10-30 21:45:58 +08:00
@paradislover 不对吧,这样应该是不能知道密码的
|
3
weyou 2018-10-30 21:50:05 +08:00 via Android
@paradislover 多播的数据也是加密的,其实重点不是这里。我猜它是将 wifi 信息隐藏在数据之前的 wifi header 信息里,然后智能网关只要侦听到这个包,把 header 里隐藏的数据按约定的算法解出来就好了
|
4
billlee 2018-10-30 21:52:17 +08:00
伪造了输入 wifi 密码的视图?
|
5
paradislover 2018-10-30 21:55:17 +08:00 via Android
@weyou 太多手段了,多播地址可以变化,多播数据的长度也可以变化,这些都是信息载体,看你怎么利用
|
6
paradislover 2018-10-30 21:57:19 +08:00 via Android
@bukip 以前做原厂 sdk 就是这么设计的
|
7
yggd 2018-10-30 21:57:38 +08:00 1
UDP 广播包里的长度字段是明文的,搜一下 “ Smart config 配网”
|
8
orannge OP @paradislover 是吗,我原来以为 wifi 通道内的数据都是加密的。。
|
9
orannge OP 日志里多播地址确实是*.1.1.1 *.2.2.2 这样循环发送的
|
10
paradislover 2018-10-30 22:07:01 +08:00 via Android 1
@orannge 都加密了,我怎么知道你包是发给那个 mac 地址的
|
11
weyou 2018-10-30 22:07:22 +08:00 via Android 1
@orannge 多播地址和长度其实都是在 802.11 的 header 里的,数据部分还是加密的
|
12
kltt22 2018-10-30 22:07:43 +08:00 via Android
特意看了眼发帖时间,我以为我穿越了
|
13
orannge OP |
14
chinawrj 2018-10-30 22:11:59 +08:00
wifi 加密并不加密目标 MAC 地址,而组播地址是一一映射到 MAC 地址的,因此其他人能看到你的 IPV4 的组播地址,就算是加密
|
15
magicblr 2018-10-30 22:13:12 +08:00
SmartConfig 也就是一键配置,速度比 AP 模式快,为什么呢?请看下面分解。
所谓的 SmartConfig 就是: 手机 APP 端发送包含 WIFI 用户名 WIFI 密码的 UDP 广播包或者组播包; 智能终端的 WIFI 芯片可以接收到该 UDP 包,只要知道 UDP 的组织形式,就可以通过接收到的 UDP 包解密 出 WIFI 用户名、密码; 然后智能硬件配置到指定的 WIFI AP 上。 |
16
orannge OP 照这么说手机直接建立热点也是可以的吧
|
17
orannge OP 好吧,原来配网方式这么多,一键配置就有 SmartConfig SmartLink Airkiss
|