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 為例:
- 用户通過
fastboot oem unlock發送解鎖命令。 - Fastboot 模式下的 Secondary Bootloader(SBL/XBL) 會請求用户確認(擦除數據)。
- SBL/XBL 向 Qualcomm Secure Execution Environment(QSEE, TrustZone) 發送解鎖請求。
- QSEE 調用 PBL 對接的安全熔絲編程接口(OEM 控制)燒錄
BOOT_UNLOCK=1。 - 解鎖完成, PBL 在啓動鏈中會跳過 OEM Key 驗證,或者採用開發者密鑰(用於允許第三方鏡像)。
NOTEPBL 自身不會被修改,但它的行為會因熔絲位(Fuse Bit)的狀態而改變。
熔斷機制
個人覺得熔斷機制挺有趣的,簡單講講:
在硅片集成電路內部,設計了由薄金屬或多晶硅工藝實現的特殊可控連線。這條連線在出廠時是導通的,芯片運行時可通過高電壓/電流或激光能量將其永久斷開(或改變其物理狀態),從而記錄一個“1”或“0”的狀態。
基於其是在物理層面的熔斷,因此無法恢復。 比如Samsung Knox
Samsung Knox
流程
以Bootloader解鎖為例:
-
用户在 Download Mode 下選擇 “OEM Unlock” 並確認
-
當前運行在 SBL(或 ABL)階段的 Bootloader 向 TrustZone Secure Monitor 發起 SMC(Secure Monitor Call) 請求:
`smc_call(SMC_CMD_BLOW_FUSE, KNOX_WARRANTY_BIT_ID);` -
TrustZone 內的安全固件(TZSW)通過 eFuse Controller 選中對應的熔絲行列地址
-
硬件打開 VPP 高壓電源軌(通常在芯片設計時是隔離狀態,只在安全狀態下可用,防止自己電自己)
-
在一個很短的時間內向該熔絲單元施加大電流/高壓
-
熔絲鏈路永久斷開(熔斷),邏輯狀態從 0 → 1
-
把新狀態Latch到一個只讀寄存器(Boot ROM 在每次啓動時讀取)
恭喜你!你的手機將會…
- Samsung Pay/Samsung Pass 永久不可用
- 安全文件夾功能無法使用
- 保修失效 …
NOTE理論上可以燒寫另一個位表示重新鎖定(部分 SoC 採用雙位方案 LOCK/UNLOCK),但是我不懂捏
IMPORTANT如果你打算購入Samsung的二手機,需要注意這一點,以免一失足成千古恨。
end~😌
Footnotes
-
這段Boot Rom代碼寫死在SoC內部的Mask Rom裏,無法更改。 ↩