Morfitronik Security & Privacy

Android: Wgrywanie update.zip przez ADB sideload via TWRP recovery

2017-03-09 17:31:55
Morfik

Po uszkodzeniu jednego z moich smartfonów TP-LINK i skasowaniu na nim wszystkich danych na partycji /system/ trzeba było pomyśleć nad przywróceniem tego urządzenia do życia. Jednym z rozwiązać było binarne wgranie obrazu systemowej partycji bezpośrednio na flash przy pomocy narzędzia dd. Co jednak w przypadku, gdy nie mamy dostępu do backup’u lub tez zwyczajnie go nie zrobiliśmy? Co w takiej sytuacji uczynić i czy jest jakaś nadzieja dla naszego telefonu? Odpowiedź jest naturalnie twierdząca ale wymagane są dwie rzeczy: działający tryb recovery (najlepiej TWRP) ze wsparciem dla trybu “ADB sideload” oraz paczka update.zip z firmware, którą można pobrać bezpośrednio ze strony TP-LINK/Neffos. By ulżyć nieco osobom, które do mnie piszą z zapytaniem o pomoc w przypadku skasowania danych na partycji /system/ (czy uszkodzenia jej w jakiś sposób), postanowiłem napisać krótkie howto na temat używania trybu ADB sideload. W tym artykule w rolach głównych weźmie udział Neffos Y5 ale bez problemu można te kroki przeprowadzić chyba na każdym innym smartfonie.

Objawy usunięcia danych z partycji /system/

Usuwając dane z partycji /system/ pozbawiamy nasz telefon praktycznie całego oprogramowania. Taki smartfon nie może działa bez Androida czy innego systemu operacyjnego i w zasadzie urządzenie resetuje się co około minutę po włączeniu.

W takim stanie po włączeniu smartfona, na ekranie można zobaczyć jedynie loga TP-LINK i Androida. Natomiast w logu systemowym mojego Debiana można zaobserwować poniższe komunikaty:

kernel: usb 2-1.1: new high-speed USB device number 7 using ehci-pci
kernel: usb 2-1.1: New USB device found, idVendor=2357, idProduct=0328
kernel: usb 2-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
kernel: usb 2-1.1: Product: Android
kernel: usb 2-1.1: Manufacturer: Android
kernel: usb 2-1.1: SerialNumber: 90169635
kernel: usb 2-1.1: USB disconnect, device number 6

Gdy dane z partycji /system/ zostały usunięte, to nie damy rady wgrać nic na smartfon przy pomocy narzędzia fastboot . Dlatego właśnie wymagany jest działający tryb recovery. Jeśli ten również z jakiegoś powodu nie działa, to niestety uwaliliśmy telefon na dobre i trzeba będzie go odesłać do serwisu.

Działający TWRP recovery z trybem ADB sideload

Dla osób, które nie wiedzą czym jest ADB sideload, wyjaśniam, że jest jeden z trybów pracy ADB. Standardowo przy pomocy adb możemy rozmawiać z systemem smartfona przez wysyłanie do niego różnych poleceń i w zasadzie możemy operować na takim urządzeniu mniej więcej tak jakbyśmy działali na zwyczajnym linux’ie. W przypadku trybu ADB sideload, te standardowe polecenia są nieaktywne ale mamy za to dostęp do komendy adb sideload , która jest w stanie wgrać świeży firmware z paczki update.zip .

TWRP recovery począwszy od wersji 2.3 wspiera tryb ADB sideload. Dlatego też trzeba się upewnić, że mamy wgraną na smartfonie w miarę nową wersję tego oprogramowania. Gotowe obrazy TWRP recovery dla smartfonów Neffos są dostępne w tym wątku.

W przypadku, gdy mamy starszą wersję TWRP (< 2.3), no to niestety musimy zaktualizować to oprogramowanie wgrywając binarnie obraz przy pomocy dd mniej więcej w taki sam sposób jak zostało to opisane przy okazji odzyskiwania partycji /system/ (link we wstępie).

ADB sideload i stock’owy recovery

Nie jestem pewien czy ADB sideload działa na stock’owym recovery. Wiem, że smartfony oferują możliwość wgrywania pliku update.zip z trybu recovery ale nie wiem jak się zachowa system, gdy jedna lub kilka partycji ( /boot/ , /system/ , /recovery/ ) zostały w jakiś sposób zmienione. Dlatego to HOWTO dotyczy jedynie TWRP recovery, na którym pomyślnie udało mi się przetestować ADB sideload.

