Por padrão, a maioria dos dispositivos Android vem com um carregador de inicialização bloqueado, o que significa que os usuários não podem atualizar o carregador de inicialização nem as partições do dispositivo. Se necessário, você (e usuários de dispositivos com as opções de desenvolvedor ativadas) pode desbloquear o carregador de inicialização para instalar novas imagens.
Acessar o carregador de inicialização
Para emitir comandos fastboot
, você precisa estar no modo de carregador de inicialização. Uma
maneira de fazer isso é enviar o comando adb adb reboot bootloader
. Alguns smartphones
também permitem reinicializar no carregador de inicialização pressionando uma combinação de teclas
(geralmente diminuir volume) ao iniciar o dispositivo.
Desbloquear o carregador de inicialização
No modo do carregador de inicialização, para desbloquear o carregador de inicialização e permitir que as partições sejam
atualizadas, execute o comando fastboot flashing unlock
no dispositivo. Depois de
definido, o modo de desbloqueio persiste entre as reinicializações.
Os dispositivos precisam negar o comando fastboot flashing unlock
, a menos que o
get_unlock_ability
esteja definido como 1
. Se estiver definido como 0
, o usuário precisará inicializar a
tela inicial, abrir o menu Configurações > Sistema > Opções do desenvolvedor
e ativar a opção Desbloqueio de OEM, que define o get_unlock_ability
como 1
. Depois da configuração, esse modo persiste em reinicializações e redefinições
de dados de fábrica.
Quando o comando fastboot flashing unlock
é enviado, o dispositivo precisa avisar
os usuários de que eles podem encontrar problemas com imagens não oficiais.
Depois que o usuário confirmar o aviso, o dispositivo vai fazer uma redefinição de dados de fábrica para evitar o acesso não autorizado. O carregador de inicialização deve redefinir o
dispositivo mesmo que não seja possível reformatá-lo corretamente. Somente depois de uma redefinição é que a
flag persistente pode ser definida para que o dispositivo possa ser reflashado.
Toda a RAM que ainda não foi substituída precisa ser redefinida durante o processo de
fastboot flashing unlock
. Essa medida evita ataques que leem
conteúdo restante da RAM da inicialização anterior. Da mesma forma, os dispositivos desbloqueados devem
limpar a RAM a cada inicialização, a menos que isso crie um atraso inaceitável, mas
devem deixar a região usada para o
ramoops
do kernel.
Bloquear o carregador de inicialização
Para bloquear o carregador de inicialização e redefinir o dispositivo, execute o comando fastboot flashing lock
no dispositivo. Os dispositivos destinados ao varejo precisam ser enviados no
estado bloqueado (com get_unlock_ability
retornando 0
) para garantir que invasores
não possam comprometer o dispositivo instalando um novo sistema ou imagem de inicialização.
Definir propriedades de bloqueio e desbloqueio
A propriedade ro.oem_unlock_supported
precisa ser definida no momento da criação com base em
se o dispositivo é compatível com o desbloqueio de restauração.
- Se o dispositivo for compatível com o desbloqueio de atualização flash, defina
ro.oem_unlock_supported
como1
. - Se o dispositivo não for compatível com o desbloqueio de atualização flash, defina
ro.oem_unlock_supported
como0
.
Se o dispositivo for compatível com o desbloqueio de atualização flash, o carregador de inicialização vai indicar o
status de bloqueio definindo a variável de linha de comando do kernel
androidboot.flash.locked
como 1
se estiver bloqueado ou como 0
se estiver desbloqueado. Essa variável
precisa ser definida no bootconfig em vez da linha de comando do kernel no Android 12.
Para dispositivos que oferecem suporte a dm-verity,
use ro.boot.verifiedbootstate
para definir o valor de ro.boot.flash.locked
como
0
. Isso desbloqueia o carregador de inicialização se o estado de inicialização verificada for laranja.
Proteger seções críticas
Os dispositivos precisam oferecer suporte ao bloqueio e desbloqueio de seções críticas, que são definidas como o que for necessário para inicializar o dispositivo no carregador de inicialização. Essas seções podem incluir fusíveis, partições virtuais para um hub de sensor, carregador de inicialização de primeiro estágio e muito mais. Para bloquear seções críticas, use um mecanismo que evite que o código (kernel, imagem de recuperação, código OTA etc.) em execução no dispositivo modifique deliberadamente qualquer seção crítica. As OTAs não podem atualizar seções críticas se o dispositivo estiver em estado crítico de bloqueio.
A transição do estado bloqueado para desbloqueado precisa exigir uma interação física com o dispositivo. Essa interação é semelhante aos efeitos de
executar o comando fastboot flashing unlock
, mas exige que o usuário pressione
um botão físico no dispositivo. Os dispositivos não podem permitir a transição programática de lock critical
para unlock critical
sem interação física, e os dispositivos não podem ser enviados no estado unlock critical
.