Domyślnie większość urządzeń z Androidem jest dostarczana z zablokowanym programem ładującym, co oznacza, że użytkownicy nie mogą flashować programu ładującego ani partycji urządzenia. W razie potrzeby Ty (oraz użytkownicy urządzenia z włączonymi opcjami programisty) możecie odblokować program ładujący, aby sflashować nowe obrazy.
Wejście do bootloadera
Aby wydawać polecenia fastboot
, musisz być w trybie bootloadera. Jednym ze sposobów, aby to zrobić, jest wysłanie polecenia adb adb reboot bootloader
. Niektóre telefony umożliwiają także ponowne uruchomienie w programie ładującym poprzez naciśnięcie kombinacji klawiszy (zwykle zmniejszanie głośności) podczas uruchamiania urządzenia.
Odblokowanie bootloadera
Będąc w trybie bootloadera, aby odblokować bootloader i umożliwić ponowne flashowanie partycji, uruchom na urządzeniu polecenie fastboot flashing unlock
. Po ustawieniu tryb odblokowania będzie kontynuowany po ponownym uruchomieniu.
Urządzenia powinny odmówić polecenia fastboot flashing unlock
chyba że get_unlock_ability
jest ustawione na 1
. Jeśli ustawiona jest na 0
, użytkownik musi uruchomić komputer na ekranie głównym, otworzyć menu Ustawienia > System > Opcje programisty i włączyć opcję odblokowania OEM (która ustawia opcję get_unlock_ability
na 1
). Po ustawieniu ten tryb będzie kontynuowany po ponownym uruchomieniu i przywróceniu danych fabrycznych.
Po wysłaniu polecenia fastboot flashing unlock
urządzenie powinno wyświetlić monit o ostrzeżenie użytkowników, że mogą napotkać problemy z nieoficjalnymi obrazami. Po potwierdzeniu ostrzeżenia przez użytkownika urządzenie powinno wykonać reset do ustawień fabrycznych, aby zapobiec nieautoryzowanemu dostępowi do danych. Program ładujący powinien zresetować urządzenie, nawet jeśli nie będzie mógł go poprawnie sformatować. Dopiero po zresetowaniu można ustawić trwałą flagę, aby można było ponownie sflashować urządzenie.
Cała pamięć RAM, która nie została jeszcze nadpisana, powinna zostać zresetowana podczas procesu fastboot flashing unlock
. Ten środek zapobiega atakom, które odczytują pozostałą zawartość pamięci RAM z poprzedniego rozruchu. Podobnie odblokowane urządzenia powinny czyścić pamięć RAM przy każdym uruchomieniu (chyba że powoduje to niedopuszczalne opóźnienie), ale powinny opuszczać region używany do ramoops
jądra.
Blokowanie bootloadera
Aby zablokować bootloader i zresetować urządzenie, uruchom na urządzeniu polecenie fastboot flashing lock
. Urządzenia przeznaczone do sprzedaży detalicznej powinny być wysyłane w stanie zablokowanym (z get_unlock_ability
zwracającą wartość 0
), aby osoby atakujące nie mogły złamać zabezpieczeń urządzenia poprzez zainstalowanie nowego systemu lub obrazu rozruchowego.
Ustawianie właściwości blokowania/odblokowywania
Właściwość ro.oem_unlock_supported
należy ustawić w czasie kompilacji w zależności od tego, czy urządzenie obsługuje odblokowanie poprzez flashowanie.
- Jeśli urządzenie obsługuje odblokowanie poprzez flashowanie, ustaw
ro.oem_unlock_supported
na1
. - Jeśli urządzenie nie obsługuje odblokowania poprzez flashowanie, ustaw
ro.oem_unlock_supported
na0
.
Jeśli urządzenie obsługuje odblokowanie poprzez flashowanie, program ładujący powinien wskazać stan blokady, ustawiając zmienną wiersza poleceń jądra androidboot.flash.locked
na 1
, jeśli jest zablokowany, lub na 0
, jeśli jest odblokowany. Tę zmienną należy ustawić w bootconfig, a nie w wierszu poleceń jądra w systemie Android 12.
W przypadku urządzeń obsługujących dm-verity użyj ro.boot.verifiedbootstate
, aby ustawić wartość ro.boot.flash.locked
na 0
; odblokowuje to program ładujący, jeśli zweryfikowany stan rozruchu jest pomarańczowy.
Ochrona sekcji krytycznych
Urządzenia powinny obsługiwać blokowanie i odblokowywanie sekcji krytycznych, które definiuje się jako wszystko, co jest potrzebne do uruchomienia urządzenia w programie ładującym. Takie sekcje mogą obejmować bezpieczniki, wirtualne partycje dla koncentratora czujników, program ładujący pierwszego stopnia i inne. Aby zablokować sekcje krytyczne, należy użyć mechanizmu, który uniemożliwia kodowi (jądro, obraz odzyskiwania, kod OTA itp.) działającemu na urządzeniu celowe modyfikowanie jakiejkolwiek sekcji krytycznej. OTA nie powinny aktualizować sekcji krytycznych, jeśli urządzenie znajduje się w stanie krytycznym blokady.
Przejście ze stanu zablokowanego do odblokowanego powinno wymagać fizycznej interakcji z urządzeniem. Ta interakcja jest podobna do skutków uruchomienia polecenia fastboot flashing unlock
, ale wymaga od użytkownika naciśnięcia fizycznego przycisku na urządzeniu. Urządzenia nie powinny umożliwiać programowego przejścia od lock critical
do unlock critical
bez interakcji fizycznej, a urządzenia nie powinny być wysyłane w stanie unlock critical
.