在 Android 上嗅探串行蓝牙流量

逆向工程 安卓 串行通讯 嗅探 蓝牙
2021-06-19 12:02:13

UE Megaboom 串行协议相关:我试图了解 UE Megaboom 所说的串行协议,我怀疑这是应用程序如何控制扬声器的高级功能。

一种方法是将应用程序安装在 Android 虚拟机上,连接到扬声器并捕获交换的流量。

使用 VirtualBox,我可能需要将蓝牙加密狗连接为 USB 设备并让 VM 控制它。

如何捕获扬声器和应用程序之间交换的串行流量?

1个回答

根据这个 StackOverflow 答案,Android 从 4.4 开始在开发者选项中有一个设置。您首先需要启用开发人员设置(如果您还没有这样做),然后启用“启用蓝牙 HCI 监听日志”。

我自己还没有尝试过,但根据我能找到的信息:

  • 通信应记录到名为/sdcard/btsnoop_hci.log.
  • 如果您的外部存储目录不是/sdcard,请相应地修改路径。
  • 某些版本的 Android 可能使用完全不同的路径。查找FileName参数 in/etc/bluetooth/bt_stack.conf以找到正确的路径。(某些版本的 Android 可能会将这个文件放在/system/etc或 中/vendor/etc。)
  • 在某些版本的 Android(包括 Android x86_64 CM 14.1)上,上述方法均无效,但您会找到登录信息/data/misc/bluetooth/logs/btsnoop_hci.log(您需要具有 root 权限才能获取文件)。
  • 然后可以使用 Wireshark 或类似工具分析生成的文件。

要从 VirtualBox 上运行的 Android VM 获取蓝牙:

  • 如果您使用的是 Linux(在 Ubuntu 18.04 上尝试过):
    • 将自己添加到vboxusers组中,例如通过运行sudo usermod -a -G vboxusers your_user_name
    • 注销并重新登录以使新的组成员身份生效。
  • 启动你的安卓虚拟机。
  • 在设备 > USB 设备中,将蓝牙适配器连接到 VM。它可能有一个不起眼的名字(我的只是叫 Intel [0001])。
  • 或者,添加一个 USB 过滤器,让 VM 在启动时自动抓取 BT 设备。
  • 请注意,当 VM 正在使用 BT 适配器时,主机系统将无法访问它。如果您有 BT 鼠标或键盘,请将其替换为有线鼠标或键盘,或者获取额外的 BT 适配器并将其用于您的 VM。

然而,在实践中,我无法从 Android VM 获得可靠的蓝牙连接。我可以扫描设备并设法配对 BT 设备(尽管这需要多次尝试),但我从未设法连接到该设备。我怀疑这是因为 Android 非常需要资源,并且虚拟化的开销以及对 4 个处理器内核中的 2 个的限制(我设置了这种方式以防止 VM 占用我的整个 CPU)并没有为安卓运行流畅。需要在物理硬件上运行的 USB 记忆棒上使用 Android x86_64 重试。