94 lines
3.9 KiB
Python
94 lines
3.9 KiB
Python
"""Workflows für Huawei P10 Lite (WAS-LX1, Kirin 658, EMUI 8.x).
|
|
|
|
Drei FRP-Removal-Pfade in absteigender Erfolgswahrscheinlichkeit:
|
|
|
|
1. erecovery — eRecovery + update.app von SD-Karte. Kein Loader nötig.
|
|
Kein Bootloader-Unlock nötig. Funktioniert in der Regel.
|
|
2. dload-erase — Testpoint -> Kirin DLOAD -> xloader -> frp-Partition leeren.
|
|
Braucht passende Loader-Files (siehe loaders/README.md).
|
|
3. dload-flash — Testpoint -> Kirin DLOAD -> kompletter Reflash via update.app.
|
|
Maximaler Eingriff, höchstes Risiko, bricht Garantie endgültig.
|
|
|
|
Was hier *nicht* funktioniert:
|
|
- ADB/Fastboot-FRP-Tricks: das Gerät ist im Setup-Wizard, ADB ist aus.
|
|
- TalkBack/YouTube-Tricks: von Google/Huawei seit Jahren gepatcht.
|
|
- Bootloader-Unlock-Code von Huawei: seit Juli 2018 abgeschaltet.
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
LOADER_ROOT = Path(__file__).resolve().parent.parent / "loaders" / "kirin" / "kirin960_lite"
|
|
# Kirin 658 wird intern oft mit dem Kirin-960-Loader-Set gefahren (Lite-Variante).
|
|
# Für 100%-Sicherheit: Loader vom exakten WAS-LX1-Firmware-Dump verwenden.
|
|
|
|
XLOADER_NAME = "hisi-sec_usb_xloader.bin"
|
|
USB_LOADER_NAME = "usb_loader.bin"
|
|
FASTBOOT_BIN_NAME = "fastboot.bin"
|
|
|
|
# SRAM-Adressen für die Loader-Stages (öffentlich aus Kirin-Reverse-Engineering)
|
|
# Im Zweifel mit dem Image abgleichen — manche WAS-Builds nutzen 0x07012000.
|
|
XLOADER_ADDR = 0x07012000
|
|
USB_LOADER_ADDR = 0x07012000
|
|
|
|
|
|
def erecovery_instructions() -> str:
|
|
"""Schritt-für-Schritt für den eRecovery-Pfad. Pure Anleitung, kein Code."""
|
|
return """
|
|
eRecovery-Methode (ohne Loader, ohne Bootloader-Unlock)
|
|
========================================================
|
|
|
|
Du brauchst:
|
|
- Eine FAT32-formatierte SD-Karte, max. 32 GB
|
|
- Die *exakte* update.app deiner Region (z.B. WAS-LX1 EMEA C432)
|
|
Bezug: huaweifirm.com, hovatek.com, stockromhuawei.com
|
|
- USB-Ladegerät (kein Datenkabel nötig)
|
|
|
|
Schritte:
|
|
1. Auf der SD-Karte einen Ordner `dload` (klein!) anlegen.
|
|
2. update.app dort hineinkopieren. Pfad: SD:/dload/update.app
|
|
3. SD-Karte in das ausgeschaltete P10 Lite stecken.
|
|
4. Beim Einschalten gleichzeitig halten: Power + Volume-Up + Volume-Down.
|
|
Halten bis das Huawei-Logo erscheint, dann nur noch Power weiter, andere lösen.
|
|
5. eRecovery erkennt die SD-Karte und bietet "Software-Update" / "SD-Karten-Update".
|
|
Bestätigen.
|
|
6. Nach Abschluss bootet das Gerät neu, FRP-Partition ist neu geschrieben,
|
|
Setup-Assistent startet ohne alten Google-Account.
|
|
|
|
Wenn eRecovery die Datei nicht erkennt:
|
|
- Region passt nicht (häufigster Fehler)
|
|
- update.app ist Multi-Part (.app + .lst). Beide nach /dload kopieren.
|
|
- SD-Karte nicht FAT32 oder > 32 GB
|
|
"""
|
|
|
|
|
|
def dload_erase_plan(loader_dir: Path = LOADER_ROOT) -> dict:
|
|
"""Plant den Testpoint -> DLOAD -> frp-erase-Pfad.
|
|
|
|
Liefert ein Dict mit Pfaden und Adressen, das vom CLI ausgeführt wird.
|
|
Wirft FileNotFoundError, wenn die Loader-Files fehlen — dann landet der
|
|
User bei loaders/README.md und weiß, was zu tun ist.
|
|
"""
|
|
xloader = loader_dir / XLOADER_NAME
|
|
usb_loader = loader_dir / USB_LOADER_NAME
|
|
|
|
missing = [str(p) for p in (xloader, usb_loader) if not p.is_file()]
|
|
if missing:
|
|
raise FileNotFoundError(
|
|
"Folgende Loader-Files fehlen:\n - "
|
|
+ "\n - ".join(missing)
|
|
+ "\nSiehe loaders/README.md für Beschaffung."
|
|
)
|
|
|
|
return {
|
|
"stages": [
|
|
{"file": xloader, "addr": XLOADER_ADDR, "label": "xloader"},
|
|
{"file": usb_loader, "addr": USB_LOADER_ADDR, "label": "usb_loader"},
|
|
],
|
|
"post": "huawei-fastboot-d", # erwarteter Modus nach dem Loaden
|
|
"frp_partition": "frp",
|
|
# Größe der FRP-Partition auf P10 Lite: meist 1 MiB. Beim ersten echten
|
|
# Lauf gegen die ptable des Geräts gegenchecken (gpt-Dump via fastboot).
|
|
"frp_size_bytes": 1024 * 1024,
|
|
}
|