介绍

漏洞

Google 在 Android 16 引入了新的 通用引导加载程序(GBL)机制,允许将一个可更新的 EFI 镜像存放在专用的 efisp (EFI Secure Partition)分区。

但是 Snapdragon 平台的 efisp 分区加载时没有足够的完整性验证,导致可以在 efisp 分区写入自定义 EFI 镜像并在 Android 甚至 Bootloader 启动前的早期执行任意高权限代码

该漏洞存在于高通的 abl(Android Bootloader)中,编号为 CVE-2025-47372 ,高通和各 OEM 厂商已在 2025/12 ~ 2026/03 的系统更新中陆续修复。

所有使用了包含漏洞的高通 ABL 并带有 efisp 分区的设备,理论上都可利用该工具链。
在手机市场,这基本包含所有 骁龙 8EGen5 , 8Gen5 的出厂 Android 16 的设备。

  • 具体的手机型号:

    OnePlus 15 | OnePlus 15T | OnePlus 15R/Ace6T

    realme Neo 8 | realme GT8 | realme GT8 Pro

    REDMAGIC 11 Air | REDMAGIC 11 Pro | REDMAGIC 11 Pro+

    Nubia Z80 Ultra

    Samsung S26 | Samsung S26+ | Samsung S26Ultra

    Xiaomi 17 | Xiaomi 17 Pro | Xiaomi 17 Pro Max

    OPPO Find X9 | OPPO Find X9 Ultra

    vivo X300 Ultra | iQOO 15 | iQOO 15 Ultra

    Redmi K90 Pro | Redmi K90 Pro Max / POCO F8 Ultra

项目

Gbl_root_canoe 项目率先利用漏洞,实现了伪锁定。
它修改并打包 GBL + ABL ,生成一个能欺骗 BL 已锁定的 EFI 来启动系统。
该项目目前主要提供 8EG5/8G5 手机的通用伪锁定方案。笔者暂未验证 gbl_root_canoe 在三方系统上的可用性。目前推测是可启动但无法骗 TEE ?(待补充)

1vivy 后来对其进行重构和优化,制作了注入型工具链:GBL/EFISP chainload
该工具利用 EFI 加载,在内存对后续启动的 BL 或 BL 通信进行欺骗和篡改,实现伪锁定。由于其不修改磁盘上的 abl 分区,该工具不会导致 AVB 验证问题。

本文只讲 GBL chainload ,因为它的功能更多且专注于 OnePlus 手机使用。

对于 OnePlus15 系列设备,COS/OOS_16.0.7.200 及以上系统已经修复了该漏洞。只要设备已解锁,单独刷入 COS/OOS_16.0.5.xxx 版本的 abl ,就依然可以利用 Efisp 漏洞。

https://github.com/1vivy/gbl-chainload

伪锁定

伪装 BL 锁定的目的是使 KeyMint , TEE , Widevine-L1 , PlayIntegrity 等在解锁后,甚至安装 三方系统/类原生 后仍然保持正常可用。

StrongBox Key

Mode-1 + OOS 或 Mode-2 + Custom Rom ,Play Integrity 都可三绿。

Widevine L1 Key

对于任何非中国版 OnePlus 手机:
解锁后,只需伪锁定即可恢复 L1 (貌似还需要一些额外的修复,暂未测试)。
无论是 Mode-1 + OOS ,还是 Mode-2 + Custom Rom,流媒体应用高清播放都正常工作。
(不用想着提取,因为流媒体在 TEE 中解密,再直接送往显示芯片,在硬件上与系统隔离)

对于中国版一加手机:
解锁后,L1 永久丢失变成 L3 ,无论伪锁定还是真回锁都无法修复。
在 Mode-1 + COS 下,虽然 L1 Key 状态显示为绿色,但高清流媒体在应用内实际不可用。
在 Mode-2 + Custom Rom 下,Drm info 内会显示 L3 。

