China-Handy – Teil 2

Posted on Sa 16 Januar 2021 in Computer & Electronics

Die Woche ist vorbei und so wollen wir heute mal versuchen, ob wir den Bootloader meines neuen Redmi Note 9 Pro erfolgreich entsperren können und in den Genuss eines Custom-ROMs kommen.

Also wieder XMT anwerfen und same procedure as last week. Diesmal hat er offenbar das unlock Token bekommen und den Bootloader entsperrt. Unmittelbar nach dem Unlock musste ich erstmal das System wieder neu einrichten, wieder Developer werden und USB-Debugging aktivieren. Sobald XMT wieder Verbindung mit dem Handy hatte, wollte es TWRP recovery flashen. Leider hat es das passende TWRP File nicht selbst gefunden, so dass ich selber eines heruntergeladen habe, was dann aber nicht korrekt erkannt wurde. Nach etwas frickeln war TWRP installiert aber nach dem ROM-flashen bin ich immer wieder im TWRP gelandet, anstatt im Betriebssystem. Grumpf!

Also einen Schritt zurücktreten und die wesentlichen Schritte durchgehen. Die ganze Prozedur besteht aus drei Schritten:

  1. Bootloader entsperren
  2. TWRP recovery Image flashen
  3. Custom ROM Image flashen

So bequem der geführte Weg über XMT aussah – wir machen das nun schrittweise und mit Bordmitteln, soweit möglich. Da haben wir mehr Kontrolle was genau passiert bzw. schiefgeht. Und vermutlich ist das auch insofern besser, als sich vieles dann leichter auf Geräte anderer Hersteller übertragen lässt. Damit es besser nachvollziehbar ist, gebe ich im Folgenden den kompletten Ablauf wieder, auch die Dinge, die wir bereits im letzten Post erledigt hatten.

Bevor wir loslegen nochmal der Hinweis: Wir löschen alle Daten vom Handy. D.h. wenn da irgendwas von Bedeutung drauf ist, vorher sichern. Kein Backup? Kein Mitleid!

Android boot-Modi

Android kann in verschiedene Modi gebootet werden, die man kennen sollte und wissen, wie man sie erreicht. Alle adb und fastboot Befehle funktionieren via USB – d.h. das Handy muss via USB am Computer angeschlossen sein.

Normal

Der normale Betriebssystem-Start. Und so kommt man da hin:

  • Handy ist aus: Power lang drücken
  • Handy läuft normal und USB-Debugging ist eingeschaltet: adb reboot bootloader
  • Handy ist im Fastboot-Mode: fastboot reboot

Fastboot

Das ist der Service-Modus, in dem man das System flashen kann. D.h. das brauchen wir, um mit dem original Xiaomi Flash-Tool, XMT oder fastboot images zu flashen.

Bei Xiaomi Geräten sieht der Fastboot-Screen so aus:

Xiaomi fastboot screen

Und so kommt man da rein:

  • Handy ist aus: Power+Vol- lang drücken
  • Handy läuft normal und USB-Debugging ist eingeschaltet: adb reboot fastboot

Recovery

Der Recovery Mode erlaubt es z.B. einen Factory Reset durchzuführen. Wenn wir ein alternatives Recovery Tool flashen (z.B. TWRP), dann gehen noch viele anderes Dinge.

Und so kommt man da rein:

  • Handy ist aus: Power+Vol+ lang drücken
  • Handy läuft normal und USB-Debugging ist eingeschaltet: adb reboot recovery

Vorbereitungen

Als erstes brauchen wir etwas Werkzeug: ADB, Fastboot und XMT:

sudo apt install adb fastboot

XMT könnt Ihr hier herunter laden.

Dann sind ein paar Dinge auf dem Handy zu erledigen:

  • Developer werden: Settings / About phone so lange auf die MIUI Versionsnummer tippen, bis er sagt "You are now a developer"
  • Nun in Settings / Additional settings / developer options:
    • USB-debugging aktivieren
    • OEM-unlock aktivieren

Codename finden

Android Geräte haben einen codename. Wieso Codename? Ich weiß doch, dass mein Handy Redmi Note 9 pro heißt! Nun – unter dem Namen wird es verkauft. Intern hat es aber einen Codenamen und in der Tat gibt es unter obigem Handelsnamen mindestens die chinesische Version (codename curtana) und die internationale (codename joyeuse). Der Codename ist wichtig, damit wir auch wirklich kompatible Images runterladen, denn wenn das nicht zusammen passt geht garnix mehr. Um den Codename rauszufinden tun wir dies:

In den fastboot-Mode booten und dann:

fastboot getvar product

Bei mir bekomme ich dies zur Antwort:

product: joyeuse

Und nun wieder in Android booten

fastboot reboot

Bootloader entsperren

Wenn Ihr wollt, könnt ihr erstaml prüfen, in welchem Status sich der Bootloaer befindet. Dazu in den Fastboot modus booten und

