User Tools

Site Tools


Sidebar


Здравствуйте!

Меня зовут Михаил!
Я системный администратор
и наполняю эту wiki,
решая разнообразные IT-задачки.

Моя специализация - виртуализация!

Я всегда готов помочь Вам
наладить IT-инфраструктуру
за скромное вознаграждение!

mike@autosys.tk
+7 (910) 911-96-23

android:rooting_any_device_with_ubuntu

СТАТЬЯ ЕЩЕ СЫРАЯ

Приемы, работы с образами описанные тут актуальны, однако, для получения root достаточно просто корректно собрать TWRP.
Я собирал его так: Сборка TWRP из исходников для любого аппарата

В данной статье я пытаюсь получить root для телефона Nomu S30 mini, на базе MTK6735.

https://forum.xda-developers.com/showthread.php?t=2684210
http://whiteboard.ping.se/Android/Rooting
http://andrew.bogdanovs.com/post/flashing_mt65xx_phones.html

Разблокировка бутлоадера

Для того, чтобы в телефон можно было заливать модифицированные образы нужно разблокировать бутлоадер.
ВНИМАНИЕ!! при разблокировке или блокировке бутлоадера пользовательские данные теряются!!!!
Устанавливаем adb-tools

sudo apt-get install android-tools-adb android-tools-fastboot

Включаем в Developer Options опцию USB Debugging.
В Developer Options включаем OEM Unlocking.
Включаем телефон и подключаем к компу. Телефон спросит - можно ли использовать с этим компьютером USB Debug - отвечаем Yes.

Теперь перезагружаем телефон в режим бутлоадера. Для этого при подключенном к компу телефоне (включенном) выполняем

adb reboot-bootloader

Либо выключаем телефон, зажимаем Vol+ и PowerButton. Появится меню, в котором кнопкой Vol+ нужно выбрать fastboot и нажать Vol-.
После того, как на телефоне появится надпись FASTBOOT MODE на компе выполняем:

fastboot oem unlock

В результате компьютер скажет:

(bootloader) Start unlock flow

OKAY

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

Прошивка с помощью bootloader

Перезагружаем телефон в режим бутлоадера (fastboot):

adb reboot-bootloader

Например, для того, чтобы прошить flash-блок system (в котором лежит собственно android) - подключаем аппарат к компу и выполняем:

fastboot flash system system.img

Эта команда прошьет блок с названием system файлом-образом system.img из текущего каталога. Аналогично прошиваются recovery и boot:

fastboot flash boot boot.img
fastboot flash recovery recovery.img

Перезагружаем телефон:

fastboot reboot

Или перезагружаем его в recovery

fastboot reboot recovery

Отключение dm-verity и включение userdebug

Для того, чтобы можно было загружать модицицированный system.img, нужно отключить проверку образа dm-verity. Это делается путем редактирования образа boot.img. Распаковываем boot.img с помощью AIK-Linux:

./unpackimg.sh ./boot.img

Из распакованного ramdisk удаляем файл verity_key

sudo rm ./ramdisk/verity_key

В файле ./ramdisk/fstab.mt6735 отключаем verify:

sudo sed -i '/\/system/ s/,verify//' ./ramdisk/fstab.mt6735

В файле ./ramdisk/default.prop меняем значение параметра ro.secure=1 на 0, меняем ro.debuggable=0 на 1 и добавляем строку ro.config.dmverity=false:

sudo sed -i '/ro.secure/ s/1/0/' ./ramdisk/default.prop
sudo sed -i '/ro.debuggable/ s/0/1/' ./ramdisk/default.prop
echo 'ro.config.dmverity=false' | sudo tee -a ./ramdisk/default.prop

Упаковываем обратно:

sudo ./repackimg.sh

И прошиваем в телефон:

adb reboot-bootloader
fastboot flash boot ./image-new.img
fastboot reboot



















Всё, что написано ниже, неактуально, но может кому-то пригодиться

Перепаковка boot.img

Распаковка

wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/android-serialport-api/android_bootimg_tools.tar.gz
tar -xvf ./android_bootimg_tools.tar.gz
mkdir ./boot
./unpackbootimg -i ./boot.img -o ./boot/

В результате в папке ./boot будут файлики. И среди них два:

  • boot.img-zImage —→ kernel
  • boot.img-ramdisk.gz —→ ramdisk

Чтобы распаковать ram-диск делаем так:

gunzip -c boot.img-ramdisk.gz | cpio -i

Упаковка initramfs

