针对 JBL Wave Buds 2(BES1306)固件的逆向工程笔记与 Python 工具:OTA 容器格式、闪存布局、BLE/GATT 协议以及 CRC-32 信任模型。
针对 JBL Wave Buds 2(Bestechnic BES1306,PID 2100)的逆向工程笔记与可复现工具链:涵盖闪存布局、精确到字节的 OTA 容器格式、BLE/GATT 命令协议与 BES "TOTA v2" 加密传输、设备端与应用端的信任边界、工厂控制台,以及一种可复现的方法,用于将自行构建的镜像加载到你所拥有的设备上。
本分析涵盖两个构建版本——经 IDA 分析的 wavebuds.elf(2025 年 4 月)与分发包 2.9.0(2026 年 9 月)——一个完整规范的 8 流 OTA 容器(通过字节级一致的重新打包验证)、在应用端与设备端均得到确认的 CRC-32 完整性模型、一张 54/59 条目的工厂命令表、12 个 OTA RAM 状态变量、一次 7,960 个函数的枚举,以及一次跨构建差分。对 OTA/闪存/CRC/工厂子系统的语义恢复较为深入,其余部分仅为枚举——详见完整性审计。
[!WARNING] 这是由设备所有者自行开展的硬件研究,并非 JBL 官方更新。刷写修改过的镜像不可逆:下载阶段是分阶段进行的且可安全防砖,但激活一个 CRC 有效却已损坏的镜像没有任何暴露的恢复路径。在复现任何操作之前,请先阅读 SAFETY.md。
土耳其语版本:README.tr.md

在测试设备上的硬件结果:在应用 + 用户 CA 中间人(MITM)OTA 流水线验证通过后,两只耳机均能连接、报告 100% 电量,且应用中的每一项控制(ANC/环境声、手势、EQ)均正常工作。经过单字节修改的镜像以同样的方式被接受,设备保持完全可用。
地址来自所分析的构建版本(wavebuds.elf);参见地址台账与来源说明。
0x2C0918BC 使用 CRC-32 例程 0x2C0CE944(表 0x2C0F5218)加上 "BEST" 魔数,对配置、每个分段以及整个镜像进行校验。一个 CRC 有效但修改了一个字节的镜像被接受并成功启动。com.jbl.counterfeit.Rsa2048DynamicVerifier)用于防伪(设备真实性),而非固件签名。0x28120000,而正在运行的应用不受影响,因此下载阶段可安全防砖。0x2C0905E4:MEMORY[0x20026BA0] ∈ {2,4})。UNRESOLVED。该修改有意保持最小化——仅改动解压后镜像的一个字节。它将解压偏移 64096 处的 RTX 内核字符串 RTX V5.5.1 改为 V5.5.2,并重新计算容器 CRC-32。它在设计上是表面性的:目的在于证明设备会接受一个已修改但 CRC 有效的镜像,而非改变行为。
Base (owner-supplied; not redistributed)
official 2.9.0 package 549,558 bytes SHA-256 836cb251f9fb2261dde14f39ba18d358c48018817f3c3d1b527e1ac5f3ab7ba2
decompressed image 955,596 bytes SHA-256 489663e80b76f20f4c94671064908569fac5f4e3df10ab6d7369baffe094f67d
container CRC-32 A0C7CCEC (valid), input range [0x0, 0x862AD)
该仓库有意不包含 JBL 固件。请自行提供合法获取的软件包,并复现:
python3 tools/ota_unpack.py <official_2.9.0_package.bin> --extract image.bin
python3 tools/ota_repack.py make-test <official_2.9.0_package.bin> test.bin
python3 tools/ota_unpack.py test.bin # exactly one decompressed byte differs; CRC valid
重新打包后的容器其确切字节取决于 LZMA 编码器;设备验证的是 CRC-32,而非包哈希(参见 docs/04),并且解压后的一字节差异是确定性的。通过 App 进行投递的方式见 docs/08。
| Flash 映射 | 2 MB NOR 分区 |
| OTA 命令流程 | 命令序列及其 CRC-32 检查点 |
| 信任边界 | 每个阶段验证的内容,以及镜像信任的立足点 |
贡献必须保留构建溯源信息,且不得附带固件;参见 CONTRIBUTING.md 和 SAFETY.md。与安全相关的 发现遵循 SECURITY.md。引用元数据位于 CITATION.cff;请引用所使用的确切 commit 或 tag。
脚本采用 MIT 许可证;文档采用 CC-BY-4.0。JBL/Harman 固件、 商标及 App 资源归其各自所有者所有,不在此处重新分发。