superturtlee/gbl_root_canoe
GitHub: superturtlee/gbl_root_canoe
基于 EDK2 修补高通 ABL 引导镜像的 EFI 注入工具,用于在骁龙 8 Gen 5 设备上伪装 Bootloader 锁定状态以绕过解锁检测。
Stars: 917 | Forks: 236
# GBL Root Canoe
[中文版](README_zh.md)
`gbl_root_canoe` 是一个基于 EDK2 的工作区,用于修补 Qualcomm ABL (Android Bootloader) 镜像中的 EFI 应用程序。它利用 GBL (Generic Bootloader Loader) 漏洞来注入自定义 EFI,主要用于在骁龙 8 Gen 5 / 8 Elite (Gen 5) 设备上实现**伪装已锁定 Bootloader** 的状态,以绕过 Bootloader 解锁检测。修补后的 EFI 通常会被刷入 `efisp` 分区。
## 构建指南
本节面向希望从源码编译该工具包的开发者。
### 前置条件
你必须在 **Linux** 主机上构建此项目:
- `gcc` / `clang`, `lld`, `make`, `zip`, `python3`
- `liblzma-dev`(用于编译 `extractfv`)
- **Android NDK**(运行 `make build_module` 为 Android 交叉编译工具时需要)
- **MinGW-w64**
### 构建目标
**注意:** 你**不需要**提供 `abl.img` 即可构建可分发的工具包或 Magisk 模块。
- **`make target_toolkit_linux`**
构建 EDK2 原生 payload (`loader.elf`) 并为 Linux 编译修补工具(`extractfv`、`patch_abl`、`elf_inject` 等)。
- **`make target_toolkit_windows`**
类似于 `dist_loader`,但使用 MinGW-w64 将修补工具交叉编译为 Windows `.exe` 程序。
- **`make target_magisk_module`**
使用你的 NDK 为 Android 交叉编译修补工具,并构建 EDK2 payload。
- **`make target_generic_efi`**
内嵌修补工具,旨在兼容多种设备型号。然而,其对高版本的兼容性较差,正逐渐被弃用。
## 用户指南
有关更详细的说明,请参阅 [Wiki](https://github.com/superturtlee/gbl_root_canoe/wiki)。
### 1. 使用 Magisk 模块(设备端)
Magisk 模块旨在直接在已 root 的 Android 设备上运行。
**要求:**
- 设备必须为骁龙 8 Gen 5 / 8 Elite (Gen 5)。
- Bootloader 必须已解锁。
- Kernel 绝不能带有 Baseband Guard。
**安装与使用:**
通过 root 管理器(如 KernelSU、Magisk 或 APatch)刷入 Magisk 模块时,自定义脚本会通过音量键与你进行交互:
- **音量加(首次安装):** 脚本会自动提取当前的 `.abl` 镜像,对其进行修补,并将修补后的文件直接刷入 `/dev/block/by-name/efisp`。此操作完成后,你必须重启进入 Recovery 模式并**格式化 Data**。再次启动后,再次安装此模块(第二次选择音量减)以完成安装。
- **音量减(OTA 保留或格式化后):** 用于在 OTA 更新后保留 BL 版本。在进行 OTA 更新前,使用该模块自动降级 ABL,然后重启系统。
### 2. 使用 PC 工具包(Linux / Windows)
如果你下载了 `target_toolkit_linux` 或 `target_toolkit_windows` zip 文件:
1. 在 PC 上解压工具包 zip。
2. 将你设备的官方 `abl.img` 放入工具包的 `images/`(或 `images\`)目录中。
3. **Linux:** 运行 `bash build.sh`(或 `make build`)。**Windows:** 运行 `build.bat`。
4. 脚本将提取、修补并注入自定义 payload,输出修改后的文件 `ABL_with_superfastboot.efi`。(检查输出日志;如果提示 "Warning: Failed to patch ABL GBL",则说明设备不易受此漏洞影响,需要降级 ABL)。
### 3. 使用预修补的 EFI
下载文件名中包含手机型号或代号的特定发布版本。使用压缩包中的 `ABL_with_superfastboot.efi` 或 `ABL.efi` 通过 `fastboot` 命令进行引导或刷入(例如,`fastboot flash efisp ABL_with_superfastboot.efi`)。强烈建议使用带有 `superfastboot` 的版本,以保留后备的 fastboot 刷入功能。
### 4. 使用通用 EFI(已弃用)
下载 `generic_superfastboot.efi` 并执行相关的刷入步骤。由于不同 OEM 设备功能之间存在兼容性问题和不稳定性,它在某些型号或 OS 版本上可能表现不佳,**不再推荐使用**。
### 5. OTA 升级
在重启进行 OTA 更新之前,请使用该模块刷入并保留旧的 ABL 版本。如果你正在进行大版本升级,建议勾选“Update efisp”,否则设备可能会卡在开机启动画面。
### 6. Superfastboot 使用说明
当启用了 OEM Unlocking 并且启动时出现白色警告文字时,你必须按下**音量减**以进入 Superfastboot 模式。
常用命令包括:
- **临时引导 EFI 文件(不刷入)**:`fastboot boot xxx.efi`
- **锁定与解锁(与 BL 相关)**:
- 锁定 BL,会触发数据擦除:`fastboot flashing lock`
- 解锁 BL,不擦除数据:`fastboot flashing unlock` 或 `fastboot flashing unlock_critical`
- *注意:如果 TEE 状态不一致,设备将拒绝提供数据密钥,导致数据无法访问。*
- **刷入与擦除**:
- `fastboot flash `
- `fastboot erase `
- **重启**:
- `fastboot reboot bootloader`(下次正常启动将进入官方 Fastboot)
- `fastboot reboot recovery`
- `fastboot reboot`
### 7. 不同版本说明
1. `ABL.efi`:修补后的 ABL。
2. `ABL_original`:供开发者在 IDA 中进行分析,用于错误报告。**切勿刷入**。
3. `ABL_with_superfastboot.efi`:集成了 superfastboot 的修补后 ABL。
4. `loader.elf`:superfastboot 二进制文件。未链接为 EFI 格式,旨在与 toolbox 链接。无法直接刷入。
标签:bootloader, Cutter, EDK2, EFI注入, 安卓, 客户端加密, 底层开发, 移动设备