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
се определя от стойността в конфигурационния файл в SystemUI APK.
Независимо от тази стойност, всяко многократно натискане на бутон за връщане назад се проверява дали ще се отчете като натискане при паника. Първо, системата прихваща натискането надолу за KEYCODE_BACK клавишно събитие и проверява дали системата е настроена да проверява за многократно или дълго натискане на клавиша. След това системата проверява дали трябва или не да предаде натискането нагоре за същото клавишно събитие KEYCODE_BACK към потребителското приложение.
В interceptBackKeyDown()
метод, ако броячът за натискане на клавиша за връщане назад е между 1 и 3, тогава системата пропуска времето за изчакване за откриване на многократно натискане, тъй като откриването на паника изисква поне 4 натискания, за да бъде предприето каквото и да е действие.
След това, след като потребителят премахне пръста си от клавиша за връщане, което задейства събитие нагоре, interceptBackKeyUp
добавя 1 към брояча на клавишите за връщане назад. След това поставя съобщение в опашка за 300 милисекунди в бъдеще. Причината за това е, че системата запазва период на забавяне от 300 милисекунди, когато решава дали натисканията на бутоните за връщане назад са част от събитие с многократно натискане. Ако е така, тогава потребителят може да изпадне в паника, натискайки бутона, така че системата не трябва да изпраща ключовото събитие към потребителското приложение.
Стойността на времето за изчакване от 300 ms многократно натискане се съхранява в защитената настройка "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 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
След това, ако наистина бъде открито многократно натискане (>1 бутон за връщане назад, пълно натискане нагоре/надолу в рамките на 300 ms), системата извиква backMultiPressAction
метод за определяне какво действие да се предприеме. Накрая броячът на бутона за връщане назад се нулира на 0.
Въпреки че е много малка, непубликувана функция, все пак е хубаво да се види какво Google работи зад кулисите, за да направи Android по-сигурен за обикновения потребител.