TI 的 smartconfig 中的数据包分析

来源:互联网 发布:windows不激活能用吗 编辑:程序博客网 时间:2024/05/29 13:52

要实现的功能:

手机已经联上某个WIFI网络,通过手机APP发送SSID和密钥。另外一个Wifi模块可以监听到数据,但无法解密数据。微信的air kiss使用了类似的原理。

处理原理:

wifi模块虽然无法解密监听到的数据包,但模块仍可以看到每个数据包的源、目标mac地址,可以看到数据包里数据域的长度。加密会以一种一致的方式影响发送的数据包的大小。例如:APP发送n字节数据,发送至路由器时,加密的包会有(n+x)字节。x在这些包里是一个固定数字。数据包的size就可以存放我们真实信息,而数据包的内容则是无关紧要的。手机在加密网络里以固定长度发送UDP包给局域网内的另一个设备。另一个设备并不在意收到的数据包,数据包并不重要。wifi模块会监听经过的每个数据包。而数据包会有一些基本类型信息,让模块可以排除一些无效数据。例如:数据包不是802.11  Qos data数据的将被排除。由于wifi模块并不知道需要在哪个信道上监听,也不知道源、目标地址对,这样在发送编码后的ssid时,允许发送一些重复的字符污染数据。将ssid和密码每个字符都编码为数据包的长度,然后按顺序发送。

SNAP格式

这里写图片描述

DA:目标mac地址 
SA:源mac地址 
长度区域从这里开始: 
这里写图片描述

细节

例如现在要发送SSID 值是1399,密码值是1459,另外两个值有标准的分隔符:3、23. 
使用两个常数,L:值28,C值:593,下面将会看到用法。 
将下来按顺序生成序列:

  • SSID:1399
  • L+SSID字节长度
  • 两个分隔符 3和 23
  • 然后我们循环发送SSID的每个字节,每个字节生成一组4个值: 
    两个值:接下来会描述,字节的每一块 
    接下来是3 和 23分隔符。

密码同样的规则进行处理,但密码里不能出现1459.

注意TI的安卓库和java库是以上面描述的形式产生的。奇怪的是TI的iOS库产生规则不同。这并不影响CC3000解码数据。这个不同会在接下来的示例文件里看到。

我们一旦可以看到所有这些UDP数据包,数据库的每个值会发从Smart Config程序发出来。例如:通常它会是网关。

手机端会不停发送数据。CC3000使模块工作、过滤不需要的数据,然后配置联网。然后它在自己的网内发送广播数据告诉手机停止发包。

注意:网络最大传输单元(MTU)要支持所传输包的大小。当前Smart Config的客户端需要MTU至少1500(这在每个正常网络里都是合理的值)。TI Smart Config实践重复发送合理的SSID和密码,TI的JAVA库每次完成发送会暂停100ms,在android和ios上都一样。

编码SSID或密码

如果SSID由字母0至n-1组成,我们要生成2n个对应的数据。 
注意:通过IEEE的802.11i-2004,Annex H.4.1,用户可能会键入一个使用64位16进制编码的字符串,或是对应的ascii字符。推测WEP和WPA有类似的约束。SSID必须是1至32字节,不能有控制字符集(参考http://stackoverflow.com/a/5017144/245602),而且SSID在手机上显示是从左到右的(许多路由只接收可见或可打印字符)。 
所以假定ASCII码字符是8位,每个值有高低位。例如:M的ASCII码是0x4D,高位是0x4,低位是0xD。 
如果我们控制一个数据序列,从0开始,每次增加,这样SSID的每个字符由高Hi和低位Li,各自生成两个序列值:2i和(2i+1)。

Seq.HighLow2iLi-1>^(2i%16)Hi2i+1Hi^((2i+1)%16)Li

注意值的高位i是在低位i后,^是XOR运算。

下面展示了SSID的MyPlace是怎么被拆分为高位和低位的:

这里写图片描述

每4bit数据生成一个数据,低4位是数据本身,高4位是当前数据序号(已经和之前的数据XOR运算过)。然后给每个生成的值加上变量C(如:593),它将会变成当前包的长度。

注意4bit的限制意味着我们只能使用当前数据序列的低4位。如果序列数字是S,然后我们会用S % 16,结果是为SSID的MyPlace7个字母生成14个值,如: 
这里写图片描述

密码采用同样的方法处理,数据序列会重新从0开始对密码编码。 
当前Smart Config最多支持密码长度是32个字符。比WPA2的标准稍短点。

选择UDP包的目标地址

现在一般是使用UDP包发送SSID信息,向默认网关地址发送。然而目标地址并不重要,只要目标地址是真实存在的,而且它有能力收到包。然而怎么定义目标地址是有意义的。 
CC3000不支持hoc网络,在没有AP(Access Point)权限的网络也不能使用。在大多数正常设置的AP网络里都是有默认网关的。然而默认网关不是强制的的,一个wifi网络也可能根本没有默认网关地址。 
不知道为什么TI没有选择AP地址代替默认网关地址。它们也可能是完全一样的,但用户可能容易搞混。 
注意:在一个AP网络里,数据都要通过AP。即使选择了机器地址,AP依然会向目标地址转发数据。这不影响使用CC3000,但这并不意味着数据流量是无意义的。

可从appStore下载 CC3000 Smart Config app 测试其app。 
或下载安卓版本:SmartConfigCCX.apk

TI sdk网址: 
http://www.ti.com/tool/SmartConfig

参考网址: 
http://processors.wiki.ti.com/index.php/CC3000_Release_Notes#Version_1.10: 
http://blog.csdn.net/johns_xiao/article/details/38337159 
http://www.tuicool.com/articles/E3a2myi 
http://bergcloud.com/devcenter/tutorials/cc3000-smart-config

0 0