Por padrão, a maioria dos dispositivos Android é fornecida 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 do desenvolvedor ativadas podem desbloquear o carregador de inicialização para atualizar novas imagens.
Acesse 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 o carregador de inicialização pressionando uma combinação de teclas
(geralmente diminuir o volume) ao inicializar o dispositivo.
Desbloquear o carregador de inicialização
No modo do carregador de inicialização, execute o comando fastboot flashing unlock
no dispositivo para desbloqueá-lo e permitir que as partições sejam atualizadas novamente. Após
a configuração, 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 ela estiver definida como 0
, o usuário precisará inicializar para a
tela inicial. Abra o menu Configurações > Sistema > Opções do desenvolvedor
e ative a opção Desbloqueio de OEM, que define get_unlock_ability
como 1
. Após a configuração, esse modo persiste após as reinicializações e redefinições para a
configuração original.
Quando o comando fastboot flashing unlock
é enviado, o dispositivo precisa solicitar
que os usuários avisem que podem encontrar problemas com imagens não oficiais.
Depois que o usuário confirmar o aviso, o dispositivo precisará redefinir
para a configuração original para evitar acesso não autorizado a dados. O carregador de inicialização precisa redefinir o
dispositivo mesmo que não seja possível reformatá-lo corretamente. Somente após uma redefinição, a
sinalização persistente pode ser definida para que o dispositivo possa ser atualizado novamente.
Toda a RAM que ainda não foi substituída 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 tempo de build com base
na compatibilidade do dispositivo com o desbloqueio com atualização flash.
- Se o dispositivo oferecer suporte ao desbloqueio com flash, defina
ro.oem_unlock_supported
como1
. - Se o dispositivo não tiver suporte ao desbloqueio com flash, defina
ro.oem_unlock_supported
como0
.
Se o dispositivo for compatível com o desbloqueio com 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 bloqueado, ou como 0
, se desbloqueado. Essa variável
precisa ser definida no bootconfig em vez de 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 verificado 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 conforme o 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, você precisa usar 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 podem atualizar seções críticas se o dispositivo estiver em estado crítico de bloqueio.
A transição do estado bloqueado para o desbloqueado precisa exigir uma interação
física com o dispositivo. Essa interação é semelhante aos efeitos da
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
.