Кодерская мастерская
137 subscribers
1 photo
14 files
39 links
Блог Данила Пылаева
Download Telegram
Взломал сам себя, ну почти

Имеется значит следующий сетап: мини пк с Home assistant, маршрутизатор и провайдер, дающий серый ip за натом.

Также имеется два сервера с разумеется белыми ip, один из которых в москве.

Из мини пк выходят 2 реверс-туннеля, первый идёт на сервер, который в москве, там для него настроен nginx с блэкджеком и сертификатами, выходит туннель в виртуалку, в которой стоит home assistant.
Этот туннель нужен, чтобы yandex мог как можно быстрее передать команду в home assistant, т.е. чтобы цепочка Алиса -> сервер yandex в москве -> home assistant -> целевое устройство, отрабатывала с минимальными задержками.
Второй реверс-туннель уходит на сервер НЕ в москве, он смотрит на порт ssh хост-системы, т.е. позволяет получать удалённый доступ к машине за натом.

Так вот вчера выяснилось, что Алиса перестала управлять устройствами, небольшое расследование привело к реверс-туннелю в Москву, который перестал подниматься.
А перестал подниматься он потому, что, по какой-то причине, изменились ключи sshd на сервере, который, кстати, мне не принадлежит, мне просто там выделен юзер для туннеля, по дружбе так сказать.
Владелец сервера сказал, что херегознает почему там эти ключи сменились, и что просто надо их дропнуть и зааксептить новые.

Ну полез я в файл known_hosts, а там что-то то ли зашифрованное, то ли закодированное, в общем нельзя так с ходу понять, какая строка за какой хост отвечает.
И что же я сделал? Правильно, rm .ssh/known_hosts, т.е. удалил файл со всеми когда либо встреченными хостами.
Потом сходил по ssh на Московский сервер, принял ключ сервера, убедился, что туннель поднялся и забыл об этой истории.
Прошло около 20 часов, в том числе прошло и 5 часов утра, когда провайдер забрал у меня дефицитный ip и выдал мне новый, т.е. все открытые с внешним миром соединения были безвозвратно разорваны.

И после того, как это всё случилось, я попытался с какой-то целью попасть в мини пк, на что получил:
channel 0: open failed: connect failed: Connection refused
stdio forwarding failed
Connection closed by UNKNOWN port 65535

Что за херня?! Наверное надо просто нажать ещё раз... Но результат не изменился.
Пара минут попыток достучаться хоть куда-то наконец привела меня к следующему выводу: после удаления known_hosts я зааксептил ключ московского сервера, но забыл про другой сервер, через туннель к которому и ходил по ssh.
Туннель для ssh благополучно оставался открытым до смены ip, но после неё попытка реконнекта не удалась, т.к. ключа в known_hosts уже не было.

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

Вот есть у нас мини пк, из него торчит туннель, он приходит в nginx, а из него мы можем попасть в home assistant.
Home assistant стоит внутри qemu, и попадая внутрь, мы попадаем, по факту, в виртуалку, не на хост.
Виртуалка тоже сидит за собственным натом, но, в теории, если постучаться в шлюз, то можно достучаться как раз до хоста, если оно фаерволом не закрыто.
В home assistant установлен аддон для доступа к нему по ssh, вот только толку вроде от этого не очень много, ибо проклятый нат, причём двойной, а в каком-то смысле даже тройной (isp -> router -> vm).
Но изучив панельку аддона я выяснил, что у него имеется веб-интерфейс, т.е. можно получить доступ в виртуалку через веб.
На самом деле не в виртуалку, а в докер-контейнер, но это не сильно важно для моего мува.
И так открыл я этот web ui, разумеется нифига не доступно, но с windows ocr что-то понять можно.
Постучался на ssh по адресу шлюза и о чудо, оно живое! Оно мне ответило!
А дальше всё просто и вполне секьюрно (нет). Вставить из буфера обмена туда не получилось, поэтому раздал приватный ключ на весь интернет, скачал его курлом в вм, зашёл по ssh в хост, зашёл по ssh в туннель, зааксептил хост и туннель восстановился.