cd 
find . | cpio -o -H newc | gzip > ../newramdisk.cpio.gz

Отключение verify для раздела system

./unpackbootimg -i ./boot.img -o ./boot
cd boot
mkdir ./ramdisk
cp ./boot.img-ramdisk.gz ./ramdisk/
cd ramdisk/
gunzip -c boot.img-ramdisk.gz | cpio -i
rm -f ./boot.img-ramdisk.gz 
sed -i '/\/system/ s/,verify//' ./fstab.mt6735
rm -f ../boot.img-ramdisk.gz
find . | cpio -o -H newc | gzip > ../boot.img-ramdisk.gz

Получение root в adb

В файлике default.prop нужно сделать так:

ro.secure=0
ro.debuggable=1
persist.service.adb.enable=1

Упаковка

Выполняется как-то так:

./mkbootimg --kernel ./boot.img-zImage --ramdisk ./boot.img-ramdisk.gz --base 40078000 --cmdline 'bootopt=64S3,32N2,64N2' --pagesize 2048 -o ../newboot.img

Перепаковка boot.img с помощью abootimg

boot.img перепакованый таким образом нормально загружается, (даже не подписаный сертификатом) только в том случае, если не вносились изменения (не перепаковывался) initrd.img. Это значит, что secureboot проверяет initrd.img.

sudo apt-get install abootimg
abootimg -x ./boot.img
abootimg-unpack-initrd

Команда abootimg-unpack-initrd распакует файл initrd.img из текущей директории в папку ramdisk. После внесения изменений в файлы можно упаковать все обратно.

rm ./initrd.img
abootimg-pack-initrd

Команда abootimg-pack-initrd упакует содержимое папки ramdisk в файл ./initrd.img
Теперь можно всё собрать обратно в newboot.img.

abootimg --create newboot.img -f ./bootimg.cfg -k ./zImage -r ./initrd.img


Перепаковка с подписью сертификатом

В сертификате указывал такие данные: C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com
Подписанный (но не измененный) boot.img НЕ загружается.

abootimg -x ./boot.img 
abootimg-unpack-initrd
#sed -i '/\/system/ s/,verify//' ./ramdisk/fstab.mt6735
rm ./initrd.img
abootimg-pack-initrd
abootimg --create newboot.img -f ./bootimg.cfg -k ./zImage -r ./initrd.img
openssl genrsa -f4 -out verifiedboot.pem 2048
openssl pkcs8 -in verifiedboot.pem -topk8 -outform DER -out verifiedboot.pk8 -nocrypt
openssl req -new -x509 -sha256 -key verifiedboot.pem -out verifiedboot.x509.pem
openssl x509 -outform DER -in verifiedboot.x509.pem -out verifiedboot.x509.der
java -jar BootSignature.jar /boot newboot.img verifiedboot.pk8 verifiedboot.x509.der boot_signed.img
java -jar BootSignature.jar -verify boot_signed.img


adb reboot-bootloader
fastboot flash boot ./boot_signed.img 
fastboot reboot

Перепаковка system.img

Скачиваем отсюда super-su: https://download.chainfire.eu/supersu-stable

http://www.mtkfirmware.com/content/linux-commands-instructions-tools-unpacking-and-repacking-system-images-mtk-devices-ext4-and
http://www.mtkfirmware.com/sites/default/files/dev-tools/img-tools_0.zip
http://4pda.ru/forum/lofiversion/index.php?t660562-40.html
https://www.tinkerboarding.co.uk/forum/thread-347-post-1216.html
https://tinkerboarding.co.uk/forum/archive/index.php/thread-264.html
https://nelenkov.blogspot.ru/2014/05/using-kitkat-verified-boot.html#!/2014/05/using-kitkat-verified-boot.html - вот тут про verity.
https://forum.xda-developers.com/android/general/cofface-filecontexts-bin-filecontexts-t3669824

При внедрении в образ system.img файлов SuperSU нужно прописать их в SELinux. База данных SELinux хранится в образе boot.img, в файлике file_contexts.bin. После извлечения, файл file_contexts.bin нужно распаковать для внесения в него изменений с помощью утилиты sefcontext, а затем запаковать обратно и пересобрать образ boot.img.
Образ system.img нужно распаковать с помощью img-tools, смонтировать образ и добавить в него файлы SuperSU, а затем запаковать его обратно.

Итак.
В отдельную папку (меня это пака ~/AIK-Linux)распаковываем Android Image Kitchen кладем туда boot.img и распаковываем его:

