Entware на нерутованном андроид-устройстве

kaztost
Сообщения: 41
Зарегистрирован: 16 июл 2017, 23:29

Сообщение kaztost » 08 окт 2017, 04:04

Ну начну с того, что установка самого Entware без рут-прав невозможна. Имеются два пути решения:

1) Сборка Entware с префиксом /data/data/my.entware и создание андроид-приложения с именем пакета my.entware. Что-то наподобие этого реализовано в проекте Termux.

2) Установка Entware через запущенный при включении скрипт. Для этого необязательно иметь рут, достаточно иметь возможность менять загрузочный раздел (boot). При этом в сама андроид-система остается "нерутованной", и будет проходить все возможные проверки безопасности, встроенные в различные финансовые приложения. Предполагаю ниже, что на устройстве активен SELinux, так как если его нет, то все гораздо проще. Мне понадобятся два инструмента: sepolicy-inject и sukernel (его можно найти внутри архива здесь ). Выбор этих инструментов обусловлен тем, что они уже собраны для различных архитектур, что позволяет их запускать на любом андроид-устройстве. Первый инструмент, sepolicy-inject, собранный статично, предназначен для добавления правил SELinux. Второй, sukernel, позволяет разобрать и собрать boot и находящийся внутри него рамдиск, он требует андроидных библиотек, так что на десктопном линуксе не пойдет, но в сети полно линуксовых аналогов,(например этот).
У меня самого андроид-устройств больше, чем обычных линуксных десктопов, поэтому такой и выбор. Кроме того, sukernel надежнее и универсальнее - он используется при рутовании через SuperSU многих устройств.
Итак снимаем с устройства или берем из прошивки образ загрузочного раздела boot_orig.img и начинаем колдовать:

Код: Выделить всё

sukernel --bootimg-extract-ramdisk boot_orig.img ramdisk.cpio.gz # отделяем рамдиск, ядро не трогаем
sukernel --ungzip ramdisk.cpio.gz ramdisk.cpio # разархивируем
sukernel --cpio-ls-l ramdisk.cpio # стоит посмотреть, что в рамдиске внутри, какие разрешения
sukernel --cpio-extract ramdisk.cpio init.rc init.rc # извлекаем init.rc с запускаемыми системой сервисами
sukernel --cpio-extract ramdisk.cpio sepolicy sepolicy # извлекаем политику SELinux
#добавляем новый сервис от SELinux контекста entware:
echo "service entware /system/bin/sh /entware.sh" >> init.rc
echo "class main" >> init.rc
echo "oneshot" >> init.rc
echo "seclabel u:r:entware:s0" >> init.rc
# Пишем скриптик для нашего сервиса. 
# Отмечу, что раздел /sdcard может быть не готов на некоторых устройствах, если выставить интервал ранее минуты после запуска,
# но по возможности интервал лучше снизить:
echo "( sleep 60; sh /sdcard/entware-dropbear/install.sh ) &" > entware.sh
#Начинаем патчить политику SELInux:
#Добавляем пермиссив контекст entware:
sepolicy-inject -Z entware -P sepolicy
#Разрешаем контексту init-у "превращаться" в entware
sepolicy-inject -s init -t entware -c process -p transition,rlimitinh,siginh,noatsecure -P sepolicy
#Удаляем из рамдиска старые файлы
sukernel --cpio-rm ramdisk.cpio ramdisk.cpio init.rc
sukernel --cpio-rm ramdisk.cpio ramdisk.cpio sepolicy
#Кладем новые файлы с тем же разрешениями, что и были
sukernel --cpio-add ramdisk.cpio ramdisk.cpio 750 init.rc init.rc
sukernel --cpio-add ramdisk.cpio ramdisk.cpio 644 sepolicy sepolicy
#Кладем наш скриптик
sukernel --cpio-add ramdisk.cpio ramdisk.cpio 600 entware.sh entware.sh
#Сжимаем cpio-архив и помещаем в новый boot-образ
sukernel --gzip ramdisk.cpio ramdisk.cpio.gz
sukernel --bootimg-replace-ramdisk boot_orig.img ramdisk.cpio.gz boot_new.img

Ну теперь дело осталось за малым:
- Взять apk_установщик, раскрыть его как zip, распаковать содержимое в /sdcard/entware-dropbear (папки res, assets и META-INF можно не брать). Архив entware.zip, который там внутри, распаковать наружу в /sdcard/entware-dropbear.
- Прошить новый boot_new.img (хорошо, если кастомное рекавери уживается со стоковой безрутовой прошивкой).
- Перегрузится, дождаться установки и изменить скрипт /sdcard/entware-dropbear/install.sh (не будем же мы при каждой загрузке устанавливать, уже достаточно монтировать /opt и запустить, что нужно).

Ну и наконец, нужно отметить, что все делается НА СВОЙ СТРАХ И РИСК, ответственности не несу. Если что не так - прошиваем boot_orig.img обратно.

Вернуться в «Entware на Android»

Кто сейчас на конференции

Всего 1 посетитель :: 1 зарегистрированный, 0 скрытых и 0 гостей (основано на активности пользователей за последние 5 минут)
Больше всего посетителей (121) здесь было 18 май 2016, 18:19

Сейчас этот форум просматривают: CommonCrawl [Bot] и 0 гостей