【问题标题】:Decode weight in data packets from wireshark with bluetooth low energy使用蓝牙低能量解码来自wireshark的数据包中的权重
【发布时间】: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


【解决方案1】:

我自己解决。

post 让我想到了取值(2 个字节)并将它们乘以 0.1,这样我就可以得到权重。

以字节为单位,我可以查找不带小数的目标值713,即十六进制 = 0x02c9

如果我们查看数据包编号 574000002c9070002 并拆分 00:00:02:c9:07:00:02

我可以看到第二个和第三个字节与这个模式匹配!

唯一需要做的就是将这些字节分组并乘以十进制值713 x 0.1 = 71.3。我做了不同的测试,发现这种模式是恒定的,所以我觉得我的解决方案是准确的。希望这可以帮助将来的人。

【讨论】:

    猜你喜欢
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    • 2020-05-12
    • 2016-01-31
    相关资源
    最近更新 更多