Во всей этой истории меня слегка волнует только тот факт, что у qemu-машины по-дефолту есть доступ в хост, конечно виртуалка и sandbox - не одно и тоже, но всё же... В общем надо будет прикрыть это дело.
Кодерская мастерская
Дело было в августе, мучал свою клавиатуру и кое-какой софт, в попытках изобрести мониторинг уровня заряда батареи, ибо они разряжаются, как правило, в самый неподходящий момент. Колупался с этим 3 дня и уже почти бросил, разок намертво повесил донгл клавиатуры…
А толку то в итоге не очень много, сели аккумы посреди катки в Ball bouncer, кое-как вырулил.
Но с другой стороны, на осознание проблемы ушло гораздо меньше времени, чем если бы я не знал о низком заряде, так что польза какая-то определённо есть.
Сегодня мне приснилось, что я нашёл где-то палёные сосиски с неприятным привкусом, и для его исправления в них нужно было загрузить 200 килобайтную прошивку с помощью программатора.
Программатор представлял собой круглую штуку, похожую на таблетку, размером примерно с CR2032, я заказал его с алика за 1300 рубасов, залил прошивку по nfc.
Далее программатор закидывается в кастрюлю с варящимися сосисками, после завершения готовки оттуда извлекается и может быть переиспользован.
Всем спасибо за внимание.
👍3🔥2
dev-версия аддона Volume Manager теперь в магазине дополнений!
Желающие могут потестировать на свой страх и риск, документации пока нет, на данный момент возможности такие.
nvda+shift+v, вкл / выкл оверлея.

В оверлее следующие возможности:
Стрелки влево / вправо: перемещение по звуковым сессиям / устройствам ввода вывода.
Т.е. master volume теперь output device, и добавлен input device (микрофон).
m: заглушение выбранной сессии, например браузера, или устройства, то есть микрофона или динамиков / наушников.
Стрелки вверх / вниз: добавить / убавить 1 процент громкости.
page up / page down: добавить / убавить 5 процентов громкости.
home / end: 100 / 0 процентов громкости.
Цифры от 1 до 9: установка от 10 до 90% громкости соответственно.
0: установка 100% громкости.
ctrl+up / ctrl+down: переключение доступных для смены устройств.
ctrl+right: установка выбранного устройства как устройства по умолчанию.
Для устройств ввода / вывода этот функционал должен работать с windows 8, для других сессий - с той версии windows, в которой эту фичу завезли. Если не ошибаюсь, это случилось в версии windows 10 1803.
d: переключить тип изменяемых устройств input / output.
Т.е. если нужно поменять микрофон у chrome, находим left / right chrome.exe, потом d, чтобы переключиться на input devices, затем ctrl+up / ctrl+down находим нужный микрофон и ctrl+right применяем.
Диалог, открываемый по пробелу удалён за ненадобностью, если вы считаете, что он нужен, то открывайте issue на github, или пишите сюда в комменты, обсудим.
А вот не будет заголовка у поста, и объяснения не будет. Сами догадайтесь, что не так. Такая вот субботняя загадка.
Welcome to Ubuntu 24.04.1 LTS (GNU/Linux 6.8.0-1021-aws x86_64)

* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/pro

System information as of Sat Jan 18 16:39:45 UTC 2025

System load: 0.15 Temperature: -273.1 C
Usage of /: 53.4% of 57.97GB Processes: 129
Memory usage: 58% Users logged in: 0
Swap usage: 42% IPv4 address for ens5: 172.21.66.17

* Ubuntu Pro delivers the most comprehensive open source security and
compliance features.

https://ubuntu.com/aws/pro

Expanded Security Maintenance for Applications is not enabled.

12 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status


