Найти в Дзене
mamaich

Отключение рекламы на Яндекс Станции Макс через нижний разъем

По мотивам прошлой статьи. Пишу в основном тезисно и по памяти, так как устройство уже убрал.

Как обычно напомню, что всё что далее написано - делаете на свой страх и риск. Предварительно обязательно сделайте резервную копию всего содержимого EMMC (целиком! и не забывайте про "store disprotect key"), так как в случае ошибки можете окирпичить устройство и восстановить его можно будет только путем выпаивания EMMC и перепрошивки бэкапа программатором.

Как побочный эффект - кроме отключения рекламы вы получите ADB и root права на своем устройстве.

Отключение рекламы на Яндекс Станции Макс возможно только на тех устройствах, на которых работает установка сторонних приложений из файлового менеджера. Кроме того, необходимо спаять плату для нижнего разъема, позволяющую подключить USB флешку к Станции Max, например, как я описал во второй половине этой статьи.

Описанный далее способ работает в том числе и на устройствах с паролем на USB. Единственное, где он не будет работать - на устройствах, где Яндекс заблокировал запуск инсталлятора APK из сторонних приложений. Требуется именно установка APK файлов через файловый менеджер.

В первую очередь, включаем ADB.
Для этого требуется установить TvSettings.apk из старой прошивки, где Яндекс еще не прикрыл вызов DevelopmentActivity. К счастью,
ссылка на прошивку до сих пор жива. Необходимо распаковать содержимое system.new.dat.br, например, по инструкциям в ветке на 4pda, найти файл TvSettings.apk и установить его на Станции. После чего с помощью Activity Launcher запускаем Настройки / DevelopmentActivity:

-2

и там включаем отладку по USB.
В той версии Activity Launcher, которая стоит у меня, почему-то не видно какая строка выбрана, но выбрать нужные пункты не сложно и вслепую.

После этого берем с моего git архив yastmax_data_local_tmp.zip и распаковываем его в папку /data/local/tmp на устройстве. Требуется распаковать строго в эту папку, не создавая никаких подкаталогов (так как в скриптах и утилитах жестко прописан данный путь).

Далее готовим USB флешку с Armbian, по инструкции, которую я приводил ранее. После завершения подготовки флешки - распаковываем на её FAT раздел (единственный видимый в Windows раздел) архив yastmax_myinit.zip, также загруженный с моего git. Распаковываем в корневой каталог. Далее перезагружаем Станцию Макс подключившись к ней через adb shell и выполнив там команду "reboot update".

После загрузки в Armbian (напомню, что логин root, пароль 1234) требуется смонтировать раздел system устройства таким образом:

mkdir /system
mount -o offset=2254438400 /dev/mmcblk1 /system

Удостоверяемся, что раздел действительно смонтировался (там видны файлы init* и папки). Смещение я брал со своего устройства, возможно, на новых моделях с большим EMMC оно будет другим.

Далее копируем myinit-max (он был в архиве yastmax_myinit.zip) в /system, делаем его исполняемым и размонтируем флешку:

cp /boot/myinit-max /system
chmod 666 /system/myinit-max
umount /system

Следом записываем раздел misc:

dd bs=512 if=/boot/misc.img of=/dev/mmcblk1 seek=2662400

Если кому интересно, скриншот с командами, которые будут запускаться при следующей переагрузке:

проверено на моем устройстве, возможно на вашем потребуется внести какие-нибудь правки
проверено на моем устройстве, возможно на вашем потребуется внести какие-нибудь правки

То есть, тут отключается AVB и вместо процесса /init стартует /myinit-max. Исходные тексты myinit-max лежат в репозитории.

Далее - reboot, обязательно извлекаем флешку. Должны стартовать команды, записанные в разделе misc.

Утилита myinit-max при загрузке стартует старый /init, обманным путем заставляет его не включать SeLinux (подставляя через mount bind вместо /sys/fs/selinux/enabled обычный текстовый файл), запускает консоль на UART и скрипт /data/local/tmp/myscript-max.sh. Данный скрипт перезаписывает раздел misc.img, чтобы при следующей загрузке опять запустился /myinit-max вместо родного /init. Также myscript-max.sh монтирует образ myfs.ext4 в /odm, тем самым появляются утилиты sepolicy-inject (я им делают установку разрешающих правил SeLinux для ядра) и mysudo (аналог sudo для запуска команд от root, только работает в паре с myinit-max). Почему выбрано монтирование поверх раздела /odm? Потому что в стандартной переменной PATH прописан путь /odm/bin (которого на оригинальной файловой системе не существует), тем самым не требуется указывать полный путь до данных утилит.

Отключение рекламы производится утилитой tls_proxy, описанной мной ранее.

Напомню, что обязательно отключите установку обновлений прошивки:

rm -rf /data/data/com.yandex.launcher.updaterapp
touch /data/data/com.yandex.launcher.updaterapp
reboot