CSR DFU 文件格式

逆向工程 固件 垃圾桶 蓝牙
2021-06-15 08:00:10

我正在尝试对 JBL Flip 3 扬声器的固件进行逆向工程。我已在线获取该设备的 DFU 文件,但不确定包含多少固件。我的第一个问题是,通常 DFU 文件包含完整的设备固件还是其中的一部分,并且设备知道如何更新特定部分?

假设现在该文件包含完整的固件,有人知道 CSR 蓝牙 SOC 的固件映像吗?我知道演讲者使用的是 CSR SOC,因为 DFU 以CSR-dfu2.

在 Audacity 中打开 DFU 文件并播放它,我们可以看到它包含扬声器播放的所有音效以及我认为是代码的一些静态部分: Audacity 中的固件

我相当确信这些部分是代码/数据,因为它们包含像tts/0.raw这样的字符串tts/1.raw但是,字符串的每个字符之间有一个空字节,这表明它们是 UTF-16 字符串。有谁知道使用 UTF-16 文件名的嵌入式文件系统?

不幸的binwalk是没有提供任何有用的信息。但是,我发现了我认为是完整的 JBL Flip 4固件映像图像并binwalk揭示了几个部分:

0             0x0             CSR (XAP2) DFU firmware update header
1380          0x564           CSR Bluecore firmware segment
1931310       0x1D782E        YAFFS filesystem, big endian

有没有人对 CSR 或 JBL 固件有任何经验,并且可以提供如何从 DFU 中提取代码的指导或建议?谢谢你。

2个回答

这是 BlueCore02 设备固件升级文件。我找不到规范,但BlueCore01 规范包含或多或少相同的字段(有一些差异)

我发现这个项目https://github.com/lorf/csr-spi-ftdi,以及信息:

BlueSuite 2.4 及以上版本不支持 BlueCore 2 芯片(如 BC212015)

什么意味着他们故意试图强制开发人员使用更高级别的工具。以上 github 工具应该可以帮助您在不拆卸物理设备的情况下识别准确的芯片。我已经检查了上面的一个并在这里找到:https ://www.chipfind.net/datasheet/csr/bc212015.htm 数据表提供了一些有意义的信息 - 它描述了 Bluecore2 虚拟机,还提到了 CSR 的 BlueLab、Casira 和 MicroSira可能是文档搜索的好方向的开发工具包:

此版本的堆栈固件不需要主机处理器。所有软件层,包括应用软件,都在称为虚拟机 (VM) 的受保护用户软件执行环境中的内部 RISC 处理器上运行。

用户可以使用 BlueLab 和 Casira 开发工具包提供的 BlueLabTM 软件开发工具包 (SDK) 编写自定义应用程序代码以在 BlueCore VM 上运行,与 CSR 分开提供。然后,此代码将与主 BlueCore 固件一起执行。用户可以调用 BlueCore 固件进行各种操作。

执行环境的结构使用户应用程序不会对主要软件例程产生不利影响,从而确保蓝牙堆栈软件组件在应用程序更改时不需要重新验证。使用 VM 和 BlueLab SDK,用户能够开发应用程序,例如无绳耳机或其他配置文件,而无需主机控制器。BlueLab 提供了示例代码,包括耳机配置文件的完整实现。

看起来如果不先了解架构就很难做反向代码:

虚拟机 (VM)。固件提供了运行应用程序特定代码的 VM 环境。尽管 VM 主要用于 BlueLab 和“RFCOMM 构建”>>(提供 L2CAP、SDP 和 RFCOMM 的替代固件构建),但 VM 可与此构建一起使用以执行>简单的任务,例如通过芯片的 PIO 端口使 LED 闪烁。

它还提到 VM 应用程序软件存储在外部闪存上,因此取决于您正在寻找的内容,可能值得检查。