Android 7.1+ має режим «Виявлення паніки», який розпізнає несамовиті натискання кнопок «Назад»

Android Nougat (7.1+) має режим виявлення паніки, який визначає, чи користувач відчайдушно натискає кнопку «Назад». Дізнайтеся більше, щоб почути, що він робить.

Хоча багато читачів веб-сайтів, орієнтованих на Android, таких як наш власний, рідше зустрічають Ситуації, коли шахрайська програма скомпрометує їхню систему, те саме може бути невірним для загального населення. Майже щотижня ми чуємо від різних дослідників безпеки про нові шкідливі програми, спрямовані на користувачів Android. Більшості цих зловмисних атак можна уникнути, перевіряючи дозволи або уникаючи встановлення схематичних програм, а також Хоча ми рекомендуємо нашим читачам взяти безпеку свого телефону у власні руки, Google відповідає за безпеку кожного Android телефон. З цією метою компанія тихо представила нову функцію безпеки в Android 7.1 Nougat під назвою "виявлення паніки", який відстежує кілька послідовних натискань кнопки "Назад", а потім повертає користувача на головний екран.

Простіше кажучи, якщо шахрайська програма намагається захопити екран користувача та не дати користувачу вийти (можливо, через впровадження служби доступності для перехоплення всіх ключових подій), Android сам замінить програму, щоб повернути Домашній екран. Потім користувач, імовірно, може видалити шкідливу програму з панелі запуску.

Ця функція не була помічена, цілком зрозуміло, тому що Google, ймовірно, не захоче рекламувати у світі один із способів видалення шкідливих програм. Але швидкий огляд відкритого коду Android показує, як ця проста функція працює на пристроях, які її підтримують.


Вивчення Кодексу

По-перше, те, що ваш пристрій працює під керуванням Android 7.1+, не означає, що ця поведінка виявлення паніки насправді ввімкнена. Значення, яке визначає, чи ввімкнено функцію, можна знайти в config.xml у файлі SystemUI APK.


<integername="config_backPanicBehavior">0integer>

За замовчуванням реакція Android на панічне натискання кнопки «Назад» — нічого не робити. Якщо ціле значення config_backPanicBehavior встановлюється на 1, однак тут починає діяти нова міра захисту Android.

В межах PhoneWindowManager.java ми можемо побачити основну частину того, як ця функція реалізована. Перш за все, файл визначає дві речі: скільки натискань кнопки «Назад» потрібно, щоб система визначила, що користувач «панікує», а потім, яку дію вжити на основі цього стану.

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

За замовчуванням системі потрібно 4 послідовних натискання кнопки «Назад», щоб увійти в режим паніки. Чи використовує функція ціле значення PANIC_PRESS_BACK_NOTHING або PANIC_PRESS_BACK_HOME визначається значенням у файлі конфігурації в APK SystemUI.

Незалежно від цього значення, кожне багаторазове натискання кнопки «Назад» перевіряється, чи вважатиметься воно натисканням у паніці. Спочатку система перехоплює натискання вниз для KEYCODE_BACK подія клавіші та перевіряє, чи налаштовано систему на перевірку багаторазових або тривалих натискань клавіші. Потім система перевіряє, чи слід передавати програмі користувача натискання вгору для тієї самої події клавіші KEYCODE_BACK.

В interceptBackKeyDown() методу, якщо лічильник натискань клавіші «Назад» знаходиться між 1 і 3, тоді система пропускає тайм-аут виявлення багаторазового натискання, оскільки виявлення паніки потребує принаймні 4 натискань для будь-якої дії.

Далі, коли користувач прибирає палець із клавіші «Назад», яка запускає подію «вгору», interceptBackKeyUp додає 1 до лічильника клавіш "Назад". Потім він додає повідомлення в чергу на 300 мілісекунд у майбутньому. Причина цього полягає в тому, що система резервує період затримки в 300 мілісекунд, коли вирішує, чи є натискання кнопки «Назад» частиною події багаторазового натискання. Якщо це так, то користувач може панікувати, натискаючи кнопку, тому система не повинна надсилати подію ключа в програму користувача.

Значення тайм-ауту багаторазового натискання 300 мс зберігається в безпечних налаштуваннях "multi_press_timeout", як показано нижче.

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

За замовчуванням це значення встановлено на 300 мс.

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

Тоді, якщо багаторазове натискання справді виявлено (>1 повне натискання кнопки «Назад» вгору/вниз протягом 300 мс), система викликає backMultiPressAction метод, щоб визначити, яку дію вжити. Нарешті, лічильник кнопки «Назад» скидається на 0.

Хоча це дуже незначна функція, яка не розголошується, все ж приємно бачити, над чим Google працює за лаштунками, щоб зробити Android більш безпечним для звичайного користувача.