Pozyskanie pliku update.zip zawierającego firmware smartfona

ADB sideload potrzebuje pliku z obrazem firmware (ROM). Stock’owy ROM można pobrać ze strony TP-LINK/Neffos. Linki do działu download: Neffos Y5, Neffos Y5L, Neffos C5, Neffos C5 MAX. Pliki są w miarę duże i ważą około 1 GiB. Każdy z tych plików w nazwie zawiera oznaczenie modelu, np. C5_Max_TP702A , Y5L_TP801 . Tutaj mamy TP702 i TP801 oraz w przypadku tego pierwszego mamy również literkę A , która odpowiada za wersję geograficzną i w tym przypadku A jest dla smartfonów na rynku europejskim.

Jak wgrać update.zip przez ADB sideload z poziomu TWRP recovery

Pobrany firmware jest w postaci spakowanego pliku .zip . Tego pliku nie wypakowujemy. Zostanie on załadowany do pamięci RAM komputera, a jego zawartość w locie przesłana na smartfon bez potrzeby wgrywania tego pliku na flash urządzenia. Ta paczka zawiera nie tylko oprogramowanie, które jest wgrywane na partycję /system/ ale również obraz partycji /boot/ , za sprawą którego zostanie wygenerowany też świeży obraz partycji /recovery/ . Wszystkie te trzy partycje będą poddane procesowi flash’owania i po jego ukończeniu powinniśmy powrócić do stock’owego firmware.

Pliki update.zip są podpisane cyfrowo i domyślnie nie damy rady ich wgrać przez TWRP recovery, bo zostanie nam wygenerowany poniższy błąd:

sideload-host file size 968174348 block size 65536
Installing zip file '/sideload/package.zip'
Verifying zip signature...
I:read key e=3 hash=20
I:1 key(s) loaded from /res/keys
I:comment is 1428 bytes; signature 1410 bytes from end
I:TWFunc::Set_Brightness: Setting brightness control to 5
I:TWFunc::Set_Brightness: Setting brightness control to 0
I:failed to verify against RSA key 0
E:failed to verify whole-file signature
I:Zip signature verification failed: 1
Zip signature verification failed!
I:Signaling child sideload process to exit.
I:Waiting for child sideload process to exit.
sideload_host finished

Problem jak widać dotyczy weryfikacji sygnatury pliku .zip . Musimy zatem poinstruować TWRP by nie weryfikował sygnatury. Możemy to zrobić odhaczając opcję ZIP signature verification w ustawieniach:

Teraz możemy aktywować tryb ADB sideload przechodząc w Advanced => ADB Sideload:

Czyszczenie cache jest opcjonalne ale można je zaznaczyć. Dane użytkownika i tak pozostaną nietknięte, zatem bez obaw. Niemniej jednak, trzeba pamiętać, że w przypadku modyfikacji partycji /system/ , np. przez Xposed, możemy napotkać dziwne problemy, które mogą uniemożliwić start lub też poprawne działanie systemu i wymagane będzie przeprowadzenie procesu Factory Reset.

Po przesunięciu trzech strzałek na prawą stronę, ADB przełączy się w tryb sideload. Teraz wracamy na komputer i ładujemy plik update.zip przy pomocy poniższego polecenia (trzeba doinstalować narzędzie adb):

# adb sideload /neffos/Y5_H10S100D00B20161207R1344_update.zip
serving: '/neffos/Y5_H10S100D00B20161207R1344_update.zip'  (~24%)

Proces flash’owania plikiem update.zip zajmie dłuższą chwilę ale ostatecznie powinien zakończyć się powodzeniem:

Uruchamiamy smartfon ponownie i ignorujemy przy tym informację, że to urządzenie nie mam zainstalowanego systemu operacyjnego (w zasadzie właśnie go zainstalowaliśmy):

Po chwili powinien nam się załadować ekran z wyborem języka systemu:

Po skonfigurowaniu systemu warto sprawdzić czy są dostępne jakieś aktualizacje. To na wypadek, gdybyśmy chcieli wgrać sobie jeszcze raz TWRP recovery czy przeprowadzać proces root Androida. W przypadku wprowadzenia jakichkolwiek zmian na partycji /boot/ , /system/ lub /recovery/ nie będziemy w stanie tych aktualizacji wgrać na smartfon i warto o tym pamiętać.


Komentarze

Zawartość wpisu