Android 7.1+ dispose d'un mode « Détection de panique » qui détecte les pressions frénétiques sur le bouton Retour

Android Nougat (7.1+) dispose d'un mode de détection de panique qui détecte si l'utilisateur appuie frénétiquement sur le bouton de retour. Lisez la suite pour savoir ce qu'il fait.

Alors que de nombreux lecteurs de sites Web centrés sur Android, comme le nôtre, sont moins susceptibles de tomber sur Dans les situations où une application malveillante compromet leur système, il se peut qu'il n'en soit pas de même pour les applications générales. population. Presque chaque semaine, divers chercheurs en sécurité nous parlent de nouveaux logiciels malveillants ciblant les utilisateurs d'Android. La plupart de ces attaques malveillantes peuvent être évitées en inspectant les autorisations ou en évitant d'installer des applications d'apparence sommaire, et même si nous recommandons à nos lecteurs de prendre en main la sécurité de leur téléphone, Google est responsable de la sécurité de chaque appareil Android. téléphone. À cette fin, la société a discrètement introduit une nouvelle fonctionnalité de sécurité dans Android 7.1 Nougat appelée «

détection de panique" qui écoute plusieurs pressions successives sur le bouton de retour, puis ramène l'utilisateur à son écran d'accueil.

Tout simplement, si une application malveillante tente de détourner l'écran de l'utilisateur et de l'empêcher de partir (peut-être en implémentant un service d'accessibilité pour intercepter tous les événements clés), Android remplacera lui-même l'application pour ramener le écran d'accueil. L'utilisateur peut alors vraisemblablement désinstaller l'application malveillante du lanceur.

Cette fonctionnalité est passée inaperçue, ce qui est compréhensible, car Google ne voudrait probablement pas faire de publicité au monde de la manière dont il supprime les applications malveillantes. Mais un rapide coup d'œil au code open source d'Android révèle comment cette fonctionnalité simple fonctionne sur les appareils qui la prennent en charge.


Examiner le code

Tout d'abord, ce n'est pas parce que votre appareil exécute Android 7.1+ que ce comportement de détection de panique est réellement activé. La valeur qui détermine si la fonctionnalité est activée se trouve dans le config.xml fichier dans l’APK SystemUI.


<integername="config_backPanicBehavior">0integer>

Par défaut, la réaction d'Android aux pressions de panique sur le bouton de retour est de ne rien faire. Si la valeur entière de config_backPanicBehavior est défini sur 1, cependant, c'est là que la nouvelle mesure de protection d'Android entre en jeu.

Dans PhoneWindowManager.java nous pouvons voir l'essentiel de la façon dont cette fonctionnalité est implémentée. Tout d'abord, le fichier définit deux choses: combien de pressions sur le bouton de retour sont nécessaires pour que le système détermine que l'utilisateur "panique", puis quelle action entreprendre en fonction de cet état.

// 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;

Par défaut, le système nécessite 4 pressions consécutives sur le bouton Retour pour passer en mode panique. Que la fonction utilise ou non la valeur entière de PANIC_PRESS_BACK_NOTHING ou PANIC_PRESS_BACK_HOME est déterminé par la valeur du fichier de configuration dans l'APK SystemUI.

Quelle que soit cette valeur, chaque pression multiple sur le bouton retour est vérifiée pour voir si elle compte comme une pression de panique. Tout d'abord, le système intercepte la pression vers le bas pour le KEYCODE_BACK événement de touche et vérifie si le système est configuré ou non pour vérifier les pressions multiples ou les pressions longues de la touche. Ensuite, le système vérifie s'il doit ou non transmettre la pression vers le haut pour le même événement de touche KEYCODE_BACK à l'application utilisateur.

Dans le interceptBackKeyDown() Dans cette méthode, si le compteur d'appuis sur la touche retour est compris entre 1 et 3, le système ignore le délai d'attente de détection des pressions multiples car la détection de panique nécessite au moins 4 appuis pour qu'une action soit entreprise.

Ensuite, une fois que l'utilisateur retire son doigt de la touche retour, ce qui déclenche un événement up, le interceptBackKeyUp ajoute 1 au compteur de clé arrière. Il met ensuite un message en file d'attente pendant 300 millisecondes dans le futur. La raison en est que le système réserve un délai de 300 millisecondes pour décider si les pressions sur le bouton de retour font partie d'un événement de pression multiple. Si tel est le cas, l'utilisateur peut paniquer en appuyant sur le bouton et le système ne devrait donc pas envoyer l'événement clé à l'application utilisateur.

La valeur du délai d'attente de pression multiple de 300 ms est stockée dans le paramètre sécurisé "multi_press_timeout" comme indiqué ci-dessous.

/**
* 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";

Par défaut, cette valeur est définie sur 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

Ensuite, si un appui multiple est effectivement détecté (> 1 appui complet sur le bouton retour en haut/bas en 300 ms), le système appelle le backMultiPressAction méthode pour déterminer les mesures à prendre. Enfin, le compteur du bouton retour est réinitialisé à 0.

Bien qu'il s'agisse d'une fonctionnalité très mineure et non publiée, il est toujours agréable de voir sur quoi Google travaille en coulisses afin de rendre Android plus sécurisé pour l'utilisateur moyen.