
Déverrouiller le bootloader pour Itel S23 (S665L) / Unisoc T606 en utilisant CVE-2022-38694
Guide pour déverrouiller le bootloader sur l’Itel S23 (S665L) en utilisant l’exploit CVE-2022-38694 sur le chipset Unisoc T606 (UMS9230).
| Propriété | Valeur |
|---|---|
| Marque | Itel |
| Modèle | S665L (S23) |
| Android | 12 (SDK 31) |
| Build | S665L-F065OPRSUVApAqAr-S-GL-20250207V533 |
| SoC | Unisoc T606 (UMS9230) |
| CPU | 2x Cortex-A75 + 6x Cortex-A55 (ARMv8, 64-bit) |
| Stockage | UFS |
| Slot | A/B |
adb et fastboot installésubl-itel-s23/
├── README.md
├── CLAUDE.md
├── recovery/
│ ├── TWRP_S665L.img # image de recovery TWRP
│ └── OrangeFox_S665L.img # image de recovery OrangeFox
└── tools/
└── spreadtrum_flash_linux/
├── spd_dump # outil de communication BootROM
├── gen_spl-unlock # générateur de payload de déverrouillage
├── unlock.sh # script de déverrouillage automatisé
├── fdl1-dl.bin # chargeur de première étape
├── fdl2-dl.bin # chargeur de deuxième étape
├── fdl2-cboot.bin # uboot modifié pour le déverrouillage
├── custom_exec_no_verify_65015f08.bin # payload de l’exploit CVE
├── custom_exec_no_verify_65015f48.bin # payload de l’exploit CVE (alt)
├── splloader.bin # sauvegarde SPL (générée pendant le processus)
├── uboot.bin # sauvegarde uboot (générée pendant le processus)
├── spl-unlock.bin # payload de déverrouillage (généré pendant le processus)
└── ums9230/itel/ # binaires FDL pour Itel UMS9230
Cet exploit exploite une vulnérabilité dans le BootROM Unisoc qui permet d’écrire des données dans une région mémoire avant la fin de la vérification de signature.
Normal: BootROM → verify(FDL1) → REJECT (unsigned)
Exploit: BootROM → overwrite verify() → verify = always_true
→ accept(FDL1) → ACCEPT → unlock bootloader
Le payload custom_exec_no_verify (96 octets) écrase le pointeur de fonction de vérification de signature à l’adresse 0x65015f08, ce qui amène le BootROM à accepter n’importe quel FDL1 sans vérifier sa signature.
sudo tee /etc/udev/rules.d/51-android.rules << 'EOF'
# Google/Android (ADB & Fastboot)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev"
# Spreadtrum/Unisoc
SUBSYSTEM=="usb", ATTR{idVendor}=="1782", MODE="0666", GROUP="plugdev"
EOF
sudo udevadm control --reload-rules && sudo udevadm trigger
cd tools/spreadtrum_flash_linux
cp ums9230/itel/fdl1-dl.bin ums9230/itel/fdl2-dl.bin ums9230/itel/fdl2-cboot.bin .
cp ums9230/custom_exec_no_verify_65015f08.bin ums9230/custom_exec_no_verify_65015f48.bin .
chmod +x spd_dump gen_spl-unlock
Le téléphone doit être allumé et connecté via USB. Après cette étape, le téléphone ne démarrera pas avant l’étape 6.
sudo ./spd_dump exec_addr 0x65015f48 fdl fdl1-dl.bin 0x65000800 \
fdl fdl2-dl.bin 0x9efffe00 exec \
r splloader r uboot e splloader e splloader_bak reset
Sauvegardez splloader.bin et uboot.bin dans un endroit sûr :
cp splloader.bin uboot.bin backup_spl/
./gen_spl-unlock splloader.bin 0xfd28
Résultat : spl-unlock.bin
Le décalage
0xfd28est spécifique à ce firmware. Vérifiez la taille desplloader.bin— le décalage doit correspondre à la taille du fichier.
Entrez en mode BROM : éteignez le téléphone, maintenez Volume Bas, puis branchez l’USB.
sudo ./spd_dump exec_addr 0x65015f08 fdl fdl1-dl.bin 0x65000800 \
fdl fdl2-dl.bin 0x9efffe00 exec \
w uboot fdl2-cboot.bin reset
Entrez à nouveau en mode BROM, puis :
sudo ./spd_dump exec_addr 0x65015f08 fdl spl-unlock.bin 0x65000800
Si vous voyez device removed, exiting..., cela signifie succès.
Entrez à nouveau en mode BROM, puis :
sudo ./spd_dump exec_addr 0x65015f08 fdl fdl1-dl.bin 0x65000800 \
fdl fdl2-dl.bin 0x9efffe00 exec \
verbose 2 read_part miscdata 8192 64 m.bin reset
recv 64 zero = toujours LOCKED (échec)recv 32 string + hash data = UNLOCKED (succès)Entrez à nouveau en mode BROM, puis :
sudo ./spd_dump exec_addr 0x65015f08 fdl fdl1-dl.bin 0x65000800 \
fdl fdl2-dl.bin 0x9efffe00 exec \
w splloader splloader.bin w uboot uboot.bin reset
Le téléphone redémarrera. Sélectionnez Réinitialisation d’usine lorsque la Recovery Android apparaît.
Une fois le téléphone démarré sous Android :
adb shell getprop ro.boot.vbmeta.device_state
# Expected: unlocked
adb shell getprop ro.boot.flash.locked
# Expected: 0
splloader.bin et uboot.bin — ils sont nécessaires pour la restauration en cas de problème0x65015f48, les étapes 3 à 6 utilisent 0x65015f08spd_dump / CVE-2022-38694 Unlock Bootloader par TomKing062 / QuTick102 https://github.com/TomKing062/CVE-2022-38694_unlock_bootloader
Recovery Collections & Spreadtrum Flash Tool (Linux) par Massatriof16 https://massatriof16.github.io/recovery-collections/#alat
unisoc-unlock (alternative Python) par patrislav1 https://github.com/patrislav1/unisoc-unlock