O Android 7.1+ tem um modo de “detecção de pânico” que detecta pressionamentos frenéticos do botão Voltar

O Android Nougat (7.1+) possui um modo de detecção de pânico que detecta se o usuário está pressionando freneticamente o botão Voltar. Leia mais para ouvir o que ele faz.

Embora muitos leitores de sites centrados no Android, como o nosso, tenham menos probabilidade de encontrar situações em que um aplicativo não autorizado compromete seu sistema, o mesmo pode não ser verdade para o geral população. Quase todas as semanas ouvimos vários pesquisadores de segurança sobre novos malwares direcionados aos usuários do Android. A maioria desses ataques maliciosos pode ser evitada inspecionando as permissões ou evitando a instalação de aplicativos com aparência incompleta, e embora recomendemos que nossos leitores tomem a segurança de seus telefones com as próprias mãos, o Google é responsável por proteger todos os Android telefone. Para esse fim, a empresa introduziu discretamente um novo recurso de segurança no Android 7.1 Nougat chamado “detecção de pânico"que escuta vários pressionamentos do botão Voltar em sucessão e retorna o usuário à tela inicial.

Muito simplesmente, se um aplicativo nocivo tentar sequestrar a tela do usuário e impedir que ele saia (talvez implementando um serviço de acessibilidade para interceptar todos os eventos principais), o próprio Android substituirá o aplicativo para trazer de volta o tela inicial. O usuário pode então desinstalar o aplicativo malicioso do inicializador.

Esse recurso passou despercebido, o que é compreensível, já que o Google provavelmente não gostaria de anunciar ao mundo uma maneira de destruir aplicativos maliciosos. Mas uma rápida olhada no código-fonte aberto do Android revela como esse recurso simples funciona nos dispositivos que o suportam.


Examinando o Código

Em primeiro lugar, só porque o seu dispositivo está executando o Android 7.1+ não significa que esse comportamento de detecção de pânico esteja realmente ativado. O valor que determina se o recurso está ativado pode ser encontrado no arquivo config.xml arquivo dentro do APK SystemUI.


<integername="config_backPanicBehavior">0integer>

Por padrão, a reação do Android ao pressionar o botão Voltar em pânico é não fazer nada. Se o valor inteiro de config_backPanicBehavior está definido como 1, no entanto, é aí que a nova medida de proteção do Android entra em ação.

Dentro de PhoneWindowManager.java podemos ver a maior parte de como esse recurso é implementado. Em primeiro lugar, o arquivo define duas coisas: quantos pressionamentos do botão Voltar são necessários para que o sistema determine que o usuário está “em pânico” e então qual ação tomar com base nesse estado.

// Number of presses needed before we induce panic press behavior on the back button
staticfinalint PANIC_PRESS_BACK_COUNT = 4;
staticfinalint PANIC_PRESS_BACK_NOTHING = 0;
staticfinalint PANIC_PRESS_BACK_HOME = 1;

Por padrão, o sistema requer quatro pressionamentos consecutivos do botão Voltar para entrar no modo de pânico. Se a função usa ou não o valor inteiro de PANIC_PRESS_BACK_NOTHING ou PANIC_PRESS_BACK_HOME é determinado pelo valor no arquivo de configuração no APK SystemUI.

Independentemente desse valor, cada pressionamento múltiplo do botão Voltar é verificado para ver se contará como um pressionamento de pânico. Primeiro, o sistema intercepta o pressionamento para baixo para o KEYCODE_BACK evento de tecla e verifica se o sistema está ou não configurado para verificar pressionamentos múltiplos ou longos da tecla. Em seguida, o sistema verifica se deve ou não passar o pressionamento para cima do mesmo evento de tecla KEYCODE_BACK para o aplicativo do usuário.

No interceptBackKeyDown() método, se o contador de pressionamentos da tecla Voltar estiver entre 1 e 3, o sistema ignora o tempo limite de detecção de toque múltiplo, pois a detecção de pânico requer pelo menos 4 toques para que qualquer ação seja tomada.

Em seguida, quando o usuário remover o dedo da tecla Voltar, o que aciona um evento para cima, o interceptBackKeyUp adiciona 1 ao contador da tecla Voltar. Em seguida, ele coloca uma mensagem na fila por 300 milissegundos no futuro. A razão para isso é porque o sistema está reservando um período de atraso de 300 milissegundos ao decidir se o pressionamento do botão Voltar faz parte de um evento de pressionamento múltiplo. Se for, então o usuário pode entrar em pânico ao pressionar o botão para que o sistema não envie o evento chave para o aplicativo do usuário.

O valor do tempo limite de multipressão de 300 ms é armazenado na configuração segura "multi_press_timeout" como mostrado abaixo.

/**
* The duration in milliseconds between the first tap's up event and the second tap's
* down event for an interaction to be considered part of the same multi-press.
* @hide
*/
publicstaticfinal String MULTI_PRESS_TIMEOUT = "multi_press_timeout";

Por padrão, esse valor é definido como 300 ms.

/**
* Defines the default duration in milliseconds between the first tap's up event and the second
* tap's down event for an interaction to be considered part of the same multi-press.
*/
privatestaticfinalint DEFAULT_MULTI_PRESS_TIMEOUT = 300

Então, se um pressionamento múltiplo for realmente detectado (> 1 botão Voltar pressionado para cima/para baixo em 300 ms), o sistema chama o backMultiPressAction método para determinar que ação tomar. Finalmente, o contador do botão Voltar é redefinido para 0.

Embora seja um recurso muito pequeno e não divulgado, ainda é bom ver no que o Google está trabalhando nos bastidores para tornar o Android mais seguro para o usuário médio.