【发布时间】:2020-09-20 09:28:51
【问题描述】:
我一直在对不同的基于 BLE 的设备进行一些逆向工程,我有一个体重秤,我找不到查找/解码/解释重量 我可以从 android 应用程序获得的值。我还能够获得此设备的服务和特性,但没有找到与蓝牙站点的 UUID 匹配的 SIG 标准。
我正在使用 nRF51 加密狗来嗅探 android 应用程序和体重秤之间的数据包,我可以查看 ble 流量,但在通信期间有几个事件我不能真的明白这是什么关系,我无法将这些值转换为以公斤或磅为单位的可读重量。
我的目标值是:71.3kg 从体重秤应用中读取。
让我告诉你我从 ble 嗅探器中得到了什么。
首先我看到master 正在向一个服务的每个特征中的句柄0x0009(notify), 0x000c(indication) 和0x000f(notify) 发送通知/指示请求。
然后我开始读取与写入命令混合的通知/指示值。在通信结束时,我看到一些数据包,我觉得它们是带有体重秤数据和 BMI 的数据包。 图像中的数据包编号为 574、672 和 674。
所以给我们以下候选人:
1st. packet_number_574 = '000002c9070002
2nd. packet_number_672 = '420001000000005ed12059007f02c9011d01f101'
3rd. packet_number_674 = '42018c016b00070237057d001a01bc001d007c'
由于数据行为,通信交换期间的第一个数据包看起来更像是计数器/RT/时钟,而不是真正的测量值,所以我觉得这不是一个真正的选择。
第 2 和第 3 看起来更像真正的候选者,我已将它们拆分并将它们转换为十进制值,但我没有找到关系,甚至组合字节,因为这些值是浮点数据类型。所以我真正的问题是,我是否遗漏了您可能会在此信息中看到的某些内容?你知道这个数据包和我的目标之间是否有关系吗?
感谢您抽出宝贵时间阅读我的文章,任何帮助都可以,谢谢!
编辑:
我有一个 python 脚本,允许我检查服务及其特征层次结构以及一些有用的数据,如属性、句柄和描述符。
Service 'fff0' (0000fff0-0000-1000-8000-00805f9b34fb):
Characteristic 'fff1' (0000fff1-0000-1000-8000-00805f9b34fb):
Handle: 8 (8)
Readable: False
Pro+perties: WRITE NOTIFY
Descriptor: Descriptor <Client Characteristic Configuration> (handle 0x9; uuid 00002902-0000-1000-8000-00805f9b34fb)
Characteristic 'fff2' (0000fff2-0000-1000-8000-00805f9b34fb):
Handle: 11 (b)
Readable: False
Properties: WRITE NO RESPONSE INDICATE
Descriptor: Descriptor <Client Characteristic Configuration> (handle 0xc; uuid 00002902-0000-1000-8000-00805f9b34fb)
Characteristic 'fff3' (0000fff3-0000-1000-8000-00805f9b34fb):
Handle: 14 (e)
Readable: False
Properties: NOTIFY
Descriptor: Descriptor <Client Characteristic Configuration> (handle 0xf; uuid 00002902-0000-1000-8000-00805f9b34fb)
这是我在wireshark中看到的与通知和指示相关的特征。我认为数据包编号 574 (其特征只有一个通知属性)比我想的更重要。
【问题讨论】:
-
不幸的是我没有关于硬件的文档,所以我真正的工具是嗅探器和我用来获取服务、特征、句柄等的 python 脚本。
-
可以分享一下python脚本吗?
标签: bluetooth bluetooth-lowenergy reverse-engineering