Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
jbl-wave-buds2-firmware-research — 针对 JBL Wave Buds 2(BES1306)固件的逆向工程笔记与 Python 工具:OTA 容器格式、闪存布局、BLE/GATT 协议以及 CRC-32 信任模型。 | Kitploit
工具/GitHubGitHub/c8dhjp4tyv-bit/jbl-wave-buds2-firmware-research
嵌入式系统安全蓝牙安全物联网安全漏洞利用逆向工程密码学硬件与物联网安全二进制分析论文与研究

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
固件分析
GitHubc8dhjp4tyv-bit/jbl-wave-buds2-firmware-research

jbl-wave-buds2-firmware-research

针对 JBL Wave Buds 2(BES1306)固件的逆向工程笔记与 Python 工具:OTA 容器格式、闪存布局、BLE/GATT 协议以及 CRC-32 信任模型。

查看仓库
1331天前尚未审核

JBL Wave Buds 2 — 固件与 OTA 逆向工程

Tests

针对 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

在配套应用中测试的 JBL Wave Buds 2:两只耳机均以 100% 连接,所有控制项均可用

在测试设备上的硬件结果:在应用 + 用户 CA 中间人(MITM)OTA 流水线验证通过后,两只耳机均能连接、报告 100% 电量,且应用中的每一项控制(ANC/环境声、手势、EQ)均正常工作。经过单字节修改的镜像以同样的方式被接受,设备保持完全可用。

已确认的发现

地址来自所分析的构建版本(wavebuds.elf);参见地址台账与来源说明。

  • OTA 镜像没有密码学签名。设备端的完整性校验仅依赖 CRC-32——处理函数 0x2C0918BC 使用 CRC-32 例程 0x2C0CE944(表 0x2C0F5218)加上 "BEST" 魔数,对配置、每个分段以及整个镜像进行校验。一个 CRC 有效但修改了一个字节的镜像被接受并成功启动。
  • 应用端的 RSA-2048 校验器(com.jbl.counterfeit.Rsa2048DynamicVerifier)用于防伪(设备真实性),而非固件签名。
  • 应用没有对其 OTA 端点进行证书固定(pinning);安装一个用户 CA 就足以拦截并重写 OTA 配置。
  • OTA 是分阶段的:新镜像被复制到闪存基址 0x28120000,而正在运行的应用不受影响,因此下载阶段可安全防砖。
  • 外部 BLE 中心设备无法驱动 OTA:相关处理函数受内部 TWS/连接状态门控(0x2C0905E4:MEMORY[0x20026BA0] ∈ {2,4})。
  • BES TOTA v2 传输完全在客户端派生其 AES-128 会话密钥;不存在服务器/设备端密钥。
  • 一个工厂/工程控制台(所分析构建中有 59 条命令,2.9.0 中有 54 条)可读取/写入设备身份(MAC/BLE 地址)、晶振微调以及 BT 链路密钥。其空口可达性为 UNRESOLVED。
  • 两个构建版本是分别编译并重定位的:同一产品,地址发生偏移,工厂条目从 59 变为 54。参见差分。

已测试的修改

该修改有意保持最小化——仅改动解压后镜像的一个字节。它将解压偏移 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 检查点
信任边界每个阶段验证的内容,以及镜像信任的立足点

文档

  • 00 — 概述
  • 01 — 硬件与 Flash 映射
  • 02 — OTA 容器格式
  • 03 — 固件镜像布局
  • 04 — 安全模型
  • 05 — BLE/GATT 与命令
  • 06 — OTA 协议
  • 07 — App 端分析
  • 08 — 投递方式
  • 09 — 函数目录
  • 10 — 工厂控制台
  • 来源溯源(两次构建、证据类别) · 地址台账
  • 完整性审计 · 覆盖范围与局限性
  • 状态机 · 事件记录
  • 工具与范围 · 测试与可复现性
  • 生成的目录 · IDA 命令日志

本项目不主张的内容

  • 不重新分发 JBL 固件、App(原始或修改版),也不提供可直接刷写的自定义镜像。
  • 不涉及设备真实性(防伪)路径。
  • 不证明 ROM 引导程序缺少安全启动——该区域不在任何 OTA 镜像范围内,且未被转储;该主张仅限于静态证据,加上在一台设备上观察到的修改镜像启动结果。
  • 不主张工厂控制台可通过无线方式访问。
  • 不主张任何结果适用于其他设备、地区或固件构建。

贡献、安全与引用

贡献必须保留构建溯源信息,且不得附带固件;参见 CONTRIBUTING.md 和 SAFETY.md。与安全相关的 发现遵循 SECURITY.md。引用元数据位于 CITATION.cff;请引用所使用的确切 commit 或 tag。

许可证

脚本采用 MIT 许可证;文档采用 CC-BY-4.0。JBL/Harman 固件、 商标及 App 资源归其各自所有者所有,不在此处重新分发。

Star 历史

Star History

下载工具