我试图确定以编程方式从Pebble手表卸载应用程序时发送的蓝牙字符串。我已经卸载了一个应用程序(在插槽2中)5次,并且得到了5个相似但略有不同的字符串:

前两个与此不同。第一个字符串相差很大(也许不确定,我不确定),但其他字符串在第四个八位位组中仅具有差异。

进行此类数据分析的最佳方法是什么?我之前从未做过任何逆向工程,但不幸的是,Pebble没有提供用于以编程方式卸载应用程序的API。

看起来前3个八位位组指定了要执行的操作(在这种情况下,是卸载应用程序),但是3个八位位组的指令大小很奇怪(不是2的幂),因此,我怀疑这是不正确的。完全是100K插槽)。

#1 楼

因为您有5个消息中的3个绝对相同,并且其他两个之间的差别很小,所以前两个消息很可能被错误地捕获。

尝试检测到该错误的方法是多次执行同一操作,以查看该模式是否成立。

更一般而言,对这样的协议进行逆向工程通常始于收集尽可能多的数据。其中包括:


美国联邦通信委员会(FCC)数据库类型批准数据库条目通常描述RF发射的详细信息
专利信息经常揭示专有消息格式的详细信息
适用的技术标准,例如在这种情况下为蓝牙
可在网上获得产品信息
产品随附的技术信息
产品随附的逆向工程软件
搜索互联网看看是否有人已经为您完成工作
您创建的仔细的笔记和相关的捕获文件
有关生产公司的财务/新闻信息。有时会公开宣布收购产品线,或与第三方开发商宣布交易,这可以帮助您发现其他询价行。
来自芯片供应商的示例代码。对于某些消费类产品,该设备或多或少地定制了作为芯片供应商提供的样本或参考设计信息提供的代码。此外,研究其他类似的协议可能会让您深入了解这些数据包中可能包含的数据类型,有时还可以了解各个字段的特定详细信息,例如CRC或校验和计算的详细信息。

#2 楼

您已捕获了蓝牙RFCOMM帧。这些包括各种控制字段,这些控制字段由蓝牙堆栈处理,并且对上层的应用程序层透明。 (想像像添加了开始/停止/奇偶校验位但只是通过蓝牙进行通讯的串行端口。)

在您的帧中:是地址字段。
第二个字节0BEF是控制字段。
第三个字节FF是有效载荷长度字段(2B => 21字节有效载荷)
如果控制字节= 0x2B的第4个字节与基于信用的流量控制有关。
最后一个字节FF9A是帧校验和

相应地,有效载荷数据从第4个或第5个字节开始并以
倒数第二个字节。

在您的情况下,所有5帧都具有相同的21字节有效载荷数据,这是应用程序传输的并且另一端将接收的有效数据。 />
现在推测,每个Pebble应用程序都有一个唯一的16字节UUID帽子,我希望这是卸载命令的一部分。如果我们假设UUID是数据包的最后16个字节,那么我们得到的数据如下:-

big-endian)长度字段(17个字节)。在这种情况下,我猜想uuid与前面的86结合起来组成了17个字节。这将导致以下有效负载结构:

00 11 17 70 02 24 b0 a1 e5 f0 b1 44 0d 8e 53 8f 26 68 8a 3f 07


如果我的猜测是正确的,则仅剩下00 1102的组合意味着卸载。 />通过捕获更多内容(卸载其他应用程序或安装应用程序),应该可以证明(或拒绝!)。