Last login: Sat Jan 18 16:34:35 2025 from x.x.x.x
user@host:~$
Кодерская мастерская
aidaMenu-0.0.1.nvda-addon
Запоздалое дополнение к посту с дополнением Aida Menu.
Вот я задействовал Be my ai, логику и научный тык одновременно, потратил около получаса своего времени, написал замечательный аддон, чтобы воспользоваться им полтора раза, и вроде круто, да? Ведь ну я не пользуюсь, а кто-то другой может пользуется.
Правда есть один нюанс, я узнал о нём через пару недель после создания аддона, но как-то позабыл и пишу вот только сейчас.
Так вот: это самое замечательное меню с настройками и тестами, оказывается, можно открыть из иконки аиды в трее. Да, она там неожиданно есть, сам случайно выяснил.
Это конечно чуть дольше, чем открывать менюшку прямо из окна, но если бы я знал об этом изначально, аддона, очевидно, не было бы.
Также потихоньку начал закидывать дополнения в магаз, ставьте реакцию палец вверх, если хотите видеть aida menu там.
👍2
Обновляем git for windows

Сегодня я совершенно неожиданно узнал, что git for windows умеет обновлять сам себя!
Открываем ваш любимый shell, пишем git update-git-for-windows, и всё. Вообще всё, после этого нужно просто дать согласие на обновление, и оно скачается и установится.
И не то чтобы его надо было часто обновлять, как правило я его ставлю сразу после установки винды, и ничего с ним не происходит до следующей переустановке, однако само наличие фичи оказалось для меня неожиданным.
Кодерская мастерская
Обновляем git for windows Сегодня я совершенно неожиданно узнал, что git for windows умеет обновлять сам себя! Открываем ваш любимый shell, пишем git update-git-for-windows, и всё. Вообще всё, после этого нужно просто дать согласие на обновление, и оно скачается…
Очень важное дополнение к предыдущему посту!
При обновлении git for windows описанным способом он затирает глобальный конфиг! Не наступите на мои грабли!
И в рот я наоборот такие апдейты вертел, так вам скажу. Я понятия не имею, что было в этом конфиге, ну то есть editor там был прописан, но скорее всего что-то ещё, и бэкапа у меня нет, я даже и не подумал эту директорию в бэкап включать, ибо туда никто кроме меня не залезет, ага-ага.
Windows 11 альцгеймер edition

Недели 3 назад до меня наконец докатилось обновление 24h2. С некоторых пор я специально ничего не обновляю если нет необходимости, т.е. жду, пока само поставится.
Так вот начало ставиться, скачало 6 процентов, и вдруг...
"Невозможно скачать и установить это обновление, так как оно еще не готово для вашего устройства."

Ну ладно, подожду, и даже смирюсь с тем, что на диске c остался какиш на 3.5 гб, специально не буду трогать, пусть он сам решает как с ним быть.
И вот сегодня обновление наконец докатилось полностью! Подумал я.
Ну вроде вот оно снова качается, 4 процента, 6, ух ты! 8 процентов, пожалуй в этот раз всё и правда по-настоящему.
Но не успел я даже закончить эту мысль, как: "Невозможно скачать и установить это обновление, так как оно еще не готово для вашего устройства.".
Интересно, сколько циклов мне предстоит пройти. Выглядит конечно как какой-то локальный баг, ибо проц 12 поколения всё же, под него поддержка должна быть безусловно, и сильно сомневаюсь, что сообщение об ошибке правдиво.
🤔2
Зачем нужны ide / редакторы кода?
Чтобы вместо написания кода полтора часа потратить на настройку очередной фичи или починку очередного сломавшегося функционала.
Сегодня в какой-то момент перестало работать циклическое переключение по областям интерфейса с помощью f6, у меня ушло 30 минут на то, чтобы выяснить причину.
Причина в следующем, в какой-то момент, в secondary sidebar-е появляется предложение заюзать копилот, и при нажатии f6 в редакторе кода или shift+f6 в статус баре фокус по-хорошему должен упасть туда, но почему-то не может! И в итоге просто никуда не перемещается. Ну и на первый взгляд нет никакого очевидного способа скрыть эту плашку, кроме как скрыть весь сайдбар, ибо вроде он не сильно нужен.

