
CVE-2022-38694 を使用した Itel S23 (S665L) / Unisoc T606 のブートローダーアンロック
Unisoc T606(UMS9230)チップセットのCVE-2022-38694脆弱性を利用して、Itel S23(S665L)のブートローダーをアンロックするガイドです。
| プロパティ | 値 |
|---|---|
| ブランド | 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-bit) |
| ストレージ | UFS |
| スロット | A/B |
adb と fastboot がインストールされていることubl-itel-s23/
├── README.md
├── CLAUDE.md
├── recovery/
│ ├── TWRP_S665L.img # TWRPリカバリーイメージ
│ └── OrangeFox_S665L.img # OrangeFoxリカバリーイメージ
└── 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/ # Itel UMS9230用FDLバイナリ
このエクスプロイトは、Unisoc BootROMの脆弱性を利用して、署名検証が完了する前にメモリ領域にデータを書き込むことを可能にします。
Normal: BootROM → verify(FDL1) → REJECT (unsigned)
Exploit: BootROM → overwrite verify() → verify = always_true
→ accept(FDL1) → ACCEPT → unlock bootloader
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
splder.binとuboot.binを安全な場所にバックアップ:
cp splloader.bin uboot.bin backup_spl/
./gen_spl-unlock splloader.bin 0xfd28
出力: spl-unlock.bin
オフセット
0xfd28はこのファームウェアに固有です。splder.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
# Expected: unlocked
adb shell getprop ro.boot.flash.locked
# Expected: 0
splder.binとuboot.binを削除しないでください — 何か問題が発生した場合に復元に必要です0x65015f48を使用し、ステップ3〜6では0x65015f08を使用しますspd_dump / CVE-2022-38694 Unlock Bootloader 作成者 TomKing062 / QuTick102 https://github.com/TomKing062/CVE-2022-38694_unlock_bootloader
Recovery Collections & Spreadtrum Flash Tool (Linux) 作成者 Massatriof16 https://massatriof16.github.io/recovery-collections/#alat
unisoc-unlock (Python alternative) 作成者 patrislav1 https://github.com/patrislav1/unisoc-unlock