Песочница Харрисона
Публикации Теги О нас
В большинстве случаев для получения root-прав на Android-устройстве вы будете использовать такой инструмент, как
Magisk . Однако могут быть случаи, когда Magisk не работает или не идеален. Например, на IoT или встроенных
устройствах, у которых нет традиционного интерфейса Android.
В этих случаях проще всего взаимодействовать с устройством через adb. Хотя чаще всего adb запускается от имени
пользователя оболочки с более низкими привилегиями, и эта adb rootкоманда не позволяет вам повышать разрешения.
Он просто возвращает adbd cannot run as root in production buildsошибку.
Если вы поищете в Интернете, вы найдете различные советы, в которых вам предлагается добавить
ro.debuggable=1параметр в default.propфайл, который должен сообщить adbd, что ему разрешено запускаться от
имени пользователя root. Это может сработать, но если это не так, вероятно, потому, что используемая вами версия
Android не была скомпилирована с этим ALLOW_ADBD_ROOTфлагом, а код adbd не настроен для проверки этого
ro.debuggableпараметра.
К счастью, не вся надежда потеряна. Если все остальное не помогло, и у вас есть возможность загрузить новый
загрузочный раздел на устройство, вы сможете исправить двоичный файл adbd для запуска от имени пользователя root.
Независимо от того, как настроена остальная система.
У Кристиана Вайске есть отличный пост, который познакомил меня с этой концепцией. В моем случае мне просто
пришлось внести несколько изменений, поскольку версия adbd, которая у меня была, была «более новой» (Nougat), и я
использовал другой метод для изменения образа загрузки.
Бинарный файл adbd находится в sbinкаталоге загрузочного образа. Самый простой метод, который я нашел для
извлечения и изменения загрузочного образа, - это инструмент magiskboot . Вы можете найти его в zip-архиве последней
https://harrisonsand.com/posts/patching-adb-root/ 1/3
6/19/2021 Патч демона adb для запуска от имени пользователя root | Песочница Харрисона
версии Magisk . Примечание: вам может потребоваться прокрутить вниз, чтобы найти последний выпуск Magisk, его
нет в выпусках менеджера.
Загрузите копию Ghidra 🐉, создайте новый проект и импортируйте только что извлеченный двоичный файл adbd. Дайте
минуту или две, чтобы проанализировать весь код. (если вам нужна Java, попробуйте Amazon Corretto или
AdoptOpenJDK )
Мне было намного проще понять, на что я смотрю, одновременно читая исходный код Android . Как указывает Кристиан
в своем сообщении, проще всего искать Local port disabledстроку или 0x7d0, которая является идентификатором
пользователя оболочки в шестнадцатеричном формате. Это должно привести вас к той части кода, где adbd
переключается с пользователя root на пользователя оболочки. Цель здесь - «закомментировать» этот код, чтобы
программа никогда не перестала работать от имени пользователя root.
if (should_drop_privileges()) {
drop_capabilities_bounding_set_if_needed();
minijail_change_gid(jail.get(), AID_SHELL);
minijail_change_uid(jail.get(), AID_SHELL);
minijail_enter(jail.get());
По сути, мы хотим удалить вызовы minijail_change_gidи minijail_change_uid. Это можно сделать, заменив байты
серией команд NOP / no operation ( 00 BF).
Hydra не очень хорошо справляется с непосредственным изменением двоичных файлов ARM, но общий
шестнадцатеричный редактор должен помочь. Я использовал HxD .
https://harrisonsand.com/posts/patching-adb-root/ 2/3
6/19/2021 Патч демона adb для запуска от имени пользователя root | Песочница Харрисона
Вы можете использовать magiskboot, чтобы пропатчить ваш ramdisk и упаковать новый загрузочный образ. Команда
repack должна создать new-boot.imgфайл, который вы можете загрузить обратно на свое Android-устройство.
Удачного взлома 😊
iot
https://harrisonsand.com/posts/patching-adb-root/ 3/3