За несколько дней обычная умная колонка превратилась в девайс, на котором запускают Doom, поднимают Home Assistant, ставят пакеты через пакетный менеджер и меняют голосового ассистента на локальную LLM.
Чат проекта: https://t.me/c/1343221485/738304
Wiki проекта: https://hackalice.me/
Триггер — утечка ключей Emudhra (той самой истории с сертификатами Android TV). С ними колонка соглашается ходить на «свой» сервер вместо quasar.yandex.net, а дальше открывается всё: ADB по сети, root, SSH, замена облака.
Как это устроено: два слова про архитектуру
Чтобы понимать гайды, хватит одной схемы:
- Колонка — это клиент. Внутри Android-ish система, демон
maind(микрофоны, кнопки, свет, часы), демонquasar— «клиентская часть» облака. - Quasar — серверная часть. Активация, привязка аккаунта, OTA, распознавание речи, ответы ассистента, музыка — всё там.
uniproxy— голосовой шлюз Яндекса (именно его падение в какой-то момент напугало часть людей: «из-за ситуации с uniproxy боязно шить»).
Отсюда два больших направления моддинга: снять ограничения на самом устройстве (ADB/root/SSH/пакеты) и подменить сервер (свой Quasar-совместимый бэкенд).
Мини-туториал: путь от стоковой колонки до root
Ниже — конспект того, что лежит в теме «Гайды/начинающим». Это не призыв к действию: половина шагов необратима, а на некоторых моделях (особенно на Лайт) откат «добивает» колонку, потому что сертификатов для MITM там нет.
Что понадобится
- Колонка, которую не жалко (лучше — купленная на вторичке).
- Роутер с настройкой DNS, раздаваемого по DHCP. Это ключевой элемент.
- ПК по кабелю в той же LAN: у части роутеров LAN-DNS привязан к MAC, и запись «на ноутбук по Wi-Fi» указывает в пустоту. IPv6 в локальной сети надо выключить, VPN на ПК — тоже.
- Прокси на
:443(в комплектах сообщества:quasar-root-kit,otomir23/quasar-unlock— Nix-модуль плюс Hono-сервер), Python 3,adb. - Понимание, что подпись OTA вы не подделаете: колонка принимает только настоящий zip от Яндекса. Подменяется не подпись, а ответ на вопрос «есть ли обновление».
Сброс к заводской прошивке
Выключить из розетки, зажать кнопку Алисы (на части моделей — кнопку микрофона), не отпуская подать питание и держать, пока индикатор не станет жёлтым/салатовым. У Станции 1 это возвращает 1.3.7.0.352953201.20181225.factory — софт 2018 года, без Алисы, но со старым TLS, который ещё доверяет нашей цепочке.
Подмена DNS
На роутере (или на DNS-сервере в сети) три имени указываются на IP вашего ПК:
quasar.yandex.net
quasar.s3.yandex.net
s3.yandex.net
Проверка — с самого роутера: nslookup quasar.yandex.net 192.168.x.254 должен вернуть адрес ПК, а не Яндекса. Важный нюанс из гайда: DNS надо включать в момент выбора Wi-Fi при первичной настройке, не раньше — иначе приложение просто не начнёт setup из-за сертификатов.
Прокси, который «отдаёт обновление»
Логика простая: заводская колонка при первой настройке сама спрашивает /check_updates. Прокси отвечает «да, есть» и подсовывает нужную версию:
location = /check_updates {
default_type application/json;
return 200 '{"hasUpdate":true,
"version":"2.369.5.46.4778391386.20261013.52",
"downloadUrl":"https://quasar.s3.yandex.net/...zip",
"crc32":362876568,
"critical":true,
"fallbackIp":"192.168.1.50"}';
}
Три вещи, на которых спотыкаются все
fallbackIp— IP вашего ПК в LAN. Если оставить яндексовский, колонка будет качать «сама у себя».- Zip надо отдавать с поддержкой HTTP Range — колонка тянет файл кусками (у Станции 1 это ~638 МБ).
- Когда колонка уже на нужной версии, на
/check_updatesнадо отвечать{"hasUpdate":false}, иначе прилетит.50и всё сломается обратно.
В момент, когда колонка пишет прошивку, нельзя трогать ни питание, ни прокси, ни DNS.
ADB
После обновления — стандартное:
adb connect 192.168.1.77:5555
adb shell
И сразу гигиена: выключить автообновление, зафиксировать доступ, снять DNS-подмену. Дальше колонка живёт в сети, но OTA ей уже не страшна.
Root: патч boot
ADB часто даёт только uid=2000(shell). Настоящий root добывается патчем boot-раздела — и это самый опасный шаг.
adb shell ls -l /dev/block/by-name/boot # у Станции 1 → mmcblk0p6, 16 МиБ
adb shell "su 0 /system/bin/busybox-smp dd if=/dev/block/by-name/boot
of=/data/local/tmp/boot.img bs=4096 count=4096"
adb pull /data/local/tmp/boot.img . # ЭТО ВАШ ОТКАТ, сохраните
python3 patch_boot.py info boot.img # page_size, ramdisk_off, aligned_end
python3 patch_boot.py patch boot.img -o boot-root.img --blob-at 14577664
Что меняется внутри ramdisk:
- в
default.prop—ro.debuggable=1,service.adb.tcp.port=5555,persist.sys.usb.config=adb; - в
init.rc— рядом с сервисомadbdдобавляется второй сервис:
service rootshell /system/bin/busybox-smp telnetd -l /system/bin/sh -p 2323 -F
class core
-F обязателен (иначе init теряет процесс), class core — потому что /system к этому моменту уже смонтирован. Ядро не трогают, SHA1 в заголовке не трогают, «хвост» раздела после ramdisk не затирают — иначе кирпич.
Заливка — тем же dd, и хеш проверяется на самой колонке, а не на ПК:
adb push boot-root.img /data/local/tmp/boot-root.img
adb shell su 0 /system/bin/busybox-smp dd if=/data/local/tmp/boot-root.img
of=/dev/block/by-name/boot bs=4096 count=4096
adb shell su 0 sync
adb reboot
После загрузки: adb shell id всё ещё покажет uid=2000 — это нормально. Root живёт в telnet:
telnet 192.168.1.77 2323
# внутри: id → uid=0(root), CapEff: 0000001fffffffff
mount -o rw,remount /system
Откат — залить обратно сохранённый boot.img. Сброс кнопкой Алисы чистит /data, но boot не возвращает.
SSH и пакеты
Дальше по желанию: dropbear + dropbearkey + init-скрипт S99dropbear (порт 22, ключ в /etc/dropbear), и главное — yam:
curl -fsSL https://raw.githubusercontent.com/nyakokitsu/yam/main/install.sh | sh
yam install <package>
yam — Y Application Manager, написанный на Rust, «что-то вроде Docker» для колонки: бинарные пакеты (бинарник + адаптер на Lua) и чисто Lua-пакеты, которые могут перехватывать IPC-сообщения maind и дёргать alice.exec(). Реестр — nyakokitsu/yapkg. Ставится одной командой, под Windows тоже.
Что уже запустили
Вот, собственно, ответ на «а что с этим можно делать». Список — из тем «бинарники/скрипты/оболочки», «yam» и «Новости»:
Полная замена облака
v3rt3p (github.com/v3rt3p) — открытая платформа для закрытых голосовых ассистентов (Яндекс Станция, VK Capsula). По сути Quasar-совместимый сервер: колонка думает, что говорит с Яндексом, а говорит с вашим железом. Что уже умеет:
- Любая LLM с OpenAI-совместимым API — вплоть до локальной
qwen2.5:3b. «Если он поддерживает OpenAI API спецификацию для LLM ответов, то да» — прямой ответ разработчика. - Свой STT/TTS: Vosk (
vosk-model-small-ru-0.22), GigaAM v3 e2e RNNT, Piper, Silero v5 (xenia). Всё крутится в контейнере в локалке, Raspberry тянет. - Работа без интернета вообще: ADB выдаётся по локальному IP, активация после factory — без аккаунта и xtoken.
- В работе: стриминг музыки по голосовой команде, WebUI, NLP.
То есть колонка может работать «в полной отвязке от Яши» — так участники и формулируют, и это, пожалуй, самый радикальный сценарий: устройство остаётся, облако исчезает.
Колонка как устройство Home Assistant
Pulsar (ste4ik/pulsar, форк Morvex885/pulsar с поддержкой Мини 2) — нативный C++ демон вместо стека Яндекса. Колонка появляется в Home Assistant через ESPHome API и в Music Assistant как Sendspin-плеер. Работают кольцо и анимации, кнопки, микрофоны, VQE, wake word и голосовые команды, обновление прошивки из HA, «отвечает ближайшая колонка». Проверено на 0.369.1.46.
Отдельная интеграция (v0.4.0) доводит это до красивого: анимации подсветки в стиле Алисы (слушает/думает/отвечает/ошибка/таймер), отсчёт таймера, эффекты света (Rainbow, Breathe, Color loop, Comet, Twinkle, Fire, Aurora, Lava lamp, Candle, Night light), визуализация музыки (Spectrum/Pulse/Disco/Polar) и режим Clock music: часы показывают уровень музыки, а каждые 30 секунд на 3 секунды возвращают время. Открыты PR на Мини 3 и Станцию 2.
Свет, звук, панели
- Подсветка «Алисы Про» без подписки —
spoof_alice_pro_led.sh: подменяет анимации слушания/размышления/речи на «прошные», делает бэкап оригиналов, откат одной командой, перезагрузки переживает. - RGB-анимации Алисы на Мини 2 —
install-rgb-alice-mini2.sh, ставится по SSH. - qsdmn.sh — управление самим
quasarс колонки (stop / start / restart / reboot). Смысл: Quasar держит микрофоны, динамики и свет — остановили, и они свободны для ваших проектов. Во время работы скрипт показывает индикацию на кольце и часах. - Alice Panel (
initialfox/yandex-station-1-panel) — веб-панель прямо на Станции 1 (tulip-d1/aarch64): обзор железа, пакеты, веб-терминал, снимки HDMI, автообновление. Один бинарь, ставится по SSH, живёт наhttp://IP:8080.
Эмуляция и «а зачем»
- Эмулятор станции (
initialfox/yandex-station-emulator) — QEMU + веб-панель, пока только Мини 2. Позволяет отлаживать пакеты и скрипты, не рискуя железом. - Doom на Яндекс Лайт 2 — через QEMU. Плюс шутка про «децентрализованный ЦОД на колонках», которую половина чата восприняла серьёзно.
- «Сайодевайс» на Мини 2 — колонка прикидывается Bluetooth-девайсом, макросы биндятся прямо из браузера (нужен WebHID, то есть Chrome), подсветка настраивается там же.
Мелочи, из которых складывается жизнь
- Бот сопряжения (
sevennnoff/quasar-connect-bot,@quasarconnectbot) — генерирует и расшифровывает звуковые коды, то есть колонку можно настроить без приложения Яндекса. Нужен свой Quasar: API Яндекса не примет произвольный ключ аккаунта. - Скрипт приватности (
yandex-station-privacy.sh) — режетclck.yandex.netи пару DNS, при этом Алиса продолжает отвечать. В теме отдельно просят: если публикуете такой скрипт — пишите, остаётся ли Алиса живой. lite-kit(krevetkqqq/lite-kit) — набор для Лайтов.- AirPlay — тут смешно: за пару дней появилось шесть разных эйрплеев, и модератор просит «воздержаться от создания новых утилит», пока не появится общая кодовая база. Классика.
Инфраструктура
Отдельная GitHub-организация под единый формат пакетов, реестр yapkg, тема «Дампы прошивок» (сбор образов по моделям), вики по колонкам — с просьбой прогнать md-файл через своего ИИ-агента и прислать отчёт по железу. Плюс yam как единая точка входа: чтобы не «шесть эйрплеев», а yam install.
Что пошло не так (и почему об этом стоит знать)
- Волна сбросов. В «Новостях» закреплено: «У яндекса походу какой-то механизм ресета колонок есть. Делайте дампы/снапшоты станций, на всякий». Дальше — паника, совет отключить колонки от интернета и делать бэкапы прошивок, и трезвый комментарий модератора: пруфов никто не видел, «мои 4 ломанные колонки чувствуют себя более чем прекрасно». Часть сообщений — «сбросило колонку, адб не восстанавливается».
.50закрыла старую дыру. Обновившиеся «в лоб» остались без ADB: цепочка Emudhra больше не принимается. Лечится откатом на.46, но не на Лайт — там сертификатов для MITM нет, и откат только добьёт.- Кирпичи. Мини 2 (Amlogic A113X) поднимают через тестпоинт и Amlogic USB Burning Tool, MTD/UBI разделы шьют по ADB. Для этого и написан отдельный туториал с автоматическим восстановлением и перманентной блокировкой OTA.
- Эксплойт слишком новый. Прямая цитата из «Новостей»: «Все, кто зашёл чисто накатить эксплойт и побаловаться с колонкой, не имея достаточного опыта, — подождите, пока мы выпустим нормальные скрипты… Через пару дней сделаем нормальные утилиты».
- Люди лезут в личку к админам — настолько, что в чате появилось объявление капсом и «аппеляция 1000 рублей на монеро» (шутка, но с намёком).
Куда это всё идёт
Смотришь на список и видишь не «взлом колонки», а появление платформы:
- есть рантайм (root, SSH, busybox,
/dataкак место для своих бинарников — на Мини 2 в/bkupgradeсвободно ~87 МБ); - есть пакетный менеджер и реестр (
yam+yapkg), с идеей переписать всё на Lua, «чтобы это можно было мейнтейнить»; - есть слой совместимости с облаком (v3rt3p) и слой, который облако вообще выкидывает (Pulsar + Home Assistant);
- есть эмулятор, чтобы разрабатывать без железа.
По сути, дешёвая колонка с микрофонным массивом, световым кольцом, динамиком и Always-On железом превращается в ARM-компьютер за пару тысяч рублей — с готовым корпусом, питанием и подсветкой. Дальше вопрос только в том, что вы на нём соберёте: локального ассистента, музыкальный эндпоинт для HA, устройство-игрушку или что-то, чего ещё не было.
И да, главный совет из чата, который стоит повторить: сначала дамп, потом эксперименты. Потому что второго boot.img у вас не будет.
Дисклеймер
Источники: темы «Новости», «Гайды/начинающим», «yam — фреймворк для моддинга с пакетным менеджером», «Бекенд (Quasar)», «бинарники/скрипты/оболочки» чата «Yandex Station Extended» (2 593 участника). Ссылки:
github.com/v3rt3potomir23/quasar-unlockinitialfox/yandex-station-emulatorinitialfox/yandex-station-1-panel,ste4ik/pulsar,Morvex885/pulsarnyakokitsu/yamnyakokitsu/yapkgsevennnoff/quasar-connect-botkrevetkqqq/lite-kitt.me/awesomehackalice.
Дисклеймер: материал описывает модификацию собственных устройств и не является инструкцией. Прошивка boot, подмена OTA и откат версий могут привести к необратимой поломке, потере гарантии и данных. Делайте это только на своих колонках и только понимая, что делаете.
См. также: eQuasar: ADB-доступ к Яндекс Станциям — разбор того самого способа с nginx, сертификатами и DNS-подменой.