#IDEНаОе
Кажется, мне стоит высказать свою точку зрения на некоторые виды нестандартного творчества.
В предыдущем посте я поделился с вами интересным, на мой взгляд, роликом. Изначально я увидел его в одном из тг-каналов, ради интереса заглянул в комменты, и неожиданно прочитал много негатива.
Все такие комментарии примерно об одном: получилось хреново, можно было и лучше, автору совсем нечего делать и тому подобное.
А ещё, кстати, сегодня заметил, что под моим постом про говновоза кто-то поставил палец вниз, что тоже является проявлением негативной реакции.
И вдруг до меня дошло, что не для всех может быть очевидна та составляющая, которая вызывает восхищение в подобного рода творениях.
Давайте приведу пару примеров:
Однажды мне встретился ролик, в котором блогер сделал хранилище данных из... ковид-тестов, просто потому что почему бы и нет.
Вот это видео (на английском), на самом деле с тестами у него ничего не вышло, но там есть много интересного, например файловая система на icmp-пакетах: https://youtu.be/JcJSW7Rprio
Или, допустим, пару лет назад я развлекался с языком программирования звуковых игр bgt, пытаясь заставить работать его с программой для голосового общения TeamTalk, причём, на моё удивление, вполне успешно.
Так вот у кого-то может возникнуть вопрос: а в чём же смысл такого рода поделий, какую пользу они приносят, зачем оно надо вообще?
Файловая система на пингах очень медленная, рано или поздно теряет данные, информация не переживает потерю питания или интернета, то есть она не имеет практической ценности.
Тоже можно сказать и о программе стриминга в teamtalk на bgt, она не имеет интерфейса, функционал максимально ограничен, а код невероятно ужасен.
А объединяет все эти продукты разума следующее: всё это сделано с применением глубоких знаний и/или сложных технологий, потребовало приличного количества времени и погружения в тему, и в результате вышло нечто впечатляющее, даже если таковым не кажется для обывателя.
И обывателя можно понять, если человек не представляет, как компьютер хранит данные, в каком порядке исполняется софт, и что такое вообще выполнение программного кода (а это между прочем процесс достаточно абстрактный), то ему просто невозможно объяснить, в чём прикол скрипта на bgt, который вообще-то не должен создавать в оперативной памяти структуру данных и передавать указатель на неё в библиотечную функцию, но как-то всё же создаёт и передаёт.
Точно также если человек не шарит в теме нейронных сетей и не осознаёт их возможностей и ограничений, он не сможет понять прикола очередного сто-пятисотого кавера говновоза и его уникальности.
Пока писал эти строки я пришёл к мысли, что, вероятно, в мире абстрактной живописи происходит что-то похожее, какую-то размазьню на аукционах продают за миллионы долларов, но может быть для знатоков визуальных абстракций эта размазня тоже самое, что и музыкальная установка из 512 флоппи-дисководов для инженеров, программистов и звукорежиссёров, которые мыслят достаточно глубоко и понимают всю сложность проделанной работы и грандиозность получившейся системы.
Например трек из предыдущего поста у меня вызвал восхищение, потому что работа, проделанная для его создания, невероятна, человек нарезал более 300 фильмов (если это конечно правда) на отдельные слова, возможно какие-то из них почистил нейронкой от шумов, собрал их все в нужном порядке, а потом смантировал так, чтобы не сбился ритм!
То есть да, звучит отстойно конечно, какие-то рандомные фразы положены на музыку, интонации не в тему, да и вообще дичь же какая-то, вот только смысл совсем не в этом.
Кавер же на говновоза... во-первых он достаточно качественно получился сам по себе, а сервисы по типу суно, как правило, не выдают такой чистый результат с первого раза. И с пятого тоже, и с десятого могут не выдать. Ну а во-вторых не умеют языковые модели так чисто текст изобретать, особенно на русском, а значит что автор довольно складные стихи про какиш написал, что тоже заслуживает внимания.
В общем не весь, на наш взгляд, мусор и бред является таковым, возможно мы просто недостаточно хорошо разбираемся в теме.
🔥2👍1
Пока на дворе 2025 год, sourceforge продолжает оставаться где-то в девяностых.

