Android Nougat (7.1+) имеет режим обнаружения паники, который определяет, нажимает ли пользователь лихорадочно кнопку «Назад». Прочтите больше, чтобы узнать, что он делает.
Хотя многие читатели веб-сайтов, ориентированных на Android, таких как наш, с меньшей вероятностью В ситуациях, когда мошенническое приложение ставит под угрозу их систему, то же самое может быть не верно для общего Население. Почти каждую неделю мы слышим от различных исследователей безопасности о новых вредоносных программах, нацеленных на пользователей Android. Большинства этих вредоносных атак можно избежать, проверив разрешения или избегая установки сомнительных приложений. Хотя мы рекомендуем нашим читателям взять безопасность своего телефона в свои руки, Google несет ответственность за безопасность каждого устройства Android. телефон. С этой целью компания незаметно представила новую функцию безопасности в Android 7.1 Nougat под названием «обнаружение паники", который прослушивает несколько последовательных нажатий кнопки "Назад", а затем возвращает пользователя на главный экран.
Проще говоря, если мошеннические приложения попытаются захватить экран пользователя и не дать пользователю выйти из него (возможно, с помощью внедрение службы доступности для перехвата всех ключевых событий), Android сам переопределит приложение, чтобы вернуть домашний экран. Затем пользователь, вероятно, сможет удалить вредоносное приложение из панели запуска.
Эта функция осталась незамеченной, по понятным причинам, поскольку Google, скорее всего, не захочет рекламировать миру способ уничтожения вредоносных приложений. Но беглый взгляд на открытый исходный код Android показывает, как эта простая функция работает на устройствах, которые ее поддерживают.
Изучение кода
Прежде всего, тот факт, что ваше устройство работает под управлением Android 7.1+, не означает, что такое поведение при обнаружении паники действительно включено. Значение, определяющее, включена ли функция, можно найти в config.xml
файл в APK-файле SystemUI.
<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 более безопасным для обычного пользователя.