Pull to refresh
8K+
8

Независимый исследователь в InfoSec & музыкант

12
Rating
5
Subscribers
Send message

Думаю, мне стоило это немного расписать, моя ошибка.

За вывод изображения отвечает код из DOOMBuds, поэтому я не написал об этом...

Вывод работает так:

  1. Рендерится кадр игры

  2. Кадр сжимается в JPEG картинку через JPEGENC

  3. Сжатый кадр пересылается по UART

  4. Браузерный клиент читает UART (UART порт наушников подключен к адаптеру) и выводит итоговую картинку на экран

Сжатие нужно из-за ограничения UART по скорости (в основном, из-за ограничений адаптеров, полностью можно посмотреть в оригинальном репозитории)

Спасибо за комментарий!

Начну с того, что даже слитые SDK от китайцев частично содержат проприетарные бинарники, исходники от которых либо невозможно найти, либо очень сложно. Или даже не содержат некоторого кода вообще.

Так и случилось с загрузчиком — я специально собрал все SDK, которые есть в интернете (частично даже те, которые не индексируются), на 10 разных SDK нашёлся один исходник загрузчика...

Насчёт BLE драйвера... OTA_BOOT как раз не имеет никаких драйверов / режимов восстановления и занимается только записью обновления, а само обновление отправляется через высокоуровневую прошивку, поэтому выходит наоборот — допустить малейшую ошибку = восстановление через пайку и UART.

Причина создания besota в том, что я не нашёл никаких утилит для обновления этих чипов по воздуху, поэтому решил сделать её сам.

"Кнопки на столе" - лишь моё улучшение готового проекта DOOMBuds. Сама игра работает полностью на микроконтроллере, а картинка выводится через UART. Я это не упомянул, потому что эта часть принадлежит автору оригинального проекта, а я создал только форк с привязкой кнопок.

Доброй ночи! :)

кстати мне тоже интересно, я попробую и тесты проведу, вам отпишу... если возможно выше ставить, уберу в релизе этот лимит

кстати можно попытаться поменять максимальный битрейт в прошивке, дальше уже будет зависеть от антенны/передатчика блютуза

сейчас обновляю кастомную прошивку, думаю, на ней можно АЧХ на всех режимах к одному уровню привести, а можно ли это сделать патчем стоковой прошивки - не знаю. но я думаю, что скоро плюсов у стока по сравнению с кастомом не останется :)

да, из-за лицензий... ну, думаю, есть много способов это обойти, но это на будущее... :)

да, в q30 нет датчиков. Можно попытаться вырезать из прошивки Q35 всё, чего нет в Q30 и мы в теории получим прошивку для Q30, но с LDAC

Думаю, в будущем можно попытаться менять настройки ЦАПа отдельно для каждого режима... а про Q30 вы абсолютно правы. В SDK есть даже бинарники для LDAC и LHDC, я их могу в теории собрать, но шансы, что репозиторий снесут, вырастут в разы :)

Можно попытаться установить прошивку от Q35 в Q30 (они очень похожи по структуре, не знаю пока в чем различия, но к примеру пины кнопок совпадают на 100%), но для этого нужен тестировщик с Q30 и UART-адаптером.

попробуйте UART пины обязательно поискать и слить прошивку! Я уже прошивки BES на глаз кстати отличаю ;)

По опыту могу сказать, что внутри может быть либо старый чип BES, либо платформа JieLi (JL), желаю удачи :)

Удивительно, но да. Линии данных подключены и идут прямо из платы с чипом в плату с разъемом. Но при этом стоковая прошивка собрана вообще без USB стека, судя по всему решили в последний момент не добавлять USB-аудио.

В выключенном состоянии ЦАП не работает, это уже относится к самим динамикам. Кстати, чип поддерживает USB аудио, так что вполне можно по кабелю слушать музыку на безумных частотах, если когда-нибудь добавлю USB стек в свою прошивку :)

