
Desbloquear Bootloader para Itel S23 (S665L) / Unisoc T606 usando CVE-2022-38694
Guia para desbloquear o bootloader no Itel S23 (S665L) usando o exploit CVE-2022-38694 no chipset Unisoc T606 (UMS9230).
| Propriedade | Valor |
|---|---|
| Marca | Itel |
| Modelo | S665L (S23) |
| Android | 12 (SDK 31) |
| Compilação | S665L-F065OPRSUVApAqAr-S-GL-20250207V533 |
| SoC | Unisoc T606 (UMS9230) |
| CPU | 2x Cortex-A75 + 6x Cortex-A55 (ARMv8, 64-bit) |
| Armazenamento | UFS |
| Slot | A/B |
adb e fastboot instaladosubl-itel-s23/
├── README.md
├── CLAUDE.md
├── recovery/
│ ├── TWRP_S665L.img # Imagem de recuperação TWRP
│ └── OrangeFox_S665L.img # Imagem de recuperação OrangeFox
└── tools/
└── spreadtrum_flash_linux/
├── spd_dump # Ferramenta de comunicação BootROM
├── gen_spl-unlock # Gerador de payload de desbloqueio
├── unlock.sh # Script de desbloqueio automatizado
├── fdl1-dl.bin # Carregador de primeiro estágio
├── fdl2-dl.bin # Carregador de segundo estágio
├── fdl2-cboot.bin # Uboot modificado para desbloqueio
├── custom_exec_no_verify_65015f08.bin # Payload do exploit CVE
├── custom_exec_no_verify_65015f48.bin # Payload do exploit CVE (alternativo)
├── splloader.bin # Backup SPL (gerado durante o processo)
├── uboot.bin # Backup uboot (gerado durante o processo)
├── spl-unlock.bin # Payload de desbloqueio (gerado durante o processo)
└── ums9230/itel/ # Binários FDL para Itel UMS9230
Este exploit aproveita uma vulnerabilidade no BootROM Unisoc que permite escrever dados em uma região de memória antes da conclusão da verificação de assinatura.
Normal: BootROM → verify(FDL1) → REJEITA (não assinado)
Exploit: BootROM → overwrite verify() → verify = always_true
→ accept(FDL1) → ACEITA → desbloqueia bootloader
O payload custom_exec_no_verify (96 bytes) sobrescreve o ponteiro de função de verificação de assinatura no endereço 0x65015f08, fazendo com que o BootROM aceite qualquer FDL1 sem verificar sua assinatura.
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
O telefone deve estar ligado e conectado via USB. Após esta etapa, o telefone não inicializará até o Passo 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
Faça backup de splloader.bin e uboot.bin em um local seguro:
cp splloader.bin uboot.bin backup_spl/
./gen_spl-unlock splloader.bin 0xfd28
Saída: spl-unlock.bin
O offset
0xfd28é específico deste firmware. Verifique o tamanho desplloader.bin— o offset deve corresponder ao tamanho do arquivo.
Entre no modo BROM: desligue o telefone, segure Volume Down e conecte o USB.
sudo ./spd_dump exec_addr 0x65015f08 fdl fdl1-dl.bin 0x65000800 \
fdl fdl2-dl.bin 0x9efffe00 exec \
w uboot fdl2-cboot.bin reset
Entre no modo BROM novamente, então:
sudo ./spd_dump exec_addr 0x65015f08 fdl spl-unlock.bin 0x65000800
Se você vir device removed, exiting... significa sucesso.
Entre no modo BROM novamente, então:
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 = ainda BLOQUEADO (falhou)recv 32 string + dados hash = DESBLOQUEADO (sucesso)Entre no modo BROM novamente, então:
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
O telefone reiniciará. Selecione Restauração de Fábrica quando a Recuperação Android aparecer.
Após o telefone inicializar no Android:
adb shell getprop ro.boot.vbmeta.device_state
# Esperado: unlocked
adb shell getprop ro.boot.flash.locked
# Esperado: 0
splloader.bin e uboot.bin — eles são necessários para restaurar se algo der errado0x65015f48, os passos 3-6 usam 0x65015f08spd_dump / CVE-2022-38694 Desbloquear Bootloader por TomKing062 / QuTick102 https://github.com/TomKing062/CVE-2022-38694_unlock_bootloader
Recovery Collections & Spreadtrum Flash Tool (Linux) por Massatriof16 https://massatriof16.github.io/recovery-collections/#alat
unisoc-unlock (alternativa em Python) por patrislav1 https://github.com/patrislav1/unisoc-unlock