
Desbloquear el bootloader para Itel S23 (S665L) / Unisoc T606 usando CVE-2022-38694
Guía para desbloquear el bootloader en el Itel S23 (S665L) usando el exploit CVE-2022-38694 en el chipset Unisoc T606 (UMS9230).
| Propiedad | Valor |
|---|---|
| Marca | Itel |
| Modelo | S665L (S23) |
| Android | 12 (SDK 31) |
| Compilación | S665L-F065OPRSUVApAqAr-S-GL-20250207V533 |
| SoC | Unisoc T606 (UMS9230) |
| CPU | 2x Cortex-A75 + 6x Cortex-A55 (ARMv8, 64-bit) |
| Almacenamiento | UFS |
| Ranura | A/B |
adb y fastboot instaladosubl-itel-s23/
├── README.md
├── CLAUDE.md
├── recovery/
│ ├── TWRP_S665L.img # Imagen de recuperación TWRP
│ └── OrangeFox_S665L.img # Imagen de recuperación OrangeFox
└── tools/
└── spreadtrum_flash_linux/
├── spd_dump # Herramienta de comunicación BootROM
├── gen_spl-unlock # Generador de payload de desbloqueo
├── unlock.sh # Script de desbloqueo automatizado
├── fdl1-dl.bin # Cargador de primera etapa
├── fdl2-dl.bin # Cargador de segunda etapa
├── fdl2-cboot.bin # uboot modificado para desbloqueo
├── custom_exec_no_verify_65015f08.bin # Payload del exploit CVE
├── custom_exec_no_verify_65015f48.bin # Payload del exploit CVE (alternativo)
├── splloader.bin # Copia de seguridad de SPL (generada durante el proceso)
├── uboot.bin # Copia de seguridad de uboot (generada durante el proceso)
├── spl-unlock.bin # Payload de desbloqueo (generado durante el proceso)
└── ums9230/itel/ # Binarios FDL para Itel UMS9230
Este exploit aprovecha una vulnerabilidad en el BootROM de Unisoc que permite escribir datos en una región de memoria antes de que se complete la verificación de firma.
Normal: BootROM → verify(FDL1) → REJECT (unsigned)
Exploit: BootROM → overwrite verify() → verify = always_true
→ accept(FDL1) → ACCEPT → unlock bootloader
El payload custom_exec_no_verify (96 bytes) sobrescribe el puntero de función de verificación de firma en la dirección 0x65015f08, haciendo que el BootROM acepte cualquier FDL1 sin verificar su firma.
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
El teléfono debe estar encendido y conectado por USB. Después de este paso, el teléfono no arrancará hasta el Paso 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
Copia splloader.bin y uboot.bin a un lugar seguro:
cp splloader.bin uboot.bin backup_spl/
./gen_spl-unlock splloader.bin 0xfd28
Output: spl-unlock.bin
El offset
0xfd28es específico de este firmware. Verifica el tamaño desplloader.bin— el offset debería coincidir con el tamaño del archivo.
Entrar en modo BROM: apaga el teléfono, mantén presionado Bajar Volumen, luego conecta el USB.
sudo ./spd_dump exec_addr 0x65015f08 fdl fdl1-dl.bin 0x65000800 \
fdl fdl2-dl.bin 0x9efffe00 exec \
w uboot fdl2-cboot.bin reset
Vuelve a entrar en modo BROM, luego:
sudo ./spd_dump exec_addr 0x65015f08 fdl spl-unlock.bin 0x65000800
Si ves device removed, exiting... significa éxito.
Vuelve a entrar en modo BROM, luego:
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 = todavía BLOQUEADO (falló)recv 32 string + hash data = DESBLOQUEADO (éxito)Vuelve a entrar en modo BROM, luego:
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
El teléfono se reiniciará. Selecciona Restablecer valores de fábrica cuando aparezca la Recuperación de Android.
Después de que el teléfono arranque en Android:
adb shell getprop ro.boot.vbmeta.device_state
# Expected: unlocked
adb shell getprop ro.boot.flash.locked
# Expected: 0
splloader.bin y uboot.bin — son necesarios para restaurar si algo sale mal0x65015f48, los pasos 3-6 usan 0x65015f08spd_dump / CVE-2022-38694 Desbloquear Bootloader por TomKing062 / QuTick102 https://github.com/TomKing062/CVE-2022-38694_unlock_bootloader
Recovery Collections y Spreadtrum Flash Tool (Linux) por Massatriof16 https://massatriof16.github.io/recovery-collections/#alat
unisoc-unlock (alternativa en Python) por patrislav1 https://github.com/patrislav1/unisoc-unlock