Morfitronik Security & Privacy

Android: Root smartfona Neffos C5 MAX od TP-LINK

2016-12-13 16:27:37
Morfik

Bawiąc się ostatnio smartfonem Neffos C5 MAX od TP-LINK, obiecałem sobie, że jak tylko będę miał chwilę czasu, to postaram się ukorzenić Androida, który w tym telefonie siedzi (Lollipop). Generalnie rzecz biorąc, sposób root’owania tego urządzenia jest bardzo podobny do tego, który miałem już możliwość przeprowadzić na innym modelu TP-LINK’a, tj. Neffos C5. Dlatego też poniższy artykuł jest bardzo zbliżony treścią, choć lekko zaktualizowany pod kątem Neffos’a C5 MAX. Grunt, że nie było żadnych problemów z przeprowadzeniem backup’u flash’a telefonu jak i samego procesu root.

Prostszy sposób na przeprowadzanie procesu root w smartfonach Neffos od TP-LINK z wykorzystaniem natywnych obrazów TWRP został opisany w nowym wątku.

Narzędzia ADB i fastboot

Przede wszystkim, by zabrać się za proces root’owania smartfona Neffos C5 MAX, musimy przygotować sobie odpowiednie narzędzia. Zapewnią one nam możliwość rozmawiania z telefonem. Będziemy potrzebować adb (Android Debug Bridge) oraz fastboot . Proces instalacji tych narzędzi na linux, a konkretnie w dystrybucji Debian, został opisany osobno.

Narzędzie SP Flash Tool

Kolejnym narzędziem, które będzie nam niezbędne jest SP Flash Tool. Niestety nie jest ono włączone do dystrybucji Debian i musimy posiłkować się paczką, którą można znaleźć w podanym wyżej linku. Tutaj ważna uwaga. SP FLash Tool jest przeznaczony tylko dla smartfonów mających SoC od Mediatek.

Pobieramy paczkę .zip dla linux’a i wypakowujemy ją. Jako, że SP Flash Tool wykorzystuje do komunikacji interfejs /dev/ttyACM0 , to do poprawnej pracy wymaga on operowania na tym interfejsie. Standardowo tylko administrator systemu oraz członkowie grupy dialout są w stanie korzystać z tego interfejsu. Musimy zatem dodać naszego użytkownika do tej grupy w poniższy sposób:

# gpasswd -a morfik dialout

Kompletny backup flash’a Neffos C5 MAX

Mając zainstalowane te powyższe narzędzia, możemy przejść do zrobienia backup’u całego flash’a, który jest w naszym smartfonie. Proces backup’u najprościej przeprowadzić za pomocą SP Flash Tool. Niemniej jednak, potrzebne nam są pewne informacje, które możemy uzyskać przy pomocy adb . Podpinamy zatem telefon do portu USB komputera i w terminalu wpisujemy poniższe polecenie:

# adb shell cat /proc/partinfo
Name             Start                  Size
pgpt             0x0000000000000000     0x0000000000080000
proinfo          0x0000000000080000     0x0000000000300000
nvram            0x0000000000380000     0x0000000000500000
protect1         0x0000000000880000     0x0000000000a00000
protect2         0x0000000001280000     0x0000000000a00000
lk               0x0000000001c80000     0x0000000000080000
para             0x0000000001d00000     0x0000000000080000
boot             0x0000000001d80000     0x0000000001000000
recovery         0x0000000002d80000     0x0000000001000000
logo             0x0000000003d80000     0x0000000000800000
expdb            0x0000000004580000     0x0000000000a00000
seccfg           0x0000000004f80000     0x0000000000080000
oemkeystore      0x0000000005000000     0x0000000000200000
secro            0x0000000005200000     0x0000000000600000
keystore         0x0000000005800000     0x0000000000800000
tee1             0x0000000006000000     0x0000000000500000
tee2             0x0000000006500000     0x0000000000500000
frp              0x0000000006a00000     0x0000000000100000
nvdata           0x0000000006b00000     0x0000000002000000
metadata         0x0000000008b00000     0x0000000002500000
system           0x000000000b000000     0x0000000100000000
cache            0x000000010b000000     0x0000000019000000
userdata         0x0000000124000000     0x0000000286780000
flashinfo        0x00000003aa780000     0x0000000001000000
sgpt             0x00000003ab780000     0x0000000000080000