Вам очень повезло и бережно обращаетесь с техникой :)

Про амбушюры кстати распространенная тема, они у всех расклеиваются через 2-3 года.

Через пару дней выйдет обновление, которое позволит прошить патч звуков прямо по воздуху, без разборки! Вообще, в даташите написано, что ЦАП чипа может выдавать вплоть до 192кГц и еще много чего. Главное - чтобы потянул блютуз. Но такое возможно уже с полностью кастомной прошивкой, которую я, к слову, тоже делаю. Остальное я не исследовал пока что... спасибо за комментарий! У меня стоит в целях на будущее реверс-инжиниринг звуковой части в стоковой прошивке.

Для начала хочу сказать, что изучал Q20i несколько месяцев назад, в них тот же самый чип!

Спасибо за обратную связь, в будущих частях про загрузку и т.д. расскажу :)

Сама прошивка - просто ARM-бинарник с RTOS, который разделен на секции (по смещениям адресов). В МК вшит неизменяемый загрузчик (BootROM), который отвечает за восстановление через сервисный порт (через него считывался флэш с помощью bestool) и загрузку прошивки с флешки. МК загружается именно с него.

При запуске он указывает процессору, что нужно исполнять код с адреса флэша (0x3c000000). Сам код в прошивке - ассемблерный байткод.

Мой патчер находит в прошивке похожую структуру кода (сравнивает с той, что в нем прописана), выбирает несколько функций-кандидатов и меняет код в главном кандидате (пишет звуки в пустую память, а в функции меняет указатели (адреса) с стоковых звуков на заменённые) и сохраняет бинарник. Его можно прошить через тот же bestool.

Про погружение - про саму составляющую прошивки я узнавал сам, об этом мало что было в интернете. На чип BES2300P есть даташит (он указан в начале статьи), но я его использовал максимум для того, чтобы узнать, какое напряжение требуется для UART пинов.

Если сказать просто - всё шло и эмпирическим путём, но с использованием различных ресурсов и инструментов.

Если просто перечислить инструменты, которые использовались:

  1. Ghidra - декомпилятор/дизассемблер бинарного кода.

  2. basefind2 - утилита, которая помогает найти адрес загрузки прошивки.

  3. bestool - утилита для считывания/прошивки для чипов BES.

  4. Конечно же, ИИ. С помощью него писались все скрипты и я частично использовал его как источник информации.

Я увлекаюсь информационной безопасностью, поэтому я решал CTF-задачи по реверс-инжинирингу, но больше всего тренировался на реальных вещах - я изначально исследовал работу ABL (fastboot в android) образа на процессорах Qualcomm, благодаря этому я как раз научился пользоваться Ghidra и получил базовые знания о том, как работает скомпилированный код. И сами наушники как раз тоже исследовались, чтобы получить знания в этой сфере.

Они очень похожи на q35, даже есть шанс, что прошивки совместимы. У Ардуин есть UART пины, как вижу, но наушникам на пинах нужно напряжение в 1.8V, а у них может быть 3.3 или 5. Скорее всего каким-то образом нужно будет понижать напряжение. Если интересует, можем связаться, мой ТГ указан снизу.

Если вы про DOOM - звучит безумно, интересно и сложно, как вызов. Если про мой проект (патчер и прошивка) - для меня важны такие детали и возможность управлять своим устройством.

Прекрасно... я бы тоже так сделал, если бы продолжал носить, ни разу их не складывал. Хорошие наушники за свои деньги, они еще и прошиваются, даже исходники для чипа есть. Можно всё что угодно с ними сделать!

На самом деле там сломаны оба механизма складывания (динамики просто мотаются свободно из стороны в сторону) и после пары падений сломалась пластиковая часть механизма для настройки оголовья (ни на что не повлияло), но носить их возможно... 4 года ходил с ними.

Information

Rating
671-st
Location
Россия
Registered
Activity

Specialization

Пентестер, Специалист по реверс-инжинирингу