
Déverrouillage du 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 premier étage
├── fdl2-dl.bin # Chargeur de second étage
├── fdl2-cboot.bin # Uboot modifié pour le déverrouillage
├── custom_exec_no_verify_65015f08.bin # Payload d'exploit CVE
├── custom_exec_no_verify_65015f48.bin # Payload d'exploit CVE (autre)
├── splloader.bin # Sauvegarde SPL (générée durant le processus)
├── uboot.bin # Sauvegarde uboot (générée durant le processus)
├── spl-unlock.bin # Payload de déverrouillage (généré durant le processus)
└── ums9230/itel/ # Binaires FDL pour Itel UMS9230
Cet exploit tire parti d'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 (non signé)
Exploit: BootROM → overwrite verify() → verify = always_true
→ accept(FDL1) → ACCEPT → déverrouiller le bootloader
Le payload custom_exec_no_verify (96 octets) écrase le pointeur de fonction de vérification de signature à l'adresse 0x65015f08, ce qui fait que le BootROM accepte 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 redé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 emplacement sûr :
cp splloader.bin uboot.bin backup_spl/
./gen_spl-unlock splloader.bin 0xfd28
Sortie : 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 VERROUILLÉ (échec)recv 32 string + données de hachage = DÉVERROUILLÉ (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 récupération Android apparaît.
Après que le téléphone démarre 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 Déverrouillage du bootloader par TomKing062 / QuTick102 https://github.com/TomKing062/CVE-2022-38694_unlock_bootloader
Collections de Recovery & 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