Większość urządzeń z Androidem jest domyślnie dostarczana z zablokowanym programem rozruchowym, co oznacza, że użytkownicy nie mogą flashować programu rozruchowego ani partycji urządzenia. W razie potrzeby możesz (i użytkownicy urządzenia z włączonymi opcjami programisty) odblokować program rozruchowy, aby wgrać nowe obrazy.
Uruchamianie programu rozruchowego
Aby wydać fastboot
polecenia, musisz być w trybie programu rozruchowego. Jednym ze sposobów jest wysłanie polecenia adb adb reboot bootloader
. Niektóre telefony umożliwiają też ponowne uruchomienie w programie rozruchowym przez naciśnięcie kombinacji klawiszy (zwykle zmniejszania głośności) podczas uruchamiania urządzenia.
Odblokowywanie programu rozruchowego
Gdy urządzenie będzie w trybie programu rozruchowego, uruchom na nim polecenie fastboot flashing unlock
, aby odblokować program rozruchowy i umożliwić ponowne flashowanie partycji. Po ustawieniu tryb odblokowywania pozostaje aktywny po ponownym uruchomieniu urządzenia.
Urządzenia powinny odrzucać polecenie fastboot flashing unlock
, chyba że parametr get_unlock_ability
jest ustawiony na 1
. Jeśli ustawiona jest wartość 0
, użytkownik musi uruchomić ekran główny, otworzyć menu Ustawienia > System > Opcje programisty i włączyć opcję Odblokowanie OEM (która ustawia wartość get_unlock_ability
na 1
). Po ustawieniu ten tryb jest zachowywany po ponownym uruchomieniu i przywróceniu danych fabrycznych.
Po wysłaniu polecenia fastboot flashing unlock
urządzenie powinno wyświetlić użytkownikom ostrzeżenie, że mogą wystąpić problemy z nieoficjalnymi obrazami.
Gdy użytkownik potwierdzi ostrzeżenie, urządzenie powinno przywrócić dane fabryczne, aby zapobiec nieautoryzowanemu dostępowi do danych. Program rozruchowy powinien zresetować urządzenie, nawet jeśli nie może go prawidłowo sformatować. Tylko po zresetowaniu można ustawić trwałą flagę, aby można było ponownie wgrać oprogramowanie na urządzenie.
Cała pamięć RAM, która nie została jeszcze nadpisana, powinna zostać zresetowana podczas procesufastboot flashing unlock
. Zapobiega to atakom, które odczytują pozostałą zawartość pamięci RAM z poprzedniego uruchomienia. Podobnie odblokowane urządzenia powinny czyścić pamięć RAM przy każdym uruchomieniu (chyba że powoduje to niedopuszczalne opóźnienie), ale powinny pozostawiać region używany na potrzeby ramoops
jądra.
Blokowanie programu rozruchowego
Aby zablokować program rozruchowy i zresetować urządzenie, uruchom na nim polecenie fastboot flashing lock
. Urządzenia przeznaczone do sprzedaży detalicznej powinny być wysyłane w stanie zablokowanym (z wartością get_unlock_ability
zwracającą 0
), aby uniemożliwić atakującym przejęcie kontroli nad urządzeniem przez zainstalowanie nowego systemu lub obrazu rozruchowego.
Ustawianie właściwości blokowania i odblokowywania
Właściwość ro.oem_unlock_supported
należy ustawić w czasie kompilacji na podstawie tego, czy urządzenie obsługuje odblokowywanie flashowania.
- Jeśli urządzenie obsługuje odblokowywanie przez błysk, ustaw
ro.oem_unlock_supported
na1
. - Jeśli urządzenie nie obsługuje odblokowywania przez flashowanie, ustaw wartość
ro.oem_unlock_supported
na0
.
Jeśli urządzenie obsługuje odblokowywanie przez flashowanie, program rozruchowy powinien wskazywać stan blokady, ustawiając zmienną wiersza poleceń jądra androidboot.flash.locked
na 1
, jeśli urządzenie jest zablokowane, lub na 0
, jeśli jest odblokowane. W Androidzie 12 tę zmienną należy ustawić w bootconfig, a nie w wierszu poleceń jądra.
W przypadku urządzeń obsługujących dm-verity użyj ro.boot.verifiedbootstate
, aby ustawić wartość ro.boot.flash.locked
na 0
. Odblokuje to program rozruchowy, jeśli stan weryfikacji podczas uruchamiania jest pomarańczowy.
Ochrona krytycznych sekcji
Urządzenia powinny obsługiwać blokowanie i odblokowywanie kluczowych sekcji, czyli tych, które są niezbędne do uruchomienia programu rozruchowego. Takie sekcje mogą obejmować bezpieczniki, wirtualne partycje dla koncentratora czujników, program rozruchowy pierwszego etapu i inne elementy. Aby zablokować krytyczne sekcje, musisz użyć mechanizmu, który uniemożliwia kodowi (jądro, obraz odzyskiwania, kod OTA itp.) działającemu na urządzeniu celowe modyfikowanie krytycznych sekcji. Aktualizacje OTA nie powinny aktualizować krytycznych sekcji, jeśli urządzenie jest w stanie blokady krytycznej.
Przejście ze stanu zablokowanego do odblokowanego powinno wymagać fizycznej interakcji z urządzeniem. Ta interakcja jest podobna do efektów działania polecenia fastboot flashing unlock
, ale wymaga naciśnięcia fizycznego przycisku na urządzeniu. Urządzenia nie powinny umożliwiać programowego przełączania się z trybu lock critical
na unlock critical
bez fizycznej interakcji, a także nie powinny być dostarczane w stanie unlock critical
.