
Разблокировка загрузчика для Itel S23 (S665L) / Unisoc T606 с использованием CVE-2022-38694
Руководство по разблокировке загрузчика на Itel S23 (S665L) с использованием эксплойта CVE-2022-38694 на чипсете Unisoc T606 (UMS9230).
| Свойство | Значение |
|---|---|
| Бренд | Itel |
| Модель | S665L (S23) |
| Android | 12 (SDK 31) |
| Сборка | S665L-F065OPRSUVApAqAr-S-GL-20250207V533 |
| SoC | Unisoc T606 (UMS9230) |
| CPU | 2x Cortex-A75 + 6x Cortex-A55 (ARMv8, 64 бита) |
| Накопитель | UFS |
| Слот | A/B |
adb и fastbootubl-itel-s23/
├── README.md
├── CLAUDE.md
├── recovery/
│ ├── TWRP_S665L.img # Образ TWRP recovery
│ └── OrangeFox_S665L.img # Образ OrangeFox recovery
└── tools/
└── spreadtrum_flash_linux/
├── spd_dump # Инструмент связи с BootROM
├── gen_spl-unlock # Генератор полезной нагрузки для разблокировки
├── unlock.sh # Автоматизированный скрипт разблокировки
├── fdl1-dl.bin # Загрузчик первой ступени
├── fdl2-dl.bin # Загрузчик второй ступени
├── fdl2-cboot.bin # Модифицированный uboot для разблокировки
├── custom_exec_no_verify_65015f08.bin # Полезная нагрузка эксплойта CVE
├── custom_exec_no_verify_65015f48.bin # Полезная нагрузка эксплойта CVE (альтернатива)
├── splloader.bin # Резервная копия SPL (создаётся в процессе)
├── uboot.bin # Резервная копия uboot (создаётся в процессе)
├── spl-unlock.bin # Полезная нагрузка для разблокировки (создаётся в процессе)
└── ums9230/itel/ # FDL-бинарники для Itel UMS9230
Этот эксплойт использует уязвимость в BootROM Unisoc, которая позволяет записывать данные в область памяти до завершения проверки подписи.
Обычный: BootROM → проверить(FDL1) → ОТКЛОНИТЬ (не подписано)
Эксплойт: BootROM → перезаписать проверку() → проверка = всегда_истина
→ принять(FDL1) → ПРИНЯТЬ → разблокировать загрузчик
Полезная нагрузка custom_exec_no_verify (96 байт) перезаписывает указатель на функцию проверки подписи по адресу 0x65015f08, заставляя BootROM принимать любой FDL1 без проверки его подписи.
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
Телефон должен быть включён и подключён через USB. После этого шага телефон не будет загружаться до шага 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
Сохраните splloader.bin и uboot.bin в безопасное место:
cp splloader.bin uboot.bin backup_spl/
./gen_spl-unlock splloader.bin 0xfd28
Вывод: spl-unlock.bin
Смещение
0xfd28специфично для данной прошивки. Проверьте размерsplloader.bin— смещение должно совпадать с размером файла.
Войти в режим BROM: выключите телефон, удерживайте клавишу уменьшения громкости, затем подключите USB.
sudo ./spd_dump exec_addr 0x65015f08 fdl fdl1-dl.bin 0x65000800 \
fdl fdl2-dl.bin 0x9efffe00 exec \
w uboot fdl2-cboot.bin reset
Снова войти в режим BROM, затем:
sudo ./spd_dump exec_addr 0x65015f08 fdl spl-unlock.bin 0x65000800
Если вы видите device removed, exiting..., это означает успех.
Снова войти в режим BROM, затем:
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 = всё ещё ЗАБЛОКИРОВАНО (неудача)recv 32 string + hash data = РАЗБЛОКИРОВАНО (успех)Снова войти в режим BROM, затем:
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
Телефон перезагрузится. Выберите Сброс до заводских настроек, когда появится Android Recovery.
После загрузки телефона в Android:
adb shell getprop ro.boot.vbmeta.device_state
# Ожидается: unlocked
adb shell getprop ro.boot.flash.locked
# Ожидается: 0
splloader.bin и uboot.bin — они нужны для восстановления, если что-то пойдёт не так0x65015f48, шаги 3-6 используют 0x65015f08spd_dump / Разблокировка загрузчика CVE-2022-38694 от TomKing062 / QuTick102 https://github.com/TomKing062/CVE-2022-38694_unlock_bootloader
Коллекции Recovery и Spreadtrum Flash Tool (Linux) от Massatriof16 https://massatriof16.github.io/recovery-collections/#alat
unisoc-unlock (альтернатива на Python) от patrislav1 https://github.com/patrislav1/unisoc-unlock