
Desbloquear o 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 automatizado de desbloqueio
├── 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 (alt)
├── splloader.bin # Backup do SPL (gerado durante o processo)
├── uboot.bin # Backup do 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 da 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) → REJECT (unsigned)
Exploit: BootROM → overwrite verify() → verify = always_true
→ accept(FDL1) → ACCEPT → unlock 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 este passo, 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 para este firmware. Verifique o tamanho desplloader.bin— o offset deve corresponder ao tamanho do arquivo.
Entre no modo BROM: desligue o telefone, segure Volume Down, então 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 do Android aparecer.
Após o telefone inicializar no Android:
adb shell getprop ro.boot.vbmeta.device_state
# Expected: unlocked
adb shell getprop ro.boot.flash.locked
# Expected: 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