./unpackimg.sh ./boot.img

Из папки ./ramdisk забираем файлик file_contexts.bin и кладем его в папку с утилитами img-tools, sefcontext и образом system.img - у меня это папка ~/s30mini/.

cp ./ramdisk/file_contexts.bin ../s30mini/

Теперь с помощью скрипта перепаковываем system.img и вносим изменения в file_contexts.bin:

#!/bin/bash
SuperSU_PATH="/mnt/hdd/Downloads/UPDATE-SuperSU-v2.82-20170528234214"
cd ~/img-tools/
./simg2img ./system.img ./system.raw
sudo mkdir /system
sudo mount -t ext4 -o loop ./system.raw /system/
mkdir boot
cp ./boot.img ./boot/
cp ./unpackbootimg ./boot/
cd ./boot
./unpackbootimg -i ./boot.img -o ./
gunzip -c boot.img-ramdisk.gz | cpio -i
cd ..
./sefcontext -o ./file_contexts ./boot/file_contexts.bin


sudo mkdir --parents /system/app/SuperSU && sudo cp $SuperSU_PATH/common/Superuser.apk /system/app/SuperSU/SuperSU.apk
sudo chmod 0644 /system/app/SuperSU/SuperSU.apk
echo "/system/app/SuperSU/SuperSU.apk u:object_r:system_file:s0" >> ./file_contexts

sudo cp $SuperSU_PATH/common/install-recovery.sh /system/etc/install-recovery.sh
sudo chmod 0755 /system/etc/install-recovery.sh
echo "/system/etc/install-recovery.sh u:object_r:toolbox_exec:s0" >> ./file_contexts

sudo cp $SuperSU_PATH/arm64/su /system/xbin/su
sudo chmod 0755 /system/xbin/su
sed -i '/^\/system\/xbin\/su/d' ./file_contexts
echo "/system/xbin/su u:object_r:system_file:s0" >> ./file_contexts

sudo mkdir /system/bin/.ext
sudo cp $SuperSU_PATH/arm64/su /system/bin/.ext/.su
sudo chmod 0755 /system/bin/.ext/.su
echo "/system/bin/.ext/.su    u:object_r:system_file:s0" >> ./file_contexts

sudo cp /system/xbin/su /system/xbin/daemonsu
echo "/system/xbin/daemonsu   u:object_r:system_file:s0" >> ./file_contexts

sudo cp /system/xbin/su /system/xbin/sugote
echo "/system/xbin/sugote u:object_r:zygote_exec:s0" >> ./file_contexts

sudo cp $SuperSU_PATH/arm64/supolicy /system/xbin/supolicy
sudo chmod 0755 /system/xbin/supolicy
echo "/system/xbin/supolicy   u:object_r:system_file:s0" >> ./file_contexts

sudo cp $SuperSU_PATH/arm64/libsupol.so /system/lib64/libsupol.so
sudo chmod 0755 /system/lib64/libsupol.so
echo "/system/lib\(64\)/libsupol.so   u:object_r:system_file:s0" >> ./file_contexts

sudo touch /system/etc/.installed_su_daemon
sudo chmod 0644 /system/etc/.installed_su_daemon
echo "/system/etc/.installed_su_daemon    u:object_r:system_file:s0" >> ./file_contexts

sudo cp /system/bin/sh /system/xbin/sugote-mksh
sudo chmod 0755 /system/xbin/sugote-mksh
echo "/system/xbin/sugote-mksh    u:object_r:system_file:s0" >> ./file_contexts

sudo cp /system/bin/app_process32 /system/bin/app_process32_original
sudo chmod 0755 /system/bin/app_process32_original
echo "/system/bin/app_process32_original  u:object_r:zygote_exec:s0" >> ./file_contexts

sudo mv /system/bin/app_process /system/bin/app_process_original
sudo chmod 0755 /system/bin/app_process_original
echo "/system/bin/app_process_original    u:object_r:zygote_exec:s0" >> ./file_contexts

sudo mv /system/bin/app_process32 /system/bin/app_process_init
sudo chmod 0755 /system/bin/app_process_init
echo "/system/bin/app_process_init    u:object_r:system_file:s0" >> ./file_contexts

sudo mv /system/bin/app_process64 /system/bin/app_process64_original
sudo chmod 0755 /system/bin/app_process64_original
echo "/system/bin/app_process64_original  u:object_r:zygote_exec:s0" >> ./file_contexts