Ten zwrócony wyżej wynik jest dla smartfona Neffos C5 MAX. W przypadku innych telefonów, ta tabelka może mieć inną postać i nie możemy kopiować z niej wartości jeśli mamy inne urządzenie. Generalnie rzecz biorąc, to te dane potrzebne nam są do zbudowania pliku scatter.txt , w oparciu o który działa SP Flash Tool. Ten plik to zwyczajna mapa przestrzeni flash’a telefonu, który podzielony jest na szereg widocznych wyżej partycji.

Plik scatter.txt dla Neffos C5 MAX

Tutaj znajduje się plik scatter.txt, który ja wykorzystałem do pracy z Neffos C5 MAX. Kluczowa sprawa, to opisanie każdej partycji. W sumie to musimy odpowiednio dostosować pole partition_index , które jest zwyczajnie kolejnym numerkiem. Z kolei w partition_name podajemy nazwę partycji, którą uzyskaliśmy przez adb . Dalej w linear_start_addr oraz physical_start_addr wpisujemy tę wartość, która została wypisana przez adb w kolumnie Start . Na podobnej zasadzie uzupełniamy partition_size , podając wartość, którą widzieliśmy w adb w kolumnie Size . I to w zasadzie wszystkie zmiany, które musimy wprowadzić do pliku scatter.txt . Póki co nie mam informacji co do pozostałych opcji w tym pliku, wiem tylko, że część z nich jest uzupełniana przez SP Flash Tool podczas przeprowadzania działań w tym programie.

Tworzenie backupu

Mając plik scatter.txt możemy go wskazać w SP Flash Tool. Przechodzimy zatem do katalogu z wypakowaną zawartością pobranej paczki i uruchamiamy SP Flash Tool wpisując w terminalu ./flash_tool . Powinniśmy zobaczyć okienko, z kilkoma zakładkami. Na jednej z nich widnie napis Download . W niej z kolei znajduje się pozycja Scatter-loading file . To tutaj musimy wskazać ścieżkę do pliku scatter.txt , który utworzyliśmy wcześniej:

Teraz przechodzimy na zakładkę Readback i tam dodajemy nową pozycję w tabelce. To tutaj określamy przestrzeń flash’a w telefonie, która zostanie skopiowana na dysk komputera. Nas interesuje cały flash. Dlatego też początek ustawiamy na 0x0 , a koniec musimy obliczyć z danych dostarczanych przez adb . Interesuje nas ostatnia partycja. Ma ona początek na 0x3ab780000 , a jej rozmiar to 0x80000 . Te dwie wartości musimy do siebie dodać, w wyniku czego otrzymujemy 0x3ab800000 i to tę wartość wpisujemy w SP Flash Tool. Region określamy jako EMC_USER :

Dodajemy również drugą pozycję, która zrobi nam backup preloader’a. Z tym, że tutaj wybieramy region EMMC_BOOT_1 i określamy początek jako 0x0 , a koniec jako 0x40000 :

Teraz wyłączamy telefon. Następnie w SP Flash Tool aktywujemy proces backup’u Neffos’a C5 MAX przyciskając Read Back . Podłączamy telefon do portu USB komputera. Po chwili smartfon powinien nam zawibrować ale nie uruchomi się. Rozpocznie się za to kopiowanie danych z telefonu na dysk. Proces backup’u potrwa dłuższą chwilę. W moim przypadku trwało prawie dwie godziny (transfer na poziomie 3 MiB/s).

Ten backup jest nas w stanie zabezpieczyć na wypadek popełnionych błędów przy flash’owaniu telefonu. Podejrzymy jeszcze ten obraz w fdisk/gdisk , by mieć absolutną pewność, że jest w nim faktyczna kopia flash’a Neffos’a C5 MAX:

Jak odblokować bootloader w Neffos C5 MAX

Mając zrobiony kompletny backup flash’a, możemy przejść do odblokowania bootloader’a. Chodzi o to, że na smartfonach zwykle jest ulokowana partycja /recovery/ . Na niej znajduje się oprogramowanie umożliwiające przeprowadzanie operacji na poziomie systemowym, np. backup lub też flash’owanie ROM’u. Problem w tym, że to oprogramowanie w standardzie zwykle za wiele nie potrafi i by przeprowadzić proces root’owania Androida, musimy pozyskać bardziej zaawansowany soft, np. ClockworkMod czy TWRP, i wgrać go na partycję /recovery/ . By to zrobić musimy pierw odblokować bootloader.