":3,2 КБ/с – 63,8 КБ из 2,9 ГБ, Осталось 11 дней"

PS:
Там конечно можно выбрать зеркало и скачать в пару сотен раз быстрее, сейчас попробую это сделать, но почему блин автоселект такой плохой?..
Кодерская мастерская
Пока на дворе 2025 год, sourceforge продолжает оставаться где-то в девяностых. ":3,2 КБ/с – 63,8 КБ из 2,9 ГБ, Осталось 11 дней" PS: Там конечно можно выбрать зеркало и скачать в пару сотен раз быстрее, сейчас попробую это сделать, но почему блин автоселект…
Промежуточное решение для скачивания с sourceforge

Начинаем что-то качать, видим низкую скорость. Копируем ссылку, по которой качается файл, и получаем что-то вроде:
https://altushost-swe.dl.sourceforge.net/project/crdroid/peridot/11.x/recovery/recovery.img?viasf=1

Как я понял, поддомен перед dl - это зеркало sf, заменяем его на master (т.е. вместо всего, что до первой точки, пишем master), переходим по получившейся ссылке, и качаем быстрее, а может и нет, тут как повезёт.
Решение промежуточное, потому что фиг его знает где найти список доменов зеркал, но в моём случае и с master скорость неплохая.
Параметр viasf=1, кстати, обязателен, без него вместо скачивания происходит редирект.
Планирую пару больших постов-гайдов, состоящих из многих этапов, как лучше выкладывать?
Anonymous Poll
74%
Несколькими сообщениями подряд, всё и сразу!
26%
По одной небольшой части, на протяжении нескольких дней / недель
Кодерская мастерская
Запоздалое дополнение к посту с дополнением Aida Menu. Вот я задействовал Be my ai, логику и научный тык одновременно, потратил около получаса своего времени, написал замечательный аддон, чтобы воспользоваться им полтора раза, и вроде круто, да? Ведь ну я…
Судя по вашим реакциям кто-то хотел видеть aida menu в аддон-сторе, так что теперь он там.
Процесс приёма, кстати, занял две недели! Отвратительнейший экспириенс, так вам скажу. Хотя мейнтейнеру, по сути, надо отсмотреть пару строк текста и нажать одну кнопку.
Не ленитесь писать разработчикам

Много лет я использую Tasker, это android-приложение для создания различных автоматизаций.
В приложении этом были некоторые проблемы доступности, но не настолько критичные, чтобы они мне мешали.
Однако пару версий назад разработчик выпустил бета-версию нового интерфейса, который пока не включен по умолчанию, но когда я его включил, то увидел достаточно много проблем доступности.
И тогда, имея негативный опыт коммуникации с некоторыми разработчиками и сообществами, я, тем не менее, решил написать автору приложения. Я описал несколько проблем, предложил помощь в бета-тестировании и тому подобное.
Заодно я также описал и те проблемы, которые были в классическом интерфейсе, и на моё удивление разработчик ответил достаточно быстро, и, самое главное, добавил предложенные фичи!
Причём не просто добавил, а даже записал демку!
Новый ui разработчик исправлять не стал, так как он пока сырой, будет переделываться и модернизироваться, но пообещал, что обязательно учтёт нюансы доступности, когда интерфейс станет более-менее стабильным.
Но на новый ui, на самом деле, будто бы и пофиг, главное, что он добавил фишечки в старый! И теперь работать с ним стало комфортнее, а разработчику это почти ничего не стоило.
Поэтому, моё мнение следующее: не ленитесь писать разработчикам о проблемах, особенно разработчикам мелких продуктов. Да, всегда есть шанс потратить своё время впустую на написание сообщений / писем, и никогда не получить ответа, но довольно часто они как минимум дают обратную связь, а порой ещё и вносят правки, или добавляют фичи.
Вот кстати демка, можно поржать с того, как чел не умеет использовать talkback 🙂
https://youtube.com/shorts/bf1A9QX1dLo
👍1🔥1
Включаем adb на любой кастомной прошивке