sudo ln -s /system/xbin/daemonsu /system/bin/app_process
sudo ln -s /system/xbin/daemonsu /system/bin/app_process32
sudo ln -s /system/xbin/daemonsu /system/bin/app_process64
sudo rm -f /system/bin/install-recovery.sh
sudo ln -s /system/etc/install-recovery.sh /system/bin/install-recovery.sh

SYSTEM_RAW_SIZE=$(stat --printf="%s" ./system.raw)
sudo ./make_ext4fs -s -l $SYSTEM_RAW_SIZE -S ./file_contexts -a system newsystem.img /system/
sudo umount /system
sudo chmod a+rw ./newsystem.img
sudo rm -f ./system.raw
sudo rm -Rf ./boot
sudo rm -f ./file_contexts
sudo rm -Rf /system

Переносим новый file_contexts.bin в рамдиск boot.img и упаковывавем boot.img.

echo '' | sudo tee ~/AIK-Linux/ramdisk/file_contexts.bin
sudo dd if=./new_file_contexts.bin of=~/AIK-Linux/ramdisk/file_contexts.bin

UNBRICK

Discussion

, 2018/02/12 12:26

поможет ли отключение dm-verity. если прошить boot.img и заблокировать загрузчик средствами fastboot? всмысле не получится ли кирпич..

, 2018/02/22 16:48

Кирпич из телефона на базе чипа MTK сделать очень сложно. Даже если прошить левый preloader. Из любого состояния телефон можно прошить. Я пробывал. Кстати, root на этом телефоне я получил и без манипуляций с dm-verity. Оказалось достаточно было собрать TWRP. Вот таким образом : https://wiki.autosys.tk/doku.php?id=android:build_twrp_from_source_ubuntu_16.04

, 2018/06/08 20:09

А можно ли этим способом, отключить drm verify на смартфоне Sony?

, 2018/06/22 15:21

А почему же не загрузился подписанный boot.img??? Вам знаком сам механизм проверки этой самой подписи? И что именно за компонент эту проверку проводит? LK, TEE, или может сам Preloader?

, 2018/06/25 15:37

Не знаю, почему не загрузился подписанный boot.img. Дальше не разбирался.

, 2018/06/26 08:38
Не знаю, почему не загрузился подписанный boot.img. Дальше не разбирался.

Очень жаль, я хотел бы разобраться в тонкостях того как правильно собирать и подписывать свои образы, чтобы они успешно грузились в девайсе в Yellow State без разблокировки загрузчика. У меня на руках LeEco Le Pro 3 AI, модель x7, в билдах прошивок пишут версию от х650 до х658. Китайцы так его устроили, что при разблокировке загрузчика (чтобы можно было ставить всё что угодно модифицированное неподписанное) блокируется работа модема (baseband). Если есть какие-то идеи, или хотя бы есть куда послать за прочтением доков или лучше чьего-то опыта, то пожалуйста сообщите.

, 2018/06/26 08:58, 2018/06/26 09:19

Вообще, моей задачей было рутирование девайса. Эту задачу удалось выполнить, собрав только TWRP и подобрав версию SuperSU, скрипты которого все сделали правильно и смогли установиться без перепаковки образов boot и system. Моми манипуляции по сборке TWRP описаны тут: https://wiki.autosys.tk/doku.php?id=android:build_twrp_from_source_ubuntu_16.04

Соответственно, если вы хотите собрать свой system, скорее всего вам стоит посмотреть в установочные скрипты SuperSU. Ведь он как-то вносит изменения в system, что после этого все работает. Я вам даже больше скажу - конкретные куски установочных скриптов, ответственных за корректное изменение system можно обнаружить, сравнивая различные версии SuperSU. В моем случае - 2.72 не устанавливался, а 2.82 - устанавливался.

В принципе, о подписывании образов немного теории написано тут: https://source.android.com/security/verifiedboot/verified-boot

и практики тут: https://forum.xda-developers.com/android/software-hacking/signing-boot-images-android-verified-t3600606

ну и вообще: https://www.google.com/search?newwindow=1&ei=zf8xW-r5E8yZsAGuopvwAQ&q=android+boot+image+signing&oq=android+boot+image+signing&gs_l=psy-ab.3...67477.70656.0.70770.13.9.4.0.0.0.75.599.9.9.0....0...1c.1.64.psy-ab..0.2.78...0i19k1.0.IYnazcwo4qQ

Enter your comment. Wiki syntax is allowed:
J A W A C
 
android/rooting_any_device_with_ubuntu.txt · Last modified: 2018/09/12 08:58 by admin