Proces odblokowania bootloader’a usuwa wszystkie dane, które wgraliśmy na flash telefonu, tj. podczas odblokowywania jest inicjowany factory reset. Dane na karcie SD pozostają nietknięte. By ten proces zainicjować zaczynamy od przestawienia jednej opcji w telefonie. W tym celu musimy udać się w Ustawienia => Opcje Programistyczne i tam przełączyć Zdjęcie blokady OEM :

Następnie wyłączamy telefon i włączamy go trzymając Volume Up + Power. Z menu wybieramy tryb fastboot. Następnie w terminalu wpisujemy poniższe polecenia:

# fastboot devices
8HCMMZFI89ROBI9H        fastboot

# fastboot oem unlock

Na ekranie smartfona powinno nam pokazać się poniższe ostrzeżenie:

Unlock bootloader?

If you unlock the bootloader, you will be able to install custom operating system software on this phone.

A custom OS is not subject to the same testing as the original OS, and can cause your phone and installed application to stop working properly.

To prevent unauthorized access to your personal data, unlocking the bootloader will also delete all personal data from your phone "factory reset".

Press the Volume UP/Down buttons to select Yes/No.

Wciskamy Volume Up, by potwierdzić chęć odblokowania bootloader’a, po czym restartujemy smartfon:

# fastboot reboot

Jako, że proces odblokowania bootloader’a usunął wszelkie ustawienia, to jeszcze raz musimy włączyć Opcje Programistyczne, a w nich tryb debugowania portu USB.

Wyodrębnianie obrazu partycji /recovery/ z obrazu Neffos’a C5 MAX

Mając zrobiony backup flash’a telefonu, możemy z niego wyciągnąć obraz partycji /recovery/ . Musimy tylko zamontować ten obraz w systemie za pomocą losetup . Pamiętajmy, że ten obraz ma wiele partycji. Trzeba zatem nieco dostosować moduł kernela, by wszystkie z tych partycji zostały zamontowane za pomocą jednego polecenia. Informacje na temat tego jak dostosować moduł loop znajdują się tutaj. Przechodzimy zatem w miejsce, w którym zapisaliśmy obraz i montujemy go w poniższy sposób:

# cd /path/to/image/
# losetup /dev/loop0 ROM_0

Teraz tworzymy obraz partycji /recovery/ . W tym przypadku /dev/loop0p8 jest urządzeniem, które musimy podać dd :

# dd if=/dev/loop0p8 of=./recovery.img

# file recovery.img
recovery.img: Android bootimg, kernel (0x40080000), ramdisk (0x44000000), page size: 2048, cmdline (bootopt=64S3,32N2,64N2)

Pozyskanie obrazu recovery.img z TWRP

Musimy także pozyskać obraz recovery.img zawierający TWRP. Niestety, póki co nie ma obrazów dla Neffos’a C5 MAX. Dlatego też musimy sobie taki obraz recovery.img stworzyć sami przerabiając inny obraz, który jest przeznaczony na telefon zbliżony parametrami do naszego urządzenia (ten sam SoC, wielkość flash i rozdzielczość ekranu). Pod tym linkiem znajduje się gotowy obraz recovery.img.

Warto tutaj zaznaczyć, że nie zawsze taki obraz będzie nam działać bez problemu. W takim przypadku trzeba próbować innych obrazów, aż któryś zadziała. Nie musimy się tez obawiać wgrania złego obrazu na partycję /recovery/ . Jeśli zdarzy nam się wgrać niedziałający obraz recovery.img , to nie uszkodzimy smartfona. Zamiast tego telefon się zrestartuje i przywróci sobie starą partycję /recovery/ , a nas zaloguje do systemu jak gdyby nigdy nic.

Przepakowanie obrazu recovery.img z innego smartfona

