encryption - 逆向工程特定的蓝牙通信协议(protocol)

标签 encryption bluetooth reverse-engineering wireshark sniffing

我已经在 stackoverflow 上阅读了一段时间的答案,这是我第一次真正被要求问一个问题:

我有一个小型传感设备(字面意思是黑匣子),用于体育事件并跟踪加速度和 GPS 数据(根据供应商的专利,不一定具有相同的频率)。 session 结束后,可以将设备连接到智能手机并导入 session 数据以查看统计信息。 现在我正在尝试获取原始数据以将一些自己的统计数据应用于它。

我知道该设备通过蓝牙连接到我的手机。所以我按照本教程激活了蓝牙 HCI 监听日志:

http://www.fte.com/WebHelp/BPA600/Content/Documentation/WhitePapers/BPA600/Encryption/GettingAndroidLinkKey/RetrievingHCIlog.htm

然后我可以通过在 PC 上将文件重命名为 .cap 文件来传输文件,并将它们加载到 wireshark 中。这就是它变得棘手的地方: 我发现,第一个连接是通过低功耗蓝牙建立的。当建立连接并且用户选择通过应用程序从设备下载 session 时,连接切换到正常的蓝牙连接。 我知道该设备包含一个 GPS 和一个包含陀螺仪的 9 轴加速度计。

显然,传输数据的蓝牙协议(protocol)是 SPP 协议(protocol) ( https://en.wikipedia.org/wiki/List_of_Bluetooth_profiles#Serial_Port_Profile_.28SPP.29 ),用于模拟 RS-232 连接。

我附上了 wireshark 的屏幕截图,显示了重新组装的数据包。我不知道它包含什么,Wireshark 的渲染对我来说没有任何意义。框架内容显示在最底部的选项卡中。左边是原始 HEX 传输,右边是渲染后的版本。它既不像任何 GPS 语句 ( http://www.gpsinformation.org/dale/nmea.htm ),也不像任何加速度计数据:

Screenshot of the Wireshark UI

一般设置是无加密连接,但在某个阶段主机和 Controller 尝试切换到加密,但这永远不会传输到外围从属(据我所知)。我想知道如何理解这些数据,是否有办法让我查明加密是否已激活,如果已激活,是否已记录,我是否可以从此日志中检索 key ?

谁能帮我弄清楚这里的数据,或者告诉我在哪里可以找到一些关于它是否加密的提示?

编辑: 我添加了第一个 SPP 传输数据包的屏幕截图。 Screenshot of the first transmission packet有问题的数据包和有效负载被标记为黑色。它似乎包含一些关于设备和其他配置设置的信息,或者一开始就包含传感器的初始值。我怀疑该应用程序和设备采用了专有加扰或加密,因为开头有可读值,但在图像中标记的黑框之后没有。我的怀疑是,根本没有使用蓝牙加密,因此我根本没有机会解密信息?有人可以证实或否认这种怀疑吗?

最佳答案

where I can find some hints about whether it is encrypted or not?

您在 Wireshark 中看到的是主机和 Controller 之间的 HCI 接口(interface)(命令和事件)。由于加密是在 Controller 中完成的(请参阅蓝牙核心规范第 1 部分 A 部分第 5.4.3 节),您看到的是未加密数据。

Can anyone help me to figure out the data here

从您的单个屏幕截图很难理解。我建议你看看RFCOMM specification ,特别是图 6.1:

RFCOMM frame structure.

信息字段中,您应该可以找到您的数据。

关于encryption - 逆向工程特定的蓝牙通信协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47118816/

相关文章:

JavaScript 安全 : force deletion of sensitive data

java - CTR 模式下的 AES 解密 (Java)

java - BluetoothSocket isConnected() 函数在运行时导致 java.lang.NoSuchMethodError

android - IOException : read failed, 套接字可能已关闭 - Android 4.3 上的蓝牙

python - 逆位运算符

android - 保护我的应用程序安全免受反汇编程序的侵害

mysql - 保护数据库内容

asp.net - 将预加密的配置文件部署到生产环境

android - 创建蓝牙应用程序最快的移动平台是什么?

c - 汇编中的 lea 运算符使用寄存器的三参数算术