Вы находитесь на странице: 1из 3

6/19/2021 Патч демона adb для запуска от имени пользователя root | Песочница Харрисона

Песочница Харрисона
Публикации Теги О нас

Патч демона adb для запуска от имени root


Опубликовано 20 октября 2020 г.

В большинстве случаев для получения 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 из загрузочного образа


Я предполагаю, что вы уже нашли способ получить загрузочный образ. Этот процесс сильно зависит от набора
микросхем, поэтому вам может потребоваться немного погуглить.

Бинарный файл adbd находится в sbinкаталоге загрузочного образа. Самый простой метод, который я нашел для
извлечения и изменения загрузочного образа, - это инструмент magiskboot . Вы можете найти его в zip-архиве последней
https://harrisonsand.com/posts/patching-adb-root/ 1/3
6/19/2021 Патч демона adb для запуска от имени пользователя root | Песочница Харрисона

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

Извлечение загрузочного образа и ramdisk:

magiskboot unpack boot.img

magiskboot cpio ramdisk.cpio extract

Модификация двоичного файла

Загрузите копию Ghidra 🐉, создайте новый проект и импортируйте только что извлеченный двоичный файл adbd. Дайте
минуту или две, чтобы проанализировать весь код. (если вам нужна Java, попробуйте Amazon Corretto или
AdoptOpenJDK )

Мне было намного проще понять, на что я смотрю, одновременно читая исходный код Android . Как указывает Кристиан
в своем сообщении, проще всего искать Local port disabledстроку или 0x7d0, которая является идентификатором
пользователя оболочки в шестнадцатеричном формате. Это должно привести вас к той части кода, где adbd
переключается с пользователя root на пользователя оболочки. Цель здесь - «закомментировать» этот код, чтобы
программа никогда не перестала работать от имени пользователя root.

Ниже приведен исходный код, на который мы пытаемся настроить таргетинг в Ghidra.

// Don't run as root if running in secure mode.

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() will abort if any priv-dropping step fails.

minijail_enter(jail.get());

D("Local port disabled");

Дизассемблированный / декомпилированный код (имена функций переименованы для улучшения


читаемости)

По сути, мы хотим удалить вызовы minijail_change_gidи minijail_change_uid. Это можно сделать, заменив байты
серией команд NOP / no operation ( 00 BF).

Hydra не очень хорошо справляется с непосредственным изменением двоичных файлов ARM, но общий
шестнадцатеричный редактор должен помочь. Я использовал HxD .

Чтобы удалить вызов minijail_change_gid, найдите и замените следующую последовательность байтов:


4f f4 fa 61 2d f0 3e f9 <- target

00 BF 00 BF 00 BF 00 BF <- replaced with NOPs

Сделайте то же самое minijail_change_uidи сохраните исправленный двоичный файл.

Исправьте и загрузите новый загрузочный образ

https://harrisonsand.com/posts/patching-adb-root/ 2/3
6/19/2021 Патч демона adb для запуска от имени пользователя root | Песочница Харрисона

Вы можете использовать magiskboot, чтобы пропатчить ваш ramdisk и упаковать новый загрузочный образ. Команда
repack должна создать new-boot.imgфайл, который вы можете загрузить обратно на свое Android-устройство.

magiskboot cpio ramdisk.cpio "add 750 sbin/adbd patched_adbd"

magiskboot repack boot.img

Если все прошло хорошо, adbd должен работать как root!

Удачного взлома 😊

iot

| 2021 © Песочница Харрисона

https://harrisonsand.com/posts/patching-adb-root/ 3/3

Вам также может понравиться