By przepakować obraz przeznaczony na inny smartfon, który jest zbliżony parametrami do naszego Neffos’a C5 MAX, musimy pierw pozyskać odpowiednie narzędzia. Na linux’ie możemy skorzystać tego celu z abootimg lub też ze skryptów Android Image Kitchen. Ja będę korzystał z tego drugiego rozwiązania.

Tworzymy sobie jakiś katalog roboczy i kopiujemy do niego zarówno oryginalny obraz partycji /recovery/ jak i ten z innego smartfona. Następnie znajdując się w tym katalogu roboczym, pobieramy skrypty z github’a (wymagane zainstalowane narzędzie git w systemie) i przechodzimy do utworzonego w ten sposób katalogu. W nim zaś tworzymy dwa podkatalogi stock/ oraz port/ :

$ git clone https://github.com/ndrancs/AIK-Linux-x32-x64/
$ chmod +x ./AIK-Linux-x32-x64/*
$ chmod +x ./AIK-Linux-x32-x64/bin/*
$ cd ./AIK-Linux-x32-x64/
$ mkdir stock/ port/

Kopiujemy oryginalny obraz partycji /recovery/ z katalogu nadrzędnego i wypakowujemy go za pomocą skryptu unpackimg.sh . Następnie przenosimy tak wyodrębnioną zawartość do katalogu stock/ :

$ cp ../recovery_orig.img ./recovery.img
$ ./unpackimg.sh recovery.img
$ mv split_img/ ramdisk/ stock/
$ rm recovery.img

Kopiujemy teraz obraz partycji /recovery/ mający TWRP i wypakowujemy go. Przenosimy jego zawartość do katalogu port/ :

$ cp ../recovery_twrp.img ./recovery.img
$ ./unpackimg.sh recovery.img
$ mv split_img/ ramdisk/ port/
$ rm recovery.img

Zgodnie z informacją zawartą w tym HOWTO (windows), musimy przekopiować kilka plików z oryginalnego obrazu naszego Neffos’a C5 MAX do obrazu TWRP:

$ cp ./stock/split_img/recovery.img-kerneloff ./port/split_img/
$ cp ./stock/split_img/recovery.img-zImage ./port/split_img/
$ cp ./stock/ramdisk/fstab.mt6735 ./port/ramdisk/
$ cp ./stock/ramdisk/meta_init.modem.rc ./port/ramdisk/
$ cp ./stock/ramdisk/meta_init.project.rc ./port/ramdisk/
$ cp ./stock/ramdisk/meta_init.rc ./port/ramdisk/
$ cp ./stock/ramdisk/ueventd.rc ./port/ramdisk/

Z tak przygotowanych plików w katalogu port/ trzeba zrobić nowy obraz recovery.img przy pomocy skryptu repackimg_x64.sh :

$ rm -R stock/
$ mv port/ramdisk ./
$ mv port/split_img ./
$ rmdir port/
$ ./repackimg_x64.sh

W katalogu roboczym powinien zostać utworzony nowy plik o nazwie image-new.img . To jest właśnie nasz nowy obraz partycji /recovery/ , który musimy wgrać na telefon w trybie fastboot.

Wgrywanie przepakowanego obrazu recovery.img na Neffos’a C5 MAX

Wyłączamy telefon i podpinamy go do portu USB. Następnie włączamy go trzymając VolumeUP + Power. Z menu, które nam się pokaże na ekranie telefonu wybieramy tryb fastboot. Wracamy na komputer i przy pomocy narzędzia fasboot wgrywamy wyżej wygenerowany obraz na telefon.

# fastboot flash recovery image-new.img
target reported max download size of 134217728 bytes
sending 'recovery' (12868 KB)...
OKAY [  1.125s]
writing 'recovery'...
OKAY [  0.360s]
finished. total time: 1.485s

Restartujemy telefon ( fastboot reboot ) i wchodzimy w tryb recovery (VolumeUp + Power), by potwierdzić, że nasz nowy obraz recovery się wgrał pomyślnie. W przypadku wgrania poprawnego obrazu, powinniśmy zobaczyć logo TWRP. Jeśli wgrany obraz był nieprawidłowy, to zobaczymy jedynie czarny ekran i nasz Neffos C5 MAX się po chwili uruchomi ponownie w normalnym trybie przywracając oryginalną partycję /recovery/ .

SuperSU, BusyBOX, RootCheck i emulator terminala

Ostatnią rzeczą na drodze do zrobienia root na Neffos C5 MAX jest wgranie aplikacji umożliwiającej korzystanie różnym programom z praw administratora systemu w telefonie. My skorzystamy z SuperSU. Dodatkowo, musimy wgrać sobie BusyBOX, który zawiera minimalistyczne odpowiedniki linux’owych narzędzi, co pozwoli nam swobodnie operować w Androidzie, tak jakbyśmy to robili pod pełnowymiarowym pingwinem. Potrzebny nam także będzie jakiś emulator terminala, w którym to będziemy wpisywać wszystkie nasze polecenia.

Instalacja SuperSU

Zacznijmy od pobrania stosownej paczki z SuperSU. Jako, że my nie mamy jeszcze zrobionego root’a, to musimy pobrać TWRP / FlashFire installable ZIP . Tej paczki nie wypakowujemy, tylko wrzucamy ją w pobranej formie na kartę SD w telefonie. Odpalamy teraz tryb recovery w smartfonie (VolumeUp + Power) i przechodzimy do Instaluj (TWRP jest również w języku polskim):

Następnie wskazujemy paczkę .zip , którą umieściliśmy na karcie SD. Tam z kolei zaznaczamy Weryfikuj sygnatury pliku zip i przeciągamy trzy strzałki na prawą stronę.

Teraz możemy uruchomić ponownie Neffos’a C5 MAX i zainstalować jakąś aplikację, która pokaże nam czy nasz smartfon ma root’a.

Sprawdzenie czy Neffos C5 MAX ma root’a

Po uruchomieniu się systemu na smartfonie, instalujemy aplikację RootCheck, po czym uruchamiamy ją. Powinien się pojawić monit informujący, że ta aplikacja żąda praw administracyjnych, na co zezwalamy. Jeśli nasz telefon ma root’a, to powinien się pojawić stosowny komunikat:

Instalacja BusyBOX

Kolejnym krokiem jest instalacja BusyBOX’a. Po wgraniu tej aplikacji na smartfona, musimy ją uruchomić i wcisnąć w niej przycisk install . BusyBOX również nas poprosi o dostęp do praw administracyjnych:

Po zainstalowaniu, weryfikujemy jeszcze, czy aby wszystko zostało pomyślne wgrane. Możemy to zrobić zarówno w samej aplikacji BusyBOX, jak i w CheckRoot:

Instalacja terminala

Z BusyBOX’em zostały dostarczone niskopoziomowe narzędzia, które mogą korzystać z uprawnień administratora systemu za sprawą SuperSU. Niemniej jednak, by móc odpalać te programiki, musimy w czymś je uruchomić. Do tego celu potrzebny jest nam shell oraz emulator terminala. Domyślny shell ash jest dostarczany razem z BusyBOX. Terminal musimy doinstalować osobno.

Generalnie to znalazłem dwa terminale, które są OpenSource i bez reklam/opłat. Są to Android-Terminal-Emulator oraz Termux. Wybieramy sobie jeden z nich i instalujemy w systemie. Tutaj warto jeszcze zaznaczyć, że ten drugi terminal instaluje sobie również shell dash (domyślny shell w Debianie) . Również w jego przypadku możemy łatwo doinstalować sobie aplikacje za pomocą apt , podobnie jak w Debianie (do tego celu nie jest wymagany root). Jako, że ja korzystam na co dzień z Debiana, to instaluje Termux’a.

Aplikacje i prawa administracyjne

Teraz już pozostało nam tylko odpalenie terminala i zalogowanie się na użytkownika root. Do tego celu służy polecenie su . Wpiszmy je zatem w okienku Termux’a:

I teraz możemy uruchamiać aplikacjie z prawami admina, tak jak to zwykliśmy robić w każdym innym linux’ie. Pamiętajmy tylko, że standardowo system plików jest zamontowany w trybie tylko do odczytu (RO) i by móc zmieniać pliki systemowe z poziomu tego terminala, musimy przemontować system plików w tryb do zapisu (RW). Robimy to w poniższy sposób:

$ su
# mount -o remount,rw /system

Gdy skończymy się bawić, to montujemy ten system plików ponownie w tryb RO:

# mount -o remount,ro /system

Komentarze

Zawartość wpisu