adb root и почему он часто не работает:
Команда adb root перезапускает демон adbd на устройстве с правами root. Это не рутирование телефона, это переключение режима уже работающего демона.
Код: Выделить всё
adb root
restarting adbd as root
Код: Выделить всё
adb unroot
restarting adbd as unrooted
Код: Выделить всё
adb shell getprop ro.debuggable
1
Код: Выделить всё
adb root
adbd cannot run as root in production builds
Ещё одна частая ошибка: adb root есть, а запись в /system всё равно запрещена. Раздел смонтирован read-only. На userdebug помогает remount:
Код: Выделить всё
adb root
adb remount
remount succeeded
Код: Выделить всё
adb disable-verity
adb reboot
su из shell на боевом устройстве:
На розничном телефоне путь другой. Устройство рутируется заранее (обычно патчем boot.img через Magisk), а потом в shell вызывается su.
Код: Выделить всё
adb shell
star2lte:/ $ su
star2lte:/ #
Код: Выделить всё
adb shell su -c id
uid=0(root) gid=0(root) groups=0(root) context=u:r:magisk:s0
Magisk (автор topjohnwu, сейчас поддерживается сообществом, актуальные релизы серии v27+) это systemless-root. Он не пишет в /system, а патчит ramdisk внутри boot-образа, root живёт поверх системы через оверлеи. Отсюда плюсы: проще ставить и снимать, штатные OTA реальнее пережить, есть модули, есть DenyList для сокрытия root от выбранных приложений (банки, госуслуги, антифрод). Бинарь su у Magisk лежит не в /system, а предоставляется демоном magiskd.
SuperSU (автор Chainfire) это старая система-зависимая схема, su прописывался в /system. Проект заброшен примерно с 2017 года, под Android 10+ с system-as-root и динамическими разделами он толком не живёт. На новых устройствах его не используют, рассматривайте только как историю. Для всего, что новее Android 9, ставьте Magisk.
Модификация системных файлов:
build.prop лежит в /system/build.prop. Прямое редактирование на современном Android (14/15) проблемно: раздел read-only, плюс AVB/dm-verity проверяет хэш, изменённый файл уронит загрузку. Поэтому свойства меняют в рантайме через resetprop из Magisk, без правки файла:
Код: Выделить всё
adb shell su -c "resetprop ro.product.model Pixel_8_Pro"
Код: Выделить всё
adb root
adb remount
adb shell
emulator:/ # vi /system/build.prop
Код: Выделить всё
adb shell cat /system/etc/hosts
127.0.0.1 localhost
::1 ip6-localhost
0.0.0.0 ads.example.com
Код: Выделить всё
adb shell pm uninstall -k --user 0 com.vendor.bloatware
Success
Код: Выделить всё
adb shell su -c "pm disable-user --user 0 com.vendor.bloatware"
Проверить текущий режим:
Код: Выделить всё
adb shell getenforce
Enforcing
Код: Выделить всё
adb shell su -c "setenforce 0"
Контексты безопасности. У файлов они видны через ls -Z, у процессов через ps -Z:
Код: Выделить всё
adb shell su -c "ls -Z /system/bin/sh"
u:object_r:shell_exec:s0 /system/bin/sh
Код: Выделить всё
adb shell su -c "dmesg | grep 'avc: denied'"
Код: Выделить всё
adb shell su -c "chcon u:object_r:system_file:s0 /system/etc/myfile"
Кратко по граблям. adb disable-verity и патч системы ломают штатные OTA, готовьтесь обновляться вручную. Запись в /system на boot-критичные файлы при включённой verity это кирпич, на новых устройствах Fastboot и заводская прошивка через Odin/fastboot ваш единственный путь назад. Root отключает часть гарантий безопасности: банковские приложения через Play Integrity увидят рут и откажут (отсюда DenyList в Magisk). Никогда не давайте su незнакомым приложениям через диалог Magisk, это полный контроль над устройством. Разблокировка загрузчика на большинстве телефонов делает wipe всех данных, бэкап делайте заранее (глава 18). И самое практичное: setenforce 0 на постоянку оставлять нельзя, это снимает изоляцию приложений целиком.