Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
jbl-wave-buds2-firmware-research — Заметки по обратной разработке и инструменты на Python для прошивки JBL Wave Buds 2 (BES1306): формат OTA-контейнера, разметка флеш-памяти, протокол BLE/GATT и модель доверия на основе CRC-32. | Kitploit
Инструменты/GitHubGitHub/c8dhjp4tyv-bit/jbl-wave-buds2-firmware-research
Безопасность встроенных системБезопасность BluetoothБезопасность IoTЭксплуатацияОбратная инженерияКриптографияБезопасность оборудования и IoTАнализ Бинарных ФайловСтатьи и Исследования

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Анализ Прошивок
GitHubc8dhjp4tyv-bit/jbl-wave-buds2-firmware-research

jbl-wave-buds2-firmware-research

Заметки по обратной разработке и инструменты на Python для прошивки JBL Wave Buds 2 (BES1306): формат OTA-контейнера, разметка флеш-памяти, протокол BLE/GATT и модель доверия на основе CRC-32.

Репозиторий
1332 дней назадЕщё не проверено

JBL Wave Buds 2 — реверс-инжиниринг прошивки и OTA

Tests

Заметки по реверс-инжинирингу и воспроизводимый инструментарий для JBL Wave Buds 2 (Bestechnic BES1306, PID 2100): раскладка во флеш-памяти, формат OTA-контейнера вплоть до байта, протокол команд BLE/GATT и зашифрованный транспорт BES «TOTA v2», границы доверия на стороне устройства и приложения, заводская консоль и воспроизводимый метод загрузки самостоятельно собранного образа на принадлежащее вам устройство.

Анализ охватывает две сборки — проанализированный в IDA wavebuds.elf (апрель 2025) и дистрибутивный пакет 2.9.0 (сентябрь 2026) — полностью специфицированный 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%, все элементы управления активны

Аппаратный результат на протестированном устройстве: после того как конвейер OTA через приложение + пользовательский CA MITM был проверен, оба наушника подключаются, показывают 100%, и каждый элемент управления приложения (ANC/Ambient, жесты, эквалайзер) работает. Образ, изменённый на один байт, был принят таким же образом, и устройство осталось полностью функциональным.

Подтверждённые находки

Адреса взяты из проанализированной сборки (wavebuds.elf); см. реестр адресов и происхождение.

  • OTA-образ не подписан криптографически. Целостность на стороне устройства — только CRC-32 — обработчик 0x2C0918BC проверяет конфигурацию, каждый сегмент и весь образ с помощью процедуры CRC-32 0x2C0CE944 (таблица 0x2C0F5218) плюс магическое значение "BEST". Образ с корректным CRC и одним изменённым байтом был принят и загружен.
  • RSA-2048-верификатор приложения (com.jbl.counterfeit.Rsa2048DynamicVerifier) — это защита от подделок (подлинность устройства), а не подпись прошивки.
  • Приложение не выполняет pinning своих OTA-эндпоинтов; достаточно установленного пользователем CA, чтобы перехватить и переписать OTA-конфигурацию.
  • OTA выполняется поэтапно: новый образ копируется во флеш-память по базовому адресу 0x28120000, пока работающее приложение не затронуто, поэтому фаза загрузки безопасна с точки зрения кирпича.
  • Внешний BLE-централ не может управлять OTA: обработчики ограничены внутренним состоянием TWS/соединения (0x2C0905E4: MEMORY[0x20026BA0] ∈ {2,4}).
  • Транспорт BES TOTA v2 выводит свой сеансовый ключ AES-128 полностью на стороне клиента; серверного/устройственного секрета нет.
  • Заводская/инженерная консоль (59 команд в проанализированной сборке, 54 в 2.9.0) может читать/записывать идентичность устройства (MAC/BLE-адрес), подстройку кварца и ключ BT-соединения. Её доступность по воздуху — UNRESOLVED.
  • Две сборки скомпилированы и перемещены отдельно: один и тот же продукт, сдвинутые адреса, 59 → 54 заводских записей. См. дифференциал.

Протестированная модификация

Модификация намеренно минимальна — один байт распакованного образа. Она меняет строку ядра RTX RTX V5.5.1 → V5.5.2 по смещению в распакованном виде 64096, и 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), и однобайтовое различие после распаковки детерминировано. Доставка через приложение описана в docs/08.

Диаграммы

Карта флеш-памятиРазметка 2 МБ NOR
Поток OTA-командпоследовательность и её контрольные точки CRC-32
Границы довериячто проверяет каждый этап и на чём держится доверие к образу

Документация

Скачать инструмент