Как получить root права на OPPO A16 - (не)Уникальный опыт

Как получить root права на OPPO A16


Подозреваю, что есть больше одного способа получить root права на этом устройстве. В сети есть даже туториалы разной степени работоспособности. Часть из них требует каких-то сумрачных виндовых программ (в т.ч. платных), другая часть просто не работает или демонстрирует полное непонимание вопроса автором туториала. Поковырявшись с этим всем великолепием, я решил написать тот самый, правильный туториал©, который хотел бы прочитать сам в начале пути.

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

Я привык к хорошему, и поэтому процесс получения root прав для меня обычно должен выглядеть так: разблокировать загрузчик, прошить патченный magisk-ом boot.img и работать дальше. Это хорошо работает на референсных устройствах от Google. Но реальность Android мира такова, что обычно получение root-а это какая-то боль, унижение, мутные форумы, странные программы и кирпич на выходе. Конечно же все это ждет вас ниже, но я попробую сделать процесс более простым.

Предусловия:

  • Вы понимаете, что такое режим разработчика и Magisk. В идеале - имеете опыт установки Magisk на другие устройства.
  • Знаете где находится консоль
  • На хосте установлен python3 и adb
  • Установлены все необходимые драйвера для работы с USB

Подготовка

Начало стандартное:

  • Включаем режим разработчика: Settings -> About phone -> Version -> покликать по Build number до победного
  • Включаем отладку по USB и OEM unlock: Settings -> Additional settings -> Developer options -> OEM unlock и USB debugging

Девайс сделан на процессоре MediaTek Helio G35, поэтому берем mtkclient, который и сделает всю нужную магию.

Just some mtk tool for exploitation, reading/writing flash and doing crazy stuff. For windows, you need to install the stock mtk port and the usbdk driver (see instructions below). For linux, a patched kernel is only needed when using old kamakiri (see Setup folder) (except for read/write flash).

У меня все завелось без установки дополнительных зависимостей вроде libusb, но если у вас не так, то в README репозитория есть все нужные инструкции.

$ git clone https://github.com/bkerler/mtkclient
$ cd mtkclient
$ pip3 install -r requirements.txt

Превращаем смартфон в кирпич

У этой модели есть странный глюк - настройка USB debugging отключается после каждой перезагрузки и нужно не забывать ее включать

Для выполнения дальнейших действий, нужно полностью отключить смартфон и отсоединить кабель. Теперь можно дампить boot и vbmeta разделы. Запускаем команду для дампа:

$ python mtk r boot,vbmeta boot.img,vbmeta.img

И ждем пока появится приглашение к дальнейшим активным действиям:

Port - Hint:

Power off the phone before connecting.
For brom mode, press and hold vol up, vol dwn, or all hw buttons and connect usb.
For preloader mode, don't press any hw button and connect usb.

......

Без паники, mtkclient будет периодически писать эти сообщения в консоль и ждать подключения устройства. Чтобы подключить его правильно нужно одновременно нажать и удерживать обе кнопки громкости и подключить кабель. Кнопки нужно держать до тех пор пока не начнется процесс дампа. Ожидание может занять 10-15 секунд.

/img/oppo-a16-easy-root/partitions-dump.png

Теперь выполняем сброс чтобы вернуть смартфон в адекватное состояние:

$ python mtk reset

Отключаем кабель и включаем смартфон в обычном режиме. Стоит запомнить этот пируэт с удержанием двух кнопок, его нужно будет выполнять каждый раз чтобы потыкать mtkclient-ом в смартфон. Пока ждем загрузки, нужно скачать самую новую версию Magisk. На момент выхода этой статьи была актуальна версия 25.1.

$ wget https://github.com/topjohnwu/Magisk/releases/download/v25.1/Magisk-v25.1.apk

Пока скачивался Magisk, смартфон должен был загрузится. Устанавливаем приложение Magisk и закидываем в смартфон boot.img, который мы сдампили ранее. Он лежит в папке mtkclient-а.

$ adb install Magisk-v25.1.apk
$ adb push boot.img /sdcard/Download

В свежеустановленном Magisk-е выбираем Install. Опцию Patch vbmeta in boot image при этом выбирать не нужно. Патчим boot.img и сразу стягиваем с утройства запатченную версию:

$ adb pull /sdcard/Download/magisk_patched-25100_ZZuQH.img .

Опять выдергиваем шнур и выдавливаем стекло отключаем смартфон. Теперь нужно отформатировать разделы:

$ python mtk e metadata,userdata,md_udc

После запуска команды повторяем пируэт с удержанием кнопок и ждем окончания процесса очистки. Теперь все готово для разблокировки загрузчика. Смартфон не трогаем, просто выполняем следующую команду:

$ python mtk da seccfg unlock

Если все прошло успешно, то картина будет такая:

/img/oppo-a16-easy-root/unlock-bootloader.png

Выполняем сброс, отключаем кабель и включаем смартфон как обычно.

$ python mtk reset

При включении он скажет, что все безнадежно испорчено и выключится через 5 секунд. Чтобы этого не произошло, нужно успеть нажать кнопку включения питания после появления сообщения про ошибку dm-verity. После этого появится следующее предупреждение, что все плохо и телефоном пользоваться нельзя. Но на этот раз ничего нажимать не нужно. Он начнет загрузку через 5 секунд. Загружаться будет долго. Очень долго. Можно смело идти пить чай или даже сходить в бассейн. После успешной (но это неточно) загрузки - включаем режим разработчика и убеждаемся, что опция разблокировки загрузчика нам больше недоступна, а загрузчик разблокирован

/img/oppo-a16-easy-root/verify-unlock.png

Теперь с помощью adb перезагружаемся в fastboot. Не забываем, что на самом старте нас ждет ошибка про испорченный dm-verity которую как и раньше нужно успеть прибить за 5 секунд.

$ adb reboot fastboot

Когда попали в fastboot, на всякий случай убеждаемся, что устройство доступно в этом режиме

$ fastboot devices

Прошиваем запатченный ранее boot

$ fastboot flash boot magisk_patched-25100_ZZuQH.img

И патчим vbmeta, попутно отключая надоедливое сообщение про dm-verity

$ fastboot flash vbmeta --disable-verity --disable-verification vbmeta.img

Перезагружаемся, и не забываем включить отладку по USB. Скорее всего вы поймаете глюк, когда установленное ранее приложение Magisk будет отображаться со стандартной android-иконкой и просить интернет для обновления. Решить эту проблему можно обновив это приложение из того же apk, который вы скачали ранее:

$ adb install -r Magisk-v25.1.apk

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

/img/oppo-a16-easy-root/magisk-success.png

Проверяем root-овый шелл и идем пить авиационный керосин. Ну или покупать новое устройство ;)

/img/oppo-a16-easy-root/shell.png


Смотрите также