Данный пост будет интересен тем, кто любит играться с прошивками android-смартфонов, и порой сталкивается с проблемой запуска скринридера при первоначальной настройке, или хочет иметь возможность подключения через adb для любых других действий с прошивкой сразу из коробки.
Никакого кликбейта кстати, adb появляется сразу, при первом старте прошивки.
Ниже изложенный гайд, к сожалению, сыроват, тестировался мной один раз на одном устройстве, и у вас разумеется что-то может не взлететь, но основной принцип я изложу, а дальше, при желании, вы сами сможете докрутить под свою задачу.
Сразу предупреждаю, что гайд подразумевает наличие неких знаний, например об основных принципах работы телефона и его загрузки, о смысле наличия рут-прав и т.п.
Иначе говоря, гайд рассчитан на тех, кто уже немного успел поковыряться с прошивками android-устройств и что-то в этом понимает. В любом случае вы всегда можете задавать вопросы в комментариях, поехали уже наконец.

Начну немного издалека: когда-то, очень много лет назад, телефоны поставлялись с обычной флеш-памятью, размеченной на обычные разделы, в которых вот так прям сразу лежала система.
Система, лежащая в разделе system, конечно была доступна только для чтения, но при наличии рут-прав можно было сделать что-то вроде mount -o rw,remount /, и системный раздел можно было модифицировать прямо на горячую.
В команде выше / сработает на девайсах, где системный раздел монтируется как корневой (system-as-root), у меня был именно такой телефон, насколько мне известно, сейчас так делают все производители прошивок, как стоков, так и кастомов.
На ещё более ранних моделях, которых я в руках не держал, система монтируется в /system, и там перемонтировать нужно именно его, но это сейчас не столь важно.

Более того, при наличии кастомного recovery, например twrp, можно было загрузиться в него, смонтировать систему на запись, и произвести там необходимые манипуляции.
Так вот на подобных устройствах, где ещё не завезли super partition, и все разделы лежат наверху, работает следующая штука:
1. Шьём прошивку, вероятнее всего через twrp.
2. Включаем телефон, даём системе инициализироваться, если там нету скринридера, можно потыкать кнопку питания, вероятнее всего телефон будет блямкать звуком выключения экрана, и это будет значить, что первоначальная распаковка случилась, и раздел data инициализировался.
3. Снова загружаемся в twrp.
4. Ждём пока расшифруется раздел data, монтируем систему на запись.
5. Редактируем build.prop, прописывая туда некие строки для включения adb.
6. Подкладываем ключ от adb в раздел data.
7. Грузимся в прошивку, и телефон поднимает авторизованный adb!

Для описанного в шагах 5 и 6 я когда-то написал такой батник:
adb shell mount -o rw /system_root
adb shell sed -i '$ a\persist.service.adb.enable=1' /system_root/system/build.prop
adb shell sed -i '$ a\persist.service.debuggable=1' /system_root/system/build.prop
adb shell sed -i '$ a\persist.sys.usb.config=mtp,adb' /system_root/system/build.prop
adb push %userprofile%\.android\adbkey.pub /data/misc/adb/adb_keys


Этот код монтирует системный раздел, дописывает в build.prop параметры для включения отладки, и подкладывает публичный ключ adb-демона, чтобы adbd на телефоне не требовал авторизацию компьютера при подключении.
Очевидно, что ключ должен быть создан демоном перед данной процедурой, для этого достаточно хотя бы раз воспользоваться adb, или запустить демона командой adb start-server.
Способ работает на относительно старых телефонах без раздела super, но с некоторыми нюансами:
1. Это возможно, если для телефона имеется полноценное управляемое через adb recovery, по типу twrp.
2. Ключ получится подложить только в том случае, если рекавери умеет расшифровывать дата-раздел, с чем частенько бывают проблемы, ну или если в прошивке отключено шифрование.

