我最近买了一辆赛格威九机器人ES2电动踏板车。我可以连接到滑板车通过蓝牙乐和抓取信息,如电池状况,当前里程,温度等。这一切都是通过一个应用程序完成的。
在我的Android设备上,我成功地提取了HCI日志文件,并将其导入Wireshark。我可以看到所有的请求和命令在我的手机和滑板车之间来回发送。但是,请求和响应都是垃圾,我不知道如何解释它们。
发送命令示例 (info表示Sent Write Command, Handle: 0x000e (Nordic UART Service: Nordic UART Tx))

示例,之后得到的接收值(info:Rcvd Handle Value Notification, Handle: 0x000b (Nordic UART Service: Nordic UART Rx))

我该怎么解释这些反应呢?如果电池状态是59%,我希望它返回类似0x3b (0x3b十六进制是59小数点)。但老实说我不知道这是怎么回事。也许他们正在返回一组数据类型,只有他们的应用程序知道如何解释?就像网络上的JSON。
下面是移动nRF连接应用程序中的一个示例,在该示例中,我按了所有特征的向下箭头:https://i.imgur.com/hREDomP.jpg (大型图像)
也许更重要的是:如何在nRF连接中复制请求或命令?我尝试在应用程序中发送一个看起来类似于0x {02410011000d.....}的字节数组,但是我不知道如何读取响应。
发布于 2019-12-07 11:03:12
如果有人还感兴趣的话,我也会对这辆摩托车做同样的研究。
这是标准的BLE交流,设备提供BLE的“服务”和“特性”。服务可以包含与设备通信的一个或多个特征。每个特性都可以允许与其进行不同类型的交互:写入它、从中读取、订阅通知(因此您不必手动读取,它可以将数据推送到您的应用程序),以及更多(例如,读取这里 )。
看看你的wireshark截图:您可以看到Service,处理UUID (特性)和句柄ID。您可以通过UUID或id与设备通信,这取决于您的编程语言或库(关于uuid的更多)。
在这个特殊的滑板车有两个特点,一个允许写入它,另一个-允许订阅它。它们一起作用就像UART中的RX和TX连线:您将数据写入一个中,然后从另一个读取。因此,要开始与滑板车通信,您必须建立与它的连接,订阅来自一个ch的通知,并将数据写入另一个ch。
至于协议:再看她的截图,"UART Tx“是发送给滑板车的实际有效载荷,"UART Rx”是响应。是的,这是二进制数据,只有应用程序才能理解。幸运的是,协议已经被反向设计,并且是良好的记录在案。在您的示例中,应用程序请求序列号,并返回响应-“N2GWX.”。为了请求电池百分比,您必须根据协议构建另一个有效负载。
发布于 2019-09-16 09:48:20
我不确定它是否仍然相关,但至少对那些对这个话题感兴趣的人来说是如此。
您可以尝试以下方法来理解如何从设备中解释响应。
需要考虑的一个选择是,从亚行或apk镜像等网站获取制造商的移动应用程序(apk),然后应用一些反向英语工具,比如JADX。如果您很幸运,并且代码有点可读性,那么搜索与响应相关的smth (如ResponseParser),并尝试找到用于解释响应的algo。
然而,如果smb已经为您的设备搜索了github/google,那么第一个调度应该总是在github/google上搜索,除非它是非常利基的。
https://stackoverflow.com/questions/55343334
复制相似问题