BLE的应用范围越来越广,特别是在移动智能设备上。现在低功耗蓝牙(BLE)连接都是建立在 GATT (Generic Attribute Profile) 协议之上。GATT 是一个在蓝牙连接之上的发送和接收很短的数据段的通用规范,这些很短的数据段被称为属性(Attribute)。
GATT负责两个BLE设备间通信的数据交互,是对功能数据最为重要的部分,GATT包括三层:
PROFILE、CHARACTERISTIC、SERVICE
CHARACTERISTIC是每个功能的对象,每个Servie都包含一个或多个CHARACTERISTIC,而PROFILE是他们的大类集合。(如图)
在Ubuntu下执行 ‘hcitool lescan’可扫描附近的BLE设备。
我们来抓包分析下**手环在交互时产生的数据,然后方便进行分析。
我用的设备是USBdongle
,嗅探数据为SmartRF
格式:
但是这种格式,使用起来很不方便,可以使用tibtle2pcap
转换成libpcap
的格式。
当你安装完Bluez
协议栈后会给你自带两个工具,一个是hcitool
,一个是Gattool
。这两个工具本作为调试工具。特别是Gattool
,它可连接蓝牙设备对其进行操作。所以我们可以对其数据进行分析,找出这些控制指令,然后重放这个指令。
经过抓包分析,找到了一处ATT Write Command
控制指令,通过数据得知该 Handle
Vul为:0x0051
还有一处Alert level:Hight Alert(0X02)
根据蓝牙官方GATT CHARACTERISTIC文档描述
这是一种警报级别,也就是说**手环的震动就是根据这个数值分为震动级别。
有个APP是LightBlue
。也可以做到这一点,但不是全部...例如下面的蓝牙灯泡就不可以。
演示Demo
https://v.qq.com/x/page/c0501jtxfkm.html
灯泡分析与**雷同,其实只要读懂了GATT,一半的设备都可以轻易的被‘黑’。
通过扫描确定其MAC地址。
后对其目标进行设备进行数据分析,寻找write字段信息分析
跟踪字段信息并寻找其VULE字段值
抓包分析灯泡数据:
还是去分析它的Write Command,其Handle
(操作句柄)为0x0019
,数据值为08004701470147010000
Wirte Command与Write Request是有区别的,一个是写命令,一个是写请求,就以wirete command为例。
test vulue:
08004701470147010000
08000d07470147010000
08004701b223c64c0000
(PS:一些其他品牌的灯泡变色可能是根据RGB颜色对照表)
这个灯泡做了一些校验吧,若不通过APP直接用手机自带BLE连接会导致密钥不匹配。
使用Gattool可以直接操控灯泡开关,以及变色,若自己写个脚本,则可以让灯泡连续开关变色。。。
放个简单的Demo:
https://v.qq.com/x/page/g0501zyymd9.html
自己在家可以没事试着玩玩,没什么技术含量。