UPD 2026-05-31, на самом деле батник для копирования ключей написал Бека (gozaltech), забыл упомянуть при написании, исправляюсь.
👍1
Кодерская мастерская
Включаем adb на любой кастомной прошивке Данный пост будет интересен тем, кто любит играться с прошивками android-смартфонов, и порой сталкивается с проблемой запуска скринридера при первоначальной настройке, или хочет иметь возможность подключения через…
Время шло, инженеры придумали раздел super, придумали новые способы шифрования и разметки, и на новых телефонах способ больше не работает.
Во-первых, система теперь лежит в логическом разделе внутри раздела super. И штука то вроде хорошая, она позволяет производителю более гибко обновлять прошивку, но часто там используется специальная файловая система EROFS (Enhanced Read-Only File System).
Как следует из названия, данная файловая система не подразумевает модификацию после создания, и перемонтировать что-то так просто уже не получится.
В кастомных прошивках, как я понял, используется ext4 внутри super-разделов, и их менять можно, но мне, например, это никак не помогло.
Я имею на руках телефон Poco f6, и то ли он достаточно свежий, то ли индусы обленились, но для этого телефона нет полноценного twrp.
Twrp для poco f6 не умеет монтировать подразделы внутри super на запись, не умеет не то что расшифровывать userdata, а даже монтировать его! Ну и, соответственно, не умеет ставить пакеты в систему.
Всё, что я смог там сделать, это установить magisk, и то он после загрузки в прошивку плевался и крыл рекавери трёхэтажным матом, отказываясь работать без правильной установки, которую, к счастью, он производит самостоятельно.
И так мы имеем комбо, прошивку можно поставить из рекавери, которое поставляется вместе с кастомом, но далее мы не можем модифицировать ни системный раздел, ни userdata.
Рекавери от прошивки, кстати, управляется с кнопок громкости и питания, что позволяет прошиться полностью вслепую, особенно если под рукой есть другой телефон.
С разделом super допустим можно заморочиться, его можно сначала выколупать из прошивки, потом распаковать, далее смонтировать system, внести изменения, заново собрать super и прошить через fastboot.
И, вероятнее всего, даже лазать в раздел userdata не обязательно, т.к., как я понял в build.prop можно прописать параметр, который заставит adbd принимать любой ключ, но я нашёл иной подход.
Подход базируется на возможностях magisk, который позволяет не только выдавать рут-права различным приложениям, но и запускать произвольные скрипты на различных этапах загрузки телефона.

Для начала немного теории:
При загрузке телефона выполняется много интересных этапов, например pbl, brom, abl и т.п., но я пропущу их, ибо во-первых сам плохо разбираюсь в теме, а во-вторых мы работаем на несколько уровней выше, и эта тема сейчас не важна.
Важно, что в какой-то момент у нас запускается ядро, которое что-то там поднимает, монтирует, читает конфиги, и в конечном итоге запускает самый первый, так называемый init-процесс.
init находится в небольшой файловой системе, так называемом ramdisk, который хранится в boot-разделе, и его легко можно прошить через fastboot.
То есть ядро читает и распаковывает в оперативку ramdisk, а затем запускает из него бинарник init.
init запускается с привилегиями root-пользователя, и начинает производить запуск всех остальных процессов, необходимых для работы android.
Разумеется большинство таких процессов запускаются уже без рут-прав, потому что они им не требуются, по крайней мере такова задумка разработчиков.
Если же мы, как пользователи ОС, хотим всё же рут-права получить, тогда и идут в дело инструменты по типу Magisk или kernel su.
Как же работает magisk?
magisk делает очень простую вещь, он патчит ramdisk, внедряется в бинарный файл init, или полностью подменяет его.
Когда ядро запускает init, magisk запускает исходный init, и система загружается как обычно, но также он намеренно оставляет лазейку, через которую преложения, не имеющие рута, могут поднять свои привилегии.
Magisk позволяет добавлять так называемые модули, которые патчат системные файлы, или запускают фоновые скрипты при загрузке устройства.
Однако модули устанавливаются в раздел userdata, поэтому в данном случае они бесполезны.
Но есть у magisk одна интересная фича, которой можно воспользоваться.
Как написал выше, magisk патчит ramdisk, который лежит в отдельном небольшом разделе, и в этот ramdisk можно подложить скрипты, которые будут запущены от рута!
Кодерская мастерская
Время шло, инженеры придумали раздел super, придумали новые способы шифрования и разметки, и на новых телефонах способ больше не работает. Во-первых, система теперь лежит в логическом разделе внутри раздела super. И штука то вроде хорошая, она позволяет производителю…
Скрипты могут выполнить произвольный код, и включить нам adb.

И так вот примерно как это можно сделать:
Для начала добываем раздел с рамдиском, ранее для загрузки использовался один раздел boot, который содержал и ядро, и ramdisk, в новых девайсах делают два раздела, boot содержит только ядро, а init_boot только ramdisk.
Такой подход позволяет разработчикам прошивок более гибко обновлять ядро и/или ramdisk, в чём проблема обновлять всё сразу я так и не понял, но им виднее.
То есть если в прошивке только boot, он и содержит ramdisk, а если есть init_boot, то рамдиск скорее всего там.
В моём случае всё было именно так, для вашего девайса / прошивки расклад может быть иным.

Разделы с файлами прошивки их авторами запаковываются во всякие интересные форматы, CRDroid на poco f6, например, содержит в себе файлик payload.bin.
Из такого файла разделы можно достать каким-нибудь распаковщиком, я пользовался otadump.
Он шустрый, написан на современном и популярном rust, ну и, собственно, решает поставленную задачу: достаёт разделы из payload.bin.
В доке написано, что прога работает напрямую с zip-файлами, но мне как-то не фартануло, поэтому я извлёк payload с помощью 7zip-а.
Последний релиз с exe-шником был выпущен 2 года назад, возможно zip будет хавать, если руками собрать из последнего коммита, но мне было лень этим заниматься.
Для распаковки выполняем что-то вроде:
otadump.exe -o . --partitions init_boot payload.bin


init_boot я таким способом конечно извлёк, а через пару недель вдруг выяснил, что для CRDroid он постовляется отдельно, и его можно было просто скачать, пропустив эти увлекательные этапы с поиском распаковщика под винду и извлечением раздела.

Далее нам нужно установить magisk manager на любой телефон, наличие рута и разблокированного загрузчика не обязательно, менеджер нам нужен только для патчинга файла.
Отдельного инструмента, который работал бы на винде или линуксе я не нашёл, есть бинарник, который постовляется вместе с magisk, но он написан на смеси rust с c++, и отделить его для сборки под другую платформу и использования вне рутированного устройства не самая тривиальная задача.
Поэтому самым простым способом является установка менеджера на любой android.
Это можно сделать, даже если у вас всего один телефон, правда у вас не будет права на ошибку, ведь когда вы всё сломаете, и причиной фейла станет неправильно пропатченный рамдиск, патчить заново будет уже нечем, но мне трудно представить сценарий, в котором бут может быть пропатчен неправильно.
Однако файл можно перепутать с другим файлом, перезаписать, потерять, случайно удалить и тп., так что будьте аккуратнее.

Закидываем init_boot.img на телефон с менеджером, запускаем его, жмём на установку, выбираем способ установки - патчинг файла.
Затем выбираем ранее скинутый образ, патчим его, и получаем новый патченный образ, кажется magisk кладёт его рядом с исходным.
Теперь мы можем прошить прошивку, через fastboot зашить init_boot, и получить рутированную систему, но нам нужно сделать немного больше.

Сейчас мы получили образ, который содержит подменённый бинарь init, а также некоторые другие файлы magisk-а.
Для того, чтобы подложить туда кастомные скрипты, образ нужно разобрать.
Я использовал image kitchen, это некий комбайн для модификации прошивок, чего-то более простого, для модификации только рамдисков, я не нашёл.
Точнее модифицировать рамдиски умеет бинарник, поставляемый вместе с magisk, как по мне делать это всё на телефоне через adb будто бы не очень удобно, но если вдруг захочется, то это возможно, и рут вероятно для этого не нужен.