鎖定及解鎖系統啟動載入程式

根據預設,大多數 Android 裝置出貨時都會鎖定系統啟動載入程式,也就是說,使用者無法刷入系統啟動載入程式或裝置分割區。如有需要,您 (和已啟用「開發人員選項」的裝置使用者) 可以解鎖啟動載入程式,以便刷新新的映像檔。

進入系統啟動載入程式

如要發出 fastboot 指令,必須處於系統啟動載入程式模式。其中一種方法是傳送 adb 指令 adb reboot bootloader。部分手機也允許在啟動裝置時按下按鍵組合 (通常是調低音量鍵),重新啟動並進入系統啟動載入程式。

解鎖系統啟動載入程式

進入啟動載入程式模式後,請在裝置上執行 fastboot flashing unlock 指令,解鎖啟動載入程式並重新刷寫分割區。設定完成後,解鎖模式會在重新啟動後保留。

除非 get_unlock_ability 設為 1,否則裝置應拒絕 fastboot flashing unlock 指令。如果設為 0,使用者必須啟動至主畫面,開啟「設定」>「系統」>「開發人員選項」選單,並啟用「OEM 解鎖」選項 (這會將 get_unlock_ability 設為 1)。設定完成後,這個模式會在重新啟動和恢復原廠設定後繼續生效。

傳送 fastboot flashing unlock 指令時,裝置應提示使用者,警告他們可能會遇到非官方圖片的問題。使用者確認警告訊息後,裝置應會恢復原廠設定,以防未經授權的帳戶存取資料。即使無法正確重新格式化裝置,啟動載入程式也應重設裝置。只有在重設後,才能設定持續性標記,以便重新刷寫裝置。

所有尚未覆寫的 RAM 都應在 fastboot flashing unlock 過程中重設。這項措施可防止攻擊者讀取先前啟動時的剩餘 RAM 內容。同樣地,解鎖的裝置應在每次啟動時清除 RAM (除非這會造成無法接受的延遲),但應保留用於核心的ramoops區域。

鎖定系統啟動載入程式

如要鎖定系統啟動載入程式並重設裝置,請在裝置上執行 fastboot flashing lock 指令。零售裝置應以鎖定狀態 (含 get_unlock_ability傳回 0) 出貨,確保攻擊者無法安裝新的系統或啟動映像檔,進而入侵裝置。

設定鎖定和解鎖屬性

ro.oem_unlock_supported 屬性應根據裝置是否支援刷機解鎖,在建構時設定。

  • 如果裝置支援閃爍解鎖,請將 ro.oem_unlock_supported 設為 1
  • 如果裝置不支援閃爍解鎖,請將 ro.oem_unlock_supported 設為 0

如果裝置支援刷機解鎖,則開機載入程式應設定核心指令列變數 androidboot.flash.locked,將鎖定狀態設為 1 (已鎖定) 或 0 (已解鎖)。在 Android 12 中,這個變數必須在 bootconfig 中設定,而不是在核心指令列中設定。

如果裝置支援 dm-verity,請使用 ro.boot.verifiedbootstatero.boot.flash.locked 的值設為 0,這樣一來,如果驗證開機狀態為橘色,系統就會解鎖啟動載入程式。

保護重要部分

裝置應支援鎖定和解鎖重要區段,這些區段定義為將裝置啟動至系統啟動載入程式所需的任何項目。這類區段可能包括保險絲、感應器中樞的虛擬分割區、第一階段開機載入程式等。如要鎖定重要區段,您必須使用某種機制,防止裝置上執行的程式碼 (核心、復原映像檔、OTA 程式碼等) 刻意修改任何重要區段。如果裝置處於鎖定重大狀態,OTA 應無法更新重要部分。

從鎖定狀態轉換為解鎖狀態時,必須與裝置進行實體互動。這項互動與執行 fastboot flashing unlock 指令的效果類似,但使用者必須按下裝置上的實體按鈕。裝置不應允許以程式輔助方式從 lock critical 轉換為 unlock critical,且不得處於 unlock critical 狀態。