Bluetooth 利用蓝牙低能量解码wireshark数据包中的权重
我一直在对不同的基于BLE的设备进行逆向工程,我有一个重量秤,我找不到一个模式来查找/解码/解释我可以从android应用程序获得的重量值。我还能够获得该设备的服务和特性,但没有从蓝牙站点找到与UUID匹配的SIG标准 我正在使用一个nRF51加密狗来嗅探android应用程序和体重秤之间的数据包,我可以查看ble流量,但在通信过程中有几个事件我无法真正理解它们之间的关系,我无法将这些值转换为以千克或磅为单位的可读重量 我的目标值是:从体重秤应用程序读取71.3kg 让我给你看看我从嗅探器里得到了什么。 首先,我看到Bluetooth 利用蓝牙低能量解码wireshark数据包中的权重,bluetooth,bluetooth-lowenergy,reverse-engineering,Bluetooth,Bluetooth Lowenergy,Reverse Engineering,我一直在对不同的基于BLE的设备进行逆向工程,我有一个重量秤,我找不到一个模式来查找/解码/解释我可以从android应用程序获得的重量值。我还能够获得该设备的服务和特性,但没有从蓝牙站点找到与UUID匹配的SIG标准 我正在使用一个nRF51加密狗来嗅探android应用程序和体重秤之间的数据包,我可以查看ble流量,但在通信过程中有几个事件我无法真正理解它们之间的关系,我无法将这些值转换为以千克或磅为单位的可读重量 我的目标值是:从体重秤应用程序读取71.3kg 让我给你看看我从嗅探器里得到
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/时钟,而不是真正的测量,因此我觉得这不是一个真正的选项
第二个和第三个看起来更像真正的候选者,我将它们拆分并转换为十进制值,但我没有找到关系,甚至没有找到组合字节的关系,因为这些值是浮点数据类型。所以我真正的问题是,我是否遗漏了一些你可能从这些信息中看到的东西?你知道这个数据包和我的目标之间是否有关系吗
谢谢你花时间阅读我的文章,任何帮助都会很好,谢谢
编辑:
我有一个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)
服务“fff0”(0000fff0-0000-1000-8000-00805f9b34fb):
特性“fff1”(0000fff1-0000-1000-8000-00805f9b34fb):
手柄:8(8)
可读性:错误
专业+特性:编写通知
描述符:描述符(句柄0x9;uuid 00002902-0000-1000-8000-00805f9b34fb)
特性“fff2”(0000fff2-0000-1000-8000-00805f9b34fb):
句柄:11(b)
可读性:错误
属性:写入无响应指示
描述符:描述符(句柄0xc;uuid 00002902-0000-1000-8000-00805f9b34fb)
特性“fff3”(0000fff3-0000-1000-8000-00805f9b34fb):
句柄:14(e)
可读性:错误
属性:通知
描述符:描述符(句柄0xf;uuid 00002902-0000-1000-8000-00805f9b34fb)
这是我在wireshark中看到的与通知和指示相关的特征。我认为数据包编号574(其特征仅具有通知属性)比我认为的更重要 我自己解决
这让我想到了取值(2字节)并将它们乘以0.1,这样我就可以得到权重
以字节为单位,我可以查找不带小数的目标值713
,即十六进制=0x02c9
如果我们查看数据包编号574:
000002c9070002
并将其拆分00:00:02:c9:07:00:02
我可以看到第2和第3个字节与此模式匹配
唯一需要做的事情是将这些字节分组,然后乘以十进制值713x0.1=71.3
。我做了不同的测试,发现这个模式是恒定的,所以我觉得我的解决方案是准确的。希望这能对将来的人有所帮助 我自己解决
这让我想到了取值(2字节)并将它们乘以0.1,这样我就可以得到权重
以字节为单位,我可以查找不带小数的目标值713
,即十六进制=0x02c9
如果我们查看数据包编号574:
000002c9070002
并将其拆分00:00:02:c9:07:00:02
我可以看到第2和第3个字节与此模式匹配
唯一需要做的事情是将这些字节分组,然后乘以十进制值
713x0.1=71.3
。我做了不同的测试,发现这个模式是恒定的,所以我觉得我的解决方案是准确的。希望这能对将来的人有所帮助 不幸的是,我没有关于硬件的文档,所以我真正的工具是嗅探器和用于获取服务、特性、句柄等的python脚本。您能分享python脚本吗?不幸的是,我没有关于硬件的文档,因此,我真正的工具是嗅探器和python脚本,我使用它们来获取服务、特征、句柄等。您可以共享python脚本吗?