fastboot oem device-info

Die Antwort sieht dann in etwa so aus:

[...]
(bootloader) Verity mode: true
(bootloader) Device unlocked: false
(bootloader) Device critical unlocked: false
(bootloader) Charger screen enabled: true
OKAY [  0.001s]

In diesem Fall: Ja der Bootloader ist gesperrt.

Eigentlich sieht Android vor, dass man den Bootloader nun so entsperren kann:

fastboot oem unlock

Aber wie schon erwähnt, geht das bei Xiaomi (und vielen anderen) nicht. D.h. die Antwort fällt so aus:

...
FAILED (remote: Token Verify Failed, Reboot the device

Also zurück zum Weg, der funktioniert:

  • Falls noch nicht geschehen, SIM-Karte einlegen
  • Im Handy MI Account anlegen und mit dem Handy verknüpfen.
  • XMT starten
  • Unlock, lock bootloader and other auswählen
  • Handy in der Liste auswählen
  • In den MI-Account einloggen, wenn wir dazu aufgefordert werden.
  • Nun sollte der Bootloader entsperrt werden

Und falls Ihr, so wie ich letztes Mal eine Wartezeit auferlegt bekommt, geduldig warten und dann das Ganze wiederholen.

TWRP

TWRP ist ein custom recovery tool, das erforderlich ist, um dann das eigentliche Custom-ROM flashen zu können.

Es ist wichtig, dass Ihr genau die richtige TWRP-Version für Euer Device nehmt und kein anderes. Hier das falsche zu erwischen ist ein schöner Weg, das Handy erstmal unbootbar zu machen.

Also auf zu androidfilehost.com und dort nach "twrp joyeuse" suchen. Bei mir war es TWRP-joyeuse-12012021-12.04.19.zip.

Nun packen wir das TWRP-Archiv aus:

unzip TWRP-joyeuse-12012021-12.04.19.zip

und erhalten so ein file names recovery.img – evtl. habt Ihr ein solches auch direkt irgendwo bekommen, also nicht in einem zip Archiv. Normalerweise flasht man nun das twrp recovery image und ersetzt so das originale. Im Prinzip kann man auch einfach einmalig in ein recovery image booten, ohne es zu flashen:

fastboot boot recovery.img

Allerdings scheint as bei neueren Versionen von Android nicht mehr zu funktionieren – diese bringen fastbootd anstatt fastboot mit und da scheint diese Möglichkeit nicht mehr unterstützt zu werden...

Also booten wir in den fastboot-Mode:

adb reboot fastboot

Warten bis der fastboot Bildschirm kommt und flashen das Recovery-Image aus dem TWRP-Archiv:

fastboot flash recovery recovery.img

Der Output sieht dann ungefähr so aus:

target reported max download size of 805306368 bytes
sending 'recovery' (131072 KB)...
OKAY [  3.478s]
writing 'recovery'...
OKAY [  0.556s]
finished. total time: 4.034s

Sehr gut!

Custom ROM auf das Handy kopieren

Nun brauchen wir ein ROM-Image. Und wie Ihr Euch vielleicht erinnern werdet, wollte ich xiaomi.eu ausprobieren. Und zwar dieses: xiaomi.eu_multi_HMNote9ProEU_V12.0.1.0.QJZMIXM_v12-10.zip – gibt's direkt bei xiaomi.eu.

Wenn Ihr unsicher seid, ob Ihr ein kompatibles ROM erwischt habt, dann packt das ZIP-Archiv aus und schaut mal in META-INF/com/android/metadata. Da sollte irgendwo dies stehen:

pre-device=joyeuse

Und auch an diversen anderen Stellen kommt der Codename vor.

Aber wie bekommen wir das ROM nun auf's Handy? Das geht z.B. via ADB. Dazu booten wir das Handy ganz normal in Android und kopieren das gerade besorgte File auf das Gerät:

adb push xiaomi.eu_multi_HMNote9ProEU_V12.0.1.0.QJZMIXM_v12-10.zip /sdcard/

Custom ROM flashen

Nun das Handy in den recovery mode booten, also in das vorhin installierte TWRP recovery image.

Nun auf dem Handy in TWRP in Wipe / Advanced Wipe und diese Partition löschen:

  • Data
  • Cache
  • Dalvik

Als nächstes im Hauptmenü auf Install gehen ROM-File navigieren, selbiges auswählen und installieren. Das dauert nun eine ganze Weile und Ihr könnt interessiert zuschauen, wie diverse Messages an Euch vorbei ziehen.

Am Ende steht da

...done

Sehr gut.

Als letztes müssen wir nun noch wipe / Format data machen, bevor wir das Handy neu starten. Das geht erst jetzt, weil wir ja das zu flashende Image auf er internen SD-Karte abgelegt hatten.

Nun rebooten: reboot / system.

Die Spannung steigt ins Unermessliche!

Es hat geklappt! Cool!

Notfälle und Hintertürchen

Aber was, wenn mir das garnicht gefällt, oder irgendwas schiefgeht? Kein Problem, denn man kann in der Regel wieder zurück zur Originial-Firmware. Am einfachsten geht das, indem man sich ein sogenanntes Fastboot-image der Original Firmware besorgt. Am leichtesten findet Ihr den korrekten Link zu Eurem Image hier. Sucht nach Eurem Handy-Modell (am besten via codename, bei mir "joyeuse"), wählt aus der Liste die Version für Eure Region raus und nehmt das fastboot Image. Das ist ein tgz File und das entpackt Ihr dann mit tar xzf xxxx.tgz. Und los geht's:

cd joyeuse_global_images_V12.0.1.0.QJZMIXM_20201107.0000.00_10.0_global/
sh flash_all.sh

Ihr habt richtig gelesen – da sind nicht nur *.bat Files für Windows drin, sondern auch ein Linux Shell Script. Und das flasht nun schön die Stock-Firmware auf das Handy.

Mit dieser Methode kommt Ihr aus so ziemlich jedem Schlamassel wieder raus – es sei denn, Ihr macht, das, was in der folgenden Sektion kommt...

Not to do

An dieser Stelle läuft alles. Aber es gibt noch ein paar Dinge, die Ihr auf keinen Fall tun solltet: Denn man kann sich den Spaß am neuen ROM gründlich verderben, wenn man auf die Idee kommen sollte, nach erfolgreicher Flash-Aktion den Bootloader wieder zu sperren. Wie das ginge?

Oh – das ist ganz einfach:

  1. Mit dem Xiaomi flash tool: clean all and lock
  2. Mit ADB: adb flashing lock
  3. Mit Fastboot: fastboot oem lock
  4. Mit einem Fastboot ROM: flash_all_lock.sh bzw. flash_all_lock.bat

Der vierte Fall ist eher theoretisch, denn diese Skripte stammen aus den Xiaomi Stock-ROMs und dort wäre das erneute locken des Bootloaders vermutlich kein Problem.

"Aber warum soll ich das nicht machen?" wird der durchschnittlich neugierige Leser fragen. Es klingt doch erstmal nach einer guten Idee, den Bootloader wieder zu sperren, damit nicht jeder, der mein Handy in die Finger kriegt an meine Sachen kommt und/oder mein OS verändern kann.

Weil das Telefon danach so aussieht:

The system has been destroyed!

... und dann noch in etwa diesen Nutzwert hat:

A Brick

Grumpf!

Der Versuch, im Anschluss ein neues ROM zu flashen scheitert dann spektakulär und man hat ohne Spezialkenntnisse und/oder einen besonders autorisierten Xiaomi-Account keine Chance mehr, das Gerät zum Leben zu erwecken. Offenbar zerstört die Firmware das System, wenn ein bootloader lock stattfindet während ein nicht signiertes ROM installiert ist.

Und jetzt fragt bitte nicht, woher ich das weiß...

Da ist guter Rat teuer. Das offizielle Miflash Tool kann zwar grundsätzlich solche gebrickten Geräte mit Stock-Firmware flashen, aber nur, wenn Ihr einen authorized account Euer Eigen nennt. Wie man so einen Account bekommt ist unklar. Zudem müsst Ihr dazu Euer Telefon öffnen, den Akku abklemmen und zwei Testpunkte überbrücken, während Ihr das USB-Kabel einsteckt, um in den emergency download (EDL) Mode zu kommen.

Grundsätzlich gäbe es noch den Weg die Firehose Files eines Stock-ROMs zu patchen, so dass sie keine Autorisierung von Xiaomi fordern, aber ich habe keine Ahnung, wie das geht und aktuell sind die entsprechenden Files für mein Telefon-Modell noch nicht in den entsprechenden Sammlungen enthalten.

Im Netz findet man freundliche Russen, die ihre Dienste zum remote-unbricken via Teamviewer anbieten, aber das ist mir ehrlich gesagt zu heiß, auch wenn die Preise nicht sehr hoch sind.

Kurz: da kann wohl aktuell nur noch der Xiaomi-Service helfen.

Fazit

Das Flashen des Custom-ROMs ging an sich ganz gut, nur dieser Mist mit der Wartezeit nervt gewaltig und macht mir Xiaomi nicht sympathischer. Und auch die Hürden, die Xiaomi einer Desaster-Recovery in den Weg legt finde ich sehr ärgerlich.

Sobald mein Gerät wieder geht, werde ich das xiaomi.eu ROM mal eine Weile testen und dann beschließen, ob ich es auf Dauer gut finde (und es wirklich zum Datenschutz beiträgt, so wie es mir vorstelle), oder noch was anderes ausprobiere.