通过 CVE-2022-38694 解锁 ZTE Blade V40 Vita(P606F02 / Unisoc UMS9230 / UFS)引导加载程序 - Linux 脚本、FBE 解锁后卡死修复,以及无人记录的两个陷阱
使用 CVE-2022-38694 解锁的 Linux 笔记和脚本。在我的 EEA_P606F02 上完成,运行 MyOS11.0.13_8045_EEA。
有两件事决定它能否成功,而这两件事都没有被写下来:
SEND fdl2-dl.bin → connection closed)。只按住 VOL_UP + VOL_DOWN。如果需要复位,轻按一次 POWER。misc 擦除 BCB 不起作用 —— 这个 bootloader 会忽略它。改为通过 BROM 擦除 userdata + metadata。| 型号 | ZTE Blade V40 Vita — ZTE 8045 / EEA_P606F02 |
| SoC / 存储 | Unisoc UMS9230 / UFS |
| 包 | ums9230_universal_unlock_UFS。UFS 的 fdl2-*.bin 是 934088 字节;eMMC 的约 1 MB。错误的 loader 可能会清空手机 |
| 系统 / 槽位 | Android 11, MyOS11.0.13 · 槽位 _b |
git clone --recursive https://github.com/TomKing062/CVE-2022-38694_unlock_bootloader
cd CVE-2022-38694_unlock_bootloader
gcc chsize.c -o chsize
gcc gen_spl-unlock.c -o gen_spl-unlock
cd spreadtrum_flash && make # spd_dump
将 chsize、gen_spl-unlock、spd_dump 以及 UFS 包中的四个文件(fdl1-dl.bin、fdl2-dl.bin、fdl2-cboot.bin、misc-wipe.bin)放在同一个工作目录中。下面的脚本针对该目录运行。
手机关机 → 按住 VOL_UP + VOL_DOWN → 插入 USB → 保持按住。你要看到 USB 1782:4d00:
for d in /sys/bus/usb/devices/*/; do
[ "$(cat $d/idVendor 2>/dev/null)" = 1782 ] && echo "BROM: $(basename $d)"
done
19d2:135x 是手机的正常 USB,不是 BROM。处于启动循环的手机也没问题 —— 每次复位都会重新运行 BootROM,它会在复位时重新采样按键。
一次一步,每一步之前重新进入 BROM。运行时保持按住音量键。
cd /path/to/working-dir
sudo /path/to/repo/scripts/unlock.sh 1 # back up SPL + uboot_b, erase SPL (won't boot after this)
sudo /path/to/repo/scripts/unlock.sh 2 # prep images locally, phone not needed
sudo /path/to/repo/scripts/unlock.sh 3 # write fdl2-cboot.bin to uboot_b
sudo /path/to/repo/scripts/unlock.sh 4 # the unlock. ends in "connection closed" = success
sudo /path/to/repo/scripts/unlock.sh 5 # read miscdata @8192: 64 zeros = locked, string+2 hashes = unlocked
sudo /path/to/repo/scripts/unlock.sh 6 # restore uboot/SPL. never skip this
第 4 步以 EXEC FDL1 → 超时 → connection closed 结束。这是解锁在起作用,而不是失败。如果第 5 步显示全零,再次运行第 4 步。
第 3 步会让手机无法启动 Android(该 payload 不是真正的 bootloader)—— 第 6 步会把你原厂的 uboot_bak.bin 放回去。不要中途停止。
trustos 中的 FBE 密钥与锁定状态绑定,因此 /data 永远无法挂载。擦除是必须的:
sudo /path/to/repo/scripts/fix-post-unlock-hang.sh
按住音量键,它会自行重新武装,直到捕获 BROM。擦除 userdata + metadata,写入 BCB,复位。第三次尝试时捕获成功,耗时不到一分钟。
adb shell getprop ro.boot.flash.locked # 0
adb shell getprop ro.boot.verifiedbootstate # orange
adb shell getprop ro.boot.vbmeta.device_state # unlocked
fastboot getvar 在此设备上无用(所有内容都返回空),所以不要在那里寻找确认。
VAB 设备,槽位 b,没有 recovery 分区:
fastboot flash boot_b magisk_patched.img
刷坏一个 boot 镜像,你就回到 BROM,它仍然可用。分区映射: docs/partition-table.md。
重新锁定: 可行(通过 BROM 将 miscdata 令牌清零),但对安全性毫无意义 —— BootROM 漏洞是永久性的,任何人都可以用这些相同的步骤重新解锁。
致谢:CVE-2022-38694 是 NCC Group 的。工具是 TomKing062 的。这里的脚本是 MIT 许可。它会清空你的手机;后果自负。