
Itel S23 (S665L) / Unisoc T606의 부트로더를 CVE-2022-38694를 사용하여 잠금 해제
CVE-2022-38694 익스플로잇을 사용하여 Unisoc T606 (UMS9230) 칩셋 기반 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 # 1단계 로더
├── fdl2-dl.bin # 2단계 로더
├── 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의 취약점을 이용하여 서명 확인이 완료되기 전에 메모리 영역에 데이터를 쓸 수 있도록 합니다.
정상: BootROM → verify(FDL1) → REJECT (미서명)
익스플로잇: BootROM → overwrite verify() → verify = always_true
→ accept(FDL1) → ACCEPT → 부트로더 잠금 해제
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단계는 0x65015f08을 사용합니다spd_dump / CVE-2022-38694 부트로더 잠금 해제 by TomKing062 / QuTick102 https://github.com/TomKing062/CVE-2022-38694_unlock_bootloader
리커버리 컬렉션 및 Spreadtrum Flash Tool (Linux) by Massatriof16 https://massatriof16.github.io/recovery-collections/#alat
unisoc-unlock (Python 대체 도구) by patrislav1 https://github.com/patrislav1/unisoc-unlock