Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bluetooth 利用蓝牙低能量解码wireshark数据包中的权重_Bluetooth_Bluetooth Lowenergy_Reverse Engineering - Fatal编程技术网

Bluetooth 利用蓝牙低能量解码wireshark数据包中的权重

Bluetooth 利用蓝牙低能量解码wireshark数据包中的权重,bluetooth,bluetooth-lowenergy,reverse-engineering,Bluetooth,Bluetooth Lowenergy,Reverse Engineering,我一直在对不同的基于BLE的设备进行逆向工程,我有一个重量秤,我找不到一个模式来查找/解码/解释我可以从android应用程序获得的重量值。我还能够获得该设备的服务和特性,但没有从蓝牙站点找到与UUID匹配的SIG标准 我正在使用一个nRF51加密狗来嗅探android应用程序和体重秤之间的数据包,我可以查看ble流量,但在通信过程中有几个事件我无法真正理解它们之间的关系,我无法将这些值转换为以千克或磅为单位的可读重量 我的目标值是:从体重秤应用程序读取71.3kg 让我给你看看我从嗅探器里得到

我一直在对不同的基于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脚本吗?