Bluetooth 反向工程蓝牙LE-设备发回奇怪的响应

Bluetooth 反向工程蓝牙LE-设备发回奇怪的响应,bluetooth,bluetooth-lowenergy,wireshark,Bluetooth,Bluetooth Lowenergy,Wireshark,我最近买了一辆Segway Ninebot ES2电动踏板车。我可以通过蓝牙LE连接到滑板车,并获取诸如电池状态、当前里程数、温度等信息。这一切都是通过一个网络来完成的 在我的Android设备上,我成功地提取了HCI日志文件,并将其导入Wireshark。我可以看到我的手机和滑板车之间来回发送的所有请求和命令。然而,请求和响应都是垃圾,我不知道如何解释它们 已发送命令的示例(信息显示已发送写入命令,句柄:0x000e(北欧UART服务:北欧UART Tx)) 我在之后立即获得的接收值示例(信

我最近买了一辆Segway Ninebot ES2电动踏板车。我可以通过蓝牙LE连接到滑板车,并获取诸如电池状态、当前里程数、温度等信息。这一切都是通过一个网络来完成的

在我的Android设备上,我成功地提取了HCI日志文件,并将其导入Wireshark。我可以看到我的手机和滑板车之间来回发送的所有请求和命令。然而,请求和响应都是垃圾,我不知道如何解释它们

已发送命令的示例(信息显示
已发送写入命令,句柄:0x000e(北欧UART服务:北欧UART Tx)

我在之后立即获得的接收值示例(信息显示
Rcvd句柄值通知,句柄:0x000b(北欧UART服务:北欧UART Rx)

我该如何解释这些回答?如果电池状态为59%,我希望它返回类似于
0x3b
(0x3b十六进制为59十进制)的值。但老实说,我不知道这是怎么回事。也许他们返回的数据类型只有他们的应用程序知道如何解释?就像web的JSON一样

下面是应用程序中的一个示例,我点击了所有特征的向下箭头:(大图像)


可能更重要的是:如何在nRF Connect中复制请求或命令?我尝试在应用程序中发送一个看起来像
0x{02410011000d….}
(从Write命令)的字节数组,但我不知道如何读取响应。

我不确定它是否仍然相关,但至少对于那些对该主题感兴趣的人来说是如此

您可以尝试以下步骤来了解如何解释来自设备的响应

P>一个考虑的选项是通过ADB或APK镜像等网站获取制造商的移动应用程序(APK)。 然后应用一些反向工程工具,如JADX。 如果幸运的话,代码有一定的可读性,那么搜索与响应相关的smth(如ResponseParser),并尝试找到用于解释响应的algo


然而,如果smb已经为您的设备进行了搜索,那么第一个尝试应该始终是在github/google上进行搜索,除非它非常适合您。

如果有人仍然感兴趣,我也为这辆踏板车进行了同样的研究

这是标准的交流,设备提供了标准的“服务”和“特性”。服务可以包含一个或多个特征,您可以通过这些特征与设备通信。每个字符都可以允许与它进行不同类型的交互:写入、读取、订阅通知(这样你就不必手动读取,它可以将数据推送到你的应用程序中)等等(例如,读取)

查看wireshark屏幕截图:您可以看到服务UUID、句柄UUID(特性)和句柄ID。您可以通过UUID或ID与设备通信,具体取决于您的编程语言或库(关于UUID)

在这个特殊的滑板车有两个特点,一个允许写入,另一个-允许订阅。它们一起起作用就像UART中的RX和TX线:您将数据写入其中,然后从另一个读取数据。所以,要开始与scooter通信,您必须建立与它的连接,订阅来自一个ch的通知,并将数据写入另一个ch


至于协议:再次查看she屏幕截图,“UART Tx”是发送到scooter的实际有效负载,“UART Rx”是响应。是的,这是二进制数据,只有应用程序才能理解。幸运的是,该协议已经进行了反向工程,并且运行良好。在您的示例中,应用程序请求序列号,并返回“N2GWX…”作为响应。为了请求电池百分比,您必须根据协议构建另一个有效负载。

hi@MortenMoulder,请与我分享连接到Segway Ninebot ES2电动滑板车的示例项目。我最近也买了一个,我正在制作一个android实验室应用程序,但我很难通过编程方式与它连接和通信。@devjav从未让它工作过。很抱歉