Android 7.1+ má režim „detekce paniky“, který detekuje zběsilé stisknutí tlačítka zpět

Android Nougat (7.1+) má režim detekce paniky, který detekuje, zda uživatel zběsile mačká tlačítko Zpět. Přečtěte si více, abyste slyšeli, co dělá.

Zatímco mnoho čtenářů webů zaměřených na Android, jako je ten náš, se setká s menší pravděpodobností situace, kdy nepoctivá aplikace naruší jejich systém, totéž nemusí platit pro obecné populace. Téměř každý týden slýcháme od různých bezpečnostních výzkumníků o novém malwaru zaměřeném na uživatele Androidu. Většině těchto škodlivých útoků se lze vyhnout kontrolou oprávnění nebo se vyhnout instalaci útržkovitě vypadajících aplikací a i když našim čtenářům doporučujeme, aby vzali zabezpečení svého telefonu do vlastních rukou, Google je zodpovědný za zabezpečení každého Androidu telefon. Za tímto účelem společnost v tichosti představila novou bezpečnostní funkci v systému Android 7.1 Nougat s názvem „detekce paniky“, který naslouchá několika stiskům tlačítka Zpět za sebou a poté vrátí uživatele na domovskou obrazovku.

Zcela jednoduše, pokud se nepoctivá aplikace pokusí unést obrazovku uživatele a zabránit uživateli v odchodu (možná implementace služby usnadnění přístupu k zachycení všech klíčových událostí), Android sám přepíše aplikaci, aby se vrátil Domovská obrazovka. Uživatel pak může pravděpodobně odinstalovat škodlivou aplikaci ze spouštěče.

Tato funkce proletěla radarem, pochopitelně, protože Google by pravděpodobně nechtěl světu propagovat jeden způsob, jak ničí škodlivé aplikace. Ale letmý pohled na otevřený zdrojový kód Androidu odhalí, jak tato jednoduchá funkce funguje na zařízeních, která ji podporují.


Zkoumání kodexu

Za prvé, to, že vaše zařízení používá Android 7.1+, neznamená, že je toto chování detekce paniky skutečně povoleno. Hodnotu, která určuje, zda je funkce zapnutá, naleznete v config.xml soubor v souboru APK SystemUI.


<integername="config_backPanicBehavior">0integer>

Ve výchozím nastavení je reakce Androidu na panické stisknutí tlačítka Zpět nicnedělání. Pokud je celočíselná hodnota config_backPanicBehavior je nastavena na 1, nicméně právě zde začíná nové ochranné opatření Androidu.

V rámci PhoneWindowManager.java můžeme vidět většinu toho, jak je tato funkce implementována. Zaprvé, soubor definuje dvě věci: kolik stisknutí tlačítka zpět je potřeba, aby systém zjistil, že uživatel „panikaří“, a poté, co má na základě tohoto stavu podniknout.

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

Ve výchozím nastavení systém vyžaduje 4 po sobě jdoucí stisknutí tlačítka zpět pro vstup do režimu paniky. Zda funkce používá celočíselnou hodnotu nebo ne PANIC_PRESS_BACK_NOTHING nebo PANIC_PRESS_BACK_HOME je určeno hodnotou v konfiguračním souboru v rámci SystemUI APK.

Bez ohledu na tuto hodnotu se každé vícenásobné stisknutí tlačítka zpět zkontroluje, aby se zjistilo, zda se bude počítat jako panický stisk. Nejprve systém zachytí stisk dolů KEYCODE_BACK klíčovou událost a zkontroluje, zda je systém nastaven na kontrolu vícenásobných nebo dlouhých stisknutí klávesy. Poté systém zkontroluje, zda má nebo nemá předat stisk nahoru pro stejnou klíčovou událost KEYCODE_BACK uživatelské aplikaci.

V interceptBackKeyDown() Pokud je počítadlo stisknutí tlačítka zpět mezi 1 a 3, systém přeskočí časový limit detekce vícenásobného stisknutí, protože detekce paniky vyžaduje alespoň 4 stisknutí k provedení jakékoli akce.

Poté, jakmile uživatel sejme prst z klávesy Zpět, která spustí událost up, interceptBackKeyUp přidá 1 do počítadla kláves zpět. Poté zařadí zprávu do fronty na 300 milisekund v budoucnu. Důvodem je to, že systém si vyhrazuje 300 milisekundovou prodlevu při rozhodování, zda jsou stisky tlačítka Zpět součástí události vícenásobného stisknutí. Pokud ano, uživatel může při stisknutí tlačítka panikařit, takže systém by neměl posílat klíčovou událost do uživatelské aplikace.

Hodnota časového limitu 300 ms pro více stisknutí je uložena v zabezpečeném nastavení "multi_press_timeout" Jak je ukázáno níže.

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

Ve výchozím nastavení je tato hodnota nastavena na 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

Poté, pokud je skutečně detekováno vícenásobné stisknutí (>1 tlačítko zpět dokončí stisknutí nahoru/dolů do 300 ms), systém zavolá backMultiPressAction způsob, jak určit, jakou akci podniknout. Nakonec se počítadlo tlačítka Zpět resetuje na 0.

I když jde o velmi malou, nepublikovanou funkci, je stále příjemné vidět, na čem Google v zákulisí pracuje, aby byl Android pro běžného uživatele bezpečnější.