1221 字
6 分鐘
淺談解鎖bootloader與背後的原理

Boot Rom#

高通平台啓動流程

高通平台啓動流程

根據流程圖可以看見,在設備通電後,會首先運行PBL(Primary Boot Loader)。此時CPU會從固定地址(如ROM)執行Boot Rom代碼1,初始化最低級的硬件(如時鐘,CPU核心等)。之後他會加載SBL(Secondary Boot Loader)到SRAM,並使用Root of trust公鑰來驗證SBL的簽名。


PBL(XBL或者SBL)#

這部分便是今天要講的重點——Bootloader。他主要的流程如下:

读取Boot Mode->
初始化启动接口(UFS,USB,eMMC,NAND)->
读取下一阶段镜像->
验证数字签名(RSA+SHA-256)->
├─ 验证通过 → 加载 SBL 并跳转
└─ 验证失败 → 进入 Download Mode(刷机接口)

顯而易見,PBL的目標是最大化保護設備的安全,以下簡單講幾個有關的安全機制:

  • 簽名驗證(Signature Verification)

    • 讓所有要啓動的 Next-stage Bootloader (SBL/XBL) 都必須經過OEM Key的簽名驗證
  • 防回滾(Rollback Protection)

    • 防止刷入低於eFuse記錄版本的固件 這也是為什麼,即使你有官方簽名的舊版本固件,也無法手動刷入。這是因為其版本號低於eFuse中記錄的版本,PBL拒絕了該鏡像的加載
  • 安全模式入口(EDL/Download Mode)限制

    • 大多OEM廠商都會限制安全模式入口。限制後,新版設備可能需要配合授權服務器(如 Mi Auth、Samsung KNOX)才能刷機,PBL 會要求 PC 工具和 OEM 服務器握手,驗證授權 Token。
    • 這也是為什麼售後能幫你刷機降級。員工會使用公司提供的PC工具,驗證其員工身份,得到授權後可以進入該模式進行刷機。但由於內部內鬼等原因,時不時會有內部Token放出來出售(點名表揚小米😅)

你會發現,在流程中,他會驗證鏡像是否經過OEM/廠家的簽名認證。

這意味着——無論你使用什麼刷機工具(Fastboot、MiFlash等)去刷入固件,最終能否啓動,取決於PBL是否認可該鏡像的簽名。

這也是為什麼你要在解鎖Bootloader後,才能刷入第三方ROM。

PBL與Bootloader鎖#

Bootloader的鎖定狀態是由eFuse/OTP(One-Time Programmable Memory)記錄,在PBL啓動時會讀取這些硬件熔絲位(Fuse Bits)

在寄存器中一般會記錄一下信息:

  • BOOT_UNLOCK:表示當前解鎖狀態(0 = Locked, 1 = Unlocked)
  • OEM_KEY_HASH:廠商公鑰的哈希值,用於簽名驗證
  • ANTI-ROLLBACK_VER:防回滾版本號。用於驗證鏡像版本,確保鏡像版本 ≥ eFuse版本,防止降級到存在漏洞的固件。

解鎖Bootloader流程#

以 Android + Qualcomm SoC 為例:

  1. 用户通過 fastboot oem unlock 發送解鎖命令。
  2. Fastboot 模式下的 Secondary Bootloader(SBL/XBL) 會請求用户確認(擦除數據)。
  3. SBL/XBL 向 Qualcomm Secure Execution Environment(QSEE, TrustZone) 發送解鎖請求。
  4. QSEE 調用 PBL 對接的安全熔絲編程接口(OEM 控制)燒錄 BOOT_UNLOCK=1
  5. 解鎖完成, PBL 在啓動鏈中會跳過 OEM Key 驗證,或者採用開發者密鑰(用於允許第三方鏡像)。
NOTE

PBL 自身不會被修改,但它的行為會因熔絲位(Fuse Bit)的狀態而改變。


熔斷機制#

個人覺得熔斷機制挺有趣的,簡單講講:

在硅片集成電路內部,設計了由薄金屬或多晶硅工藝實現的特殊可控連線。這條連線在出廠時是導通的,芯片運行時可通過高電壓/電流或激光能量將其永久斷開(或改變其物理狀態),從而記錄一個“1”或“0”的狀態。

基於其是在物理層面的熔斷,因此無法恢復。 比如Samsung Knox

Samsung Knox#

流程#

以Bootloader解鎖為例:

  1. 用户在 Download Mode 下選擇 “OEM Unlock” 並確認

  2. 當前運行在 SBL(或 ABL)階段的 Bootloader 向 TrustZone Secure Monitor 發起 SMC(Secure Monitor Call) 請求:

    `smc_call(SMC_CMD_BLOW_FUSE, KNOX_WARRANTY_BIT_ID);`
  3. TrustZone 內的安全固件(TZSW)通過 eFuse Controller 選中對應的熔絲行列地址

  4. 硬件打開 VPP 高壓電源軌(通常在芯片設計時是隔離狀態,只在安全狀態下可用,防止自己電自己)

  5. 在一個很短的時間內向該熔絲單元施加大電流/高壓

  6. 熔絲鏈路永久斷開(熔斷),邏輯狀態從 0 → 1

  7. 把新狀態Latch到一個只讀寄存器(Boot ROM 在每次啓動時讀取)

恭喜你!你的手機將會…

  • Samsung Pay/Samsung Pass 永久不可用
  • 安全文件夾功能無法使用
  • 保修失效 …
NOTE

理論上可以燒寫另一個位表示重新鎖定(部分 SoC 採用雙位方案 LOCK/UNLOCK),但是我不懂捏

IMPORTANT

如果你打算購入Samsung的二手機,需要注意這一點,以免一失足成千古恨。

end~😌

Footnotes#

  1. 這段Boot Rom代碼寫死在SoC內部的Mask Rom裏,無法更改。

淺談解鎖bootloader與背後的原理
https://brizen.dpdns.org/posts/bootloader-unlock/
作者
Cooper Liu
發佈於
2025-08-29
許可協議
CC BY-NC-SA 4.0