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 ou as partições do dispositivo. Se necessário, você (e os usuários do dispositivo com as opções para desenvolvedores ativadas) podem 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 que você reinicie no carregador de inicialização pressionando uma combinação de teclas
(geralmente o volume para baixo) durante a inicialização do 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 reflashadas, execute o comando fastboot flashing unlock
no dispositivo. Após
a configuração, o modo de desbloqueio persiste nas reinicializações.
Os dispositivos precisam negar o comando fastboot flashing unlock
, a menos que o
get_unlock_ability
esteja definido como 1
. Se definido como 0
, o usuário precisa inicializar na
tela inicial, abrir o menu Configurações > Sistema > Opções do desenvolvedor
e ativar a opção Desbloqueio de OEM, que define 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
for enviado, o dispositivo vai pedir
aos usuários para avisar que eles podem encontrar problemas com imagens não oficiais.
Depois que o usuário confirmar o aviso, o dispositivo precisará fazer uma redefinição
de dados para a configuração original para evitar o acesso não autorizado a dados. O carregador de inicialização precisa redefinir o
dispositivo, mesmo que não consiga reformá-lo corretamente. Somente após uma redefinição, a
flag persistente pode ser definida para que o dispositivo possa ser reflashado.
Toda a RAM que ainda não foi sobrescrita precisa ser redefinida durante o
processo fastboot flashing unlock
. Essa medida impede ataques que leem
o conteúdo restante da RAM da inicialização anterior. Da mesma forma, os dispositivos desbloqueados precisam
limpar a RAM a cada inicialização (a menos que isso crie um atraso inaceitável), mas
precisam 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 os 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
na compatibilidade do dispositivo com o desbloqueio por piscar.
- Se o dispositivo oferecer suporte ao desbloqueio com flash, defina
ro.oem_unlock_supported
como1
. - Se o dispositivo não oferecer suporte ao desbloqueio de atualização flash, defina
ro.oem_unlock_supported
como0
.
Se o dispositivo oferecer suporte ao desbloqueio de atualização flash, o carregador de inicialização precisará 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, e não na linha de comando do kernel no Android 12.
Para dispositivos compatíveis com 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 estiver 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 tudo o que é 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 sensores, carregador de inicialização de primeiro estágio e muito mais. Para bloquear seções críticas, use um mecanismo que impede 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 vão atualizar seções críticas se o dispositivo estiver em estado de bloqueio crítico.
A transição do estado bloqueado para o desbloqueado exige uma interação
física com o dispositivo. Essa interação é semelhante aos efeitos de
execução do 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 não podem ser enviados no estado unlock critical
.