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

根據預設,大多數 Android 裝置都隨附鎖定的系統啟動載入程式,這表示使用者無法刷新系統啟動載入程式或裝置分區。如有需要,您 (以及已啟用開發人員選項的裝置使用者) 可以解鎖系統啟動載入程式,刷新映像檔。

登入系統啟動載入程式

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

解鎖系統啟動載入程式

進入系統啟動載入程式模式後,如要解鎖系統啟動載入程式並啟用分區重新刷新,請在裝置上執行 fastboot flashing unlock 指令。設定後,解鎖模式會在重新啟動後維持不變。

裝置應拒絕 fastboot flashing unlock 指令,除非 get_unlock_ability 設為 1。如果設為 0,使用者必須啟動主畫面,請開啟「設定」>「系統」>「開發人員選項」選單,然後啟用「OEM 解鎖」選項 (將 get_unlock_ability 設為 1)。設定後,每次重新啟動和恢復原廠設定時,這個模式都會保持不變。

傳送 fastboot flashing unlock 指令時,裝置應提示使用者警告,表示他們可能會遇到非官方圖片問題。使用者確認警告後,裝置應恢復原廠設定,以防未經授權的資料存取行為。即使裝置無法正常重新格式化,系統啟動載入程式仍應重設裝置。只有在重設完成後,才能設定永久旗標,以便重新刷新裝置。

所有未覆寫的 RAM 都應在 fastboot flashing unlock 程序中重設。這項措施可防止從上次啟動時讀取剩餘 RAM 內容的攻擊。同樣地,解鎖的裝置應在每次啟動時清除 RAM (除非這麼做建立無法接受的延遲時間),但應保留核心 ramoops 使用的區域。

鎖定系統啟動載入程式

如要鎖定系統啟動載入程式並重設裝置,請在裝置上執行 fastboot flashing lock 指令。專為零售業設計的裝置應處於鎖定狀態 (傳回 0get_unlock_ability),確保攻擊者無法藉由安裝新系統或啟動映像檔來入侵裝置。

設定鎖定和解鎖屬性

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

  • 如果裝置支援刷新解鎖功能,請將 ro.oem_unlock_supported 設為 1
  • 如果裝置不支援刷新解鎖,請將 ro.oem_unlock_supported 設為 0

如果裝置支援刷新解鎖功能,則系統啟動載入程式應透過將核心指令列變數 androidboot.flash.locked 設為 1 (如果已鎖定的話) 或 0 (如已解鎖),藉此顯示鎖定狀態。這個變數必須在 bootconfig 中設定,而非 Android 12 的核心指令列中設定。

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

保護重要區塊

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

如要從鎖定狀態轉換至解鎖狀態,就必須與裝置實際互動。這項互動與執行 fastboot flashing unlock 指令的效果類似,但使用者必須按下裝置上的實體按鈕。裝置不應允許在沒有實際互動的情況下,以程式輔助方式從 lock critical 轉換至 unlock critical,且裝置也不應寄送 unlock critical 狀態。