Soter Key

(仅中国版一加手机)
Mode-1 + OOS 或 Mode-2 + Custom Rom ,微信指纹支付都应该正常工作。
Soter key 属于腾讯生态,运作机制封闭,没有通用检测器。

其它 Keys

应该均正常可用。

备份

接下来的操作可能会刷写:recovery , efisp , abl 分区。
务必先将其安全提取并备份,以方便后续的 救砖/还原 。

国行一加设备在尝试伪锁定前,务必备份 oplusreserve1 分区。
这是中国一加设备特有的一个保留分区。它存储了以下信息:

  • 网络锁/区域锁 数据

  • 工程模式与产线校准数据

  • OTA 验证标志与防回滚(Anti-rollback)状态

  • 深度测试令牌。它使原厂 Bootloader 界面能够显示,并允许用户解锁

    一加将此令牌设为一次性使用,重新锁定 Bootloader 后,该令牌将消失!

这意味着在进行任何伪锁定修改时,用户很容易意外清除自己的深度测试令牌!

使用 Gbl-chainload 不用担心这一点,该工具任何模式均会使 BlockIo 丢弃对该分区的所有写入操作。即使尝试通过原生重锁,令牌仍会被保留。但即便如此,仍有必要备份该分区。

必须在设备已解锁,建议在进行任何伪锁定修改之前完成备份。
通过 Userdebug_GSI 或 Root管理器 或 OFox 等,进入 Root ADB Shell :

su
dd if=/dev/block/by-name/oplusreserve1 of=/sdcard/oplusreserve1.img

将所有备份的文件复制到安全的地方存放。

GBL-Chainload 模式/安装/移除

GBL-Chainload 共有三种工作模式:没有假锁定的 Mode-0 开发者调试(留有详细日志,用于日志收集和错误报告,不适合日常使用),和带有假锁定的 Mode-1 、 Mode-2 。

Mode-1/2 均会隐藏开机时的 “ Orange state ” 。可以据此判断 Chainload 是否工作。

安装后,在开机时按住或连按音量上,可以进入 SuperFastboot 模式(Phoenix Watchdog 会每60秒重启一次),可显示 gbl-chainload 信息与警告。使用 adb reboot bootloader 等命令仍会进入原厂 Bootloader 。

Mode-1:完全伪装锁定 ( Protocol-Hook Fakelock )

在 Mode 1 下,EFI 在内存中下了一个 hook 。
当 ABL 去读取 RPMB 硬件的解锁状态时,hook 会拦截并返回一个虚假的 BL Locked 。
接着 ABL 会按照手机已锁定的逻辑运行,KeyMint 和 TEE 也同样正常运行。

因此, ABL 仍会严格校验所有分区的签名。这就是为什么如果要用第三方 Recovery ,必须用工具把官方签名 嫁接(Graft)上去,否则 ABL 会拒绝启动它。

因此 Mode-1 适用于使用官方系统的用户,也靠近上游 gbl_root_canoe 。

在 release 下载并解压 gbl-chainload-tools 。
再下载 gbl-chainload-v2.3.4.efi ,复制进解压后的文件夹。

获取当前 COS/OOS 系统的:abl.img 和 recovery.img ,复制进解压后的文件夹。
Tips:可以在镜像下载站下载,或从刷机包中解压,或通过 DSU 安装 Userdebug GSI 提取。

最后下载 ofox recovery.img ,复制进解压后的文件夹。

运行打包程序

# 打包 efisp
python3 efisp-package.py --abl abl.img --mode 1 --efi gbl-chainload-v2.3.4.efi --out installed-mode1.efi
# 为 OFox recovery 嫁接签名
python3 vbmeta-graft.py --stock recovery.img --custom ofox_rec.img --out grafted_ofox.img

完成后,会获得 installed-mode1.efi 和 grafted_ofox.img 。务必保存好。

重启到 bootloader ,将其刷入到对应分区

# 刷入 Recovery
fastboot flash recovery grafted_ofox.img
# 刷入 Efisp
fastboot flash efisp installed-mode1.efi

仅对于 COS/OOS 16.0.7.200 或以上固件的额外步骤:重刷旧版 16.0.5.xxx abl

# 从 Bootloader 进入 Fastbootd
fastboot reboot fastboot
# 刷入 abl
fastboot flash abl abl.img

由于解锁状态改变,需要重启到 Recovery ,进行 factory reset 再重启。

Mode-2:解锁状态载荷欺骗 ( TA-Payload Spoof )

在 Mode 2 下,ABL 知道 BL Unlocked ,会允许三方 Rom 和任意签名的分区随意启动。

当 ABL 把 “ BL Unlocked ” 通过 TA-payload 发送给 KeyMint 时,EFI 会在两者边界( QSEE/SPSS boundaries )拦截数据包,并替换成从原厂 vbmeta 里提取的伪造已锁定的报告( 120-byte per-firmware profile )。使得 KeyMint 和 TEE 等认为手机处于正常锁定状态。

因此 Mode-2 适用于使用类原生系统的用户,因为修改了太多的分区,Mode-1 嫁接签名太麻烦。

在 release 下载并解压 gbl-chainload-tools 。
再下载 gbl-chainload-v2.3.4.efi ,复制进解压后的文件夹。

获取当前 COS/OOS 系统的:abl.img 和 vbmeta.img ,复制进解压后的文件夹。
Tips:可以在镜像下载站下载,或从刷机包中解压,或通过 DSU 安装 Userdebug GSI 提取。

运行:

python3 efisp-package.py --abl abl.img --mode 2 --efi gbl-chainload-v2.3.4.efi --stock-vbmeta vbmeta.img --oem oplus --out installed-mode2.efi

完成后,会获得:installed-mode2.efi 。保存好。

重启到 bootloader ,将其刷入 EFI 分区

fastboot flash efisp installed-mode2.efi

如果第三方系统没有启动 Efisp ,可能是使用了 COS/OOS 16.0.7.200 或以上的 abl ,需要手动重刷旧版 16.0.5.xxx abl 。

# 从 Bootloader 进入 Fastbootd
fastboot reboot fastboot
# 刷入 abl
fastboot flash abl abl.img

由于解锁状态改变,需要重启到 Recovery ,进行 factory reset 再重启。

还原/移除

直接擦除 EFISP 即可

# Bootloader 擦除 efisp
fastboot erase efisp
 
# Fastbootd 再次擦除 efisp
fastboot reboot fastboot
fastboot erase efisp

如果降级过 abl ,将其恢复为原版 COS/OOS 的 abl

fastboot flash abl abl.img

此时 BL 状态变更为已解锁,需要进入 Recovery ,手动进行 factory reset 并重启。

如果要移除 Root 管理器,重启到 Bootloader ,还原 init boot 和 boot 分区。

中国设备按需要恢复 oplusreserve1 分区,可以使用 fastboot 刷写。

完整刷机步骤

首次安装 Rom

  1. 在 A/B 槽位安装统一底包(建议 16.0.5.xxx )
  2. 重启到 bootloader ,解锁
  3. 刷入 Recovery 或使用 SuperHybrid 安装类原生
  4. 重启到 bootloader ,刷入 efisp
  5. 重启到 fastbootd ,刷入原厂 16.0.5.xxx 的 abl (按需)
  6. 重启到 recovery ,工厂重置/格式化data

安装 KSUN + SuSFS

  1. 下载 WILD Kernel 放进手机存储
  2. 安装 KernelSU-Next ,以 LKM 安装方式修补 init_boot
  3. 重启到 Bootloader ,刷入修补后的 init_boot
  4. 重启到系统,安装 KernelFlasher 并授权,安装内核在当前槽位
  5. 重启到 Bootloader ,刷回原 init_boot
  6. 重启到系统
  • 使用 OFox 安装可能会在某些系统上会引起触控失效问题
    1. 下载 WILD Kernel 放进手机存储
    2. 重启到 Bootloader
    3. 刷入 OrangeFox
    4. 重启到 OrangeFox Recovery
    5. 点击 zip 包安装 Kernel (不能使用 Sideload )
    6. 重启到系统,如果触控失效,则需要清除 data
    7. 安装对应版本号的 KernelSU-Next

修复 PlayIntegrity 和 Wallet

即使得到三绿,Wallet 也可能在重启后显示不符合安全要求,需要额外的修复。

按情况安装 PIF

不同时间和不同 Rom 上的情况有所不同,以下是作者在 2026/07/12 的测试结论

  • InfinityX-3.11-10.07.2026 (testkey)

    关闭系统 PIF ,安装 ReZygisk 和 PIF-inject-s ,无需运行 PIF 更新脚本 。

  • DerpFest-16.2-20260710 (releasekey)

    关闭系统 PIF ,安装 Zygisk_Next 和 PIFork ,重启,运行一次 actions 。

  • EVOX-11.8-20260621 (releasekey)

    无需额外操作,保持系统 PIF 默认即可。

欺骗 BootHash

  1. 安装应用 Key Attestation 2.0.2(及以上)
  2. 安装模块 Brene_SuSFS_module (不要安装 susfs4ksu-moudle )
  3. 重启
  4. 打开 Key Attestation 点击 Root of trust 复制 boot hash key 。
  5. 打开 Brene WebUI ,进入 spoofing ,下划粘贴到 Verified Boot Hash ,应用。
  6. 清除 Google 框架 和 PlayStore 数据。
  7. 重启
  8. 登录 Google 账户。此时 Wallet 应长期稳定工作。

带数据更新系统

为避免可能的意外,脏刷机前务必备份全部数据

本地刷机包更新

  1. 在手机存储放入刷机包与 Wild Kernel
  2. 通过系统更新本地安装刷机包
  3. 通过 KernelFlasher 安装 Kernel 到新系统槽位
  4. 重启到 fastbootd ,刷入 16.0.5.xxx 的 abl 到新系统槽位
  5. 重启到系统

SuperHybrid 更新

  1. 电脑上解压包
  2. 删除其中的 abl.img
  3. 使用 KSU 修补 init_boot.img ,并替换原文件
  4. 运行刷机脚本,完成后开机
  5. 通过 KSU 和 KernelFlasher ,安装 Wild Kernel 到当前槽位
  6. 重启到 bootloader ,刷回原 init_boot.img
  7. 重启到系统

有用的链接

一加深度测试 apk

https://bbsstatic.oneplus.com/public/apk/%E6%B7%B1%E5%BA%A6%E6%B5%8B%E8%AF%95.apk

Efisp 讨论群组

https://t.me/oneplus15efispmod

OnePlus 固件包与镜像下载站

https://roms.danielspringer.at/index.php?view=ota

OnePlus 15 - OrangeFox Recovery

https://orangefox.download/device/69b830b992ddd30a0d733660

https://xdaforums.com/t/recovery-official-stable-orangefox-recovery-r12.4769102/

LOS by dchandu_078

https://xdaforums.com/t/rom-unofficial-lineageos-23-for-oneplus-15.4785437/

Infinity-X by jonassalo93

OnePlus ROMs & Firmware - Fast Stock ROM & China to Global Conversion

https://xdaforums.com/t/rom-unofficial-project-infinity-x-3-11-for-oneplus-15-opcam.4793023/#post-90642592

带一些一加应用,能恢复旧版高效的“展开音量栏”功能,保留且正确显示很多旧版状态栏主题图标。

DerpFest(官方)

OnePlus 15 Series DERPFEST 16.2 OFFICIAL

简单好用,自定义有限

Evolution-X by Dagobert

https://xdaforums.com/t/rom-16-qpr2-infiniti-unofficial-evolution-x-11-8-06-05-26-gapps.4790883/

Evolution X OnePlus 15

带有多个 Pixel 伪装功能,保留且正确显示很多旧版状态栏主题图标。

CrDroid by Ponywka

Ponywka in OnePlus 15/R/S/T Series: The Chatroom

https://xdaforums.com/t/rom-16-unofficial-crdroid-12-for-oneplus-15.4790391/unread

https://onedrive.live.com/?id=%2Fpersonal%2F59e7e70eefdc6722%2FDocuments%2FShared%2FOnePlus15%2FcrDroid%2DPonywka\&listurl=%2Fpersonal%2F59e7e70eefdc6722%2FDocuments\&sortField=LinkFilename\&isAscending=true\&viewid=05ea3922%2Dff68%2D42de%2D9f59%2De4bbe5b4ee08\&ithint=folder\&migratedtospo=true\&redeem=aHR0cHM6Ly8xZHJ2Lm1zL2YvYy81OWU3ZTcwZWVmZGM2NzIyL0lnQ3NheWc0M1AxRlM0RjBBZ2VSaWR1akFhTEo5R3p1cGxWYWo0QnNMZ1FjZWRrP2U9azEyd0VT\&ga=1

CrDroid by RedLintu

https://xdaforums.com/t/rom-16-not-official-yet-crdroid-android-version-12-for-the-oneplus-15.4790415/unread

AviumUI by neko205 on XDA

https://xdaforums.com/t/rom-unofficial-aviumui-for-oneplus-15-fastboot.4788948/

Kernel builder

https://github.com/Xiaomichael/oppo_oplus_realme_sm8850

TWRP

通常 OrangeFox 是更好更现代的选择。。

https://github.com/koaaN/twrp_device_oplus_infiniti

GCam

Download GCam APK 9.7 For Android Phones

Root + 锁定 BL

同样利用 Efisp 漏洞,可以在加载 Root 的同时锁定 BL 。参考该文章:

It’s now possible to Root OnePlus 15 & Lock the Bootloader [WIP]

MTK 的 “Fenrir” 漏洞(异曲同工,可供参考)

https://github.com/R0rt1z2/fenrir

没用的废话

瞎逼逼

受不了死妈 Google 的完蛋操的 integrity 了,必须定期跑 sh 脚本更新 PIF 和 Key ,但即使这样隔三差五 Wallet 什么的还是会爆炸。随机抽个幸运日让你在超市或餐厅甚至地铁闸机付款的时候罚站掏钱包和银行卡,这谁受得了??不想罚站就每天刷卡前都得先掏手机看看钱包正不正常,真傻逼完了。

一直在考虑买个三星配 Shizuku 从此放弃什么自由便利隐私玩机什么的。

但巨头公司都是傻逼,三星近几代 S 手机不思进取,总有地方开倒车,我纠结了几个月不知道买 24还是25还是26 。最终准备买 26U 前突然注意到了这个漏洞。

发现除了给小米17系列等手机解 SELinux 解 BL,还能实现假回锁之类的。我对小米没啥兴趣,缺类原生适配的同时原厂系统也垃,公司也傻逼。于是买了个 一加 15 来研究。

一加

一加社区帖子,要是一加真要学傻逼小米煮那刷机的世界天要塌了。

一加15 和 15T 这镜头 deco 挺清新的,至少比马桶盖强。

我对小屏一直有兴趣但是 15T 好像很拉。。。

OnePlus 15OnePlus 15T
电池7300mAh 双电芯7500mAh 单电芯
屏幕京东方天马(斜视可能发绿)
马达08160809
声音对称双扬听筒双扬(砍掉顶部扬声器)
接口USB 3.0USB 2.0
前摄带超广角砍掉超广角
影像3200w1600w
频段21根17根(砍掉N79)