Android 7.1 lub nowszy ma tryb „wykrywania paniki”, który wykrywa gorączkowe naciśnięcia przycisku Wstecz

Android Nougat (7.1+) ma tryb wykrywania paniki, który wykrywa, czy użytkownik gorączkowo naciska przycisk Wstecz. Przeczytaj więcej, aby usłyszeć, co robi.

Chociaż wielu czytelników witryn poświęconych Androidowi, takich jak nasza, jest mniej skłonnych do natknięcia się na nie w sytuacjach, gdy fałszywa aplikacja narusza ich system, to samo może nie dotyczyć generała populacja. Niemal co tydzień różni badacze bezpieczeństwa dowiadują się o nowym złośliwym oprogramowaniu atakującym użytkowników Androida. Większości tych złośliwych ataków można uniknąć, sprawdzając uprawnienia lub unikając instalowania podejrzanie wyglądających aplikacji Chociaż zalecamy naszym czytelnikom, aby wzięli bezpieczeństwo swojego telefonu w swoje ręce, Google jest odpowiedzialny za zabezpieczenie każdego Androida telefon. W tym celu firma po cichu wprowadziła w systemie Android 7.1 Nougat nową funkcję bezpieczeństwa o nazwie „wykrywanie paniki", który nasłuchuje kolejnych naciśnięć przycisku Wstecz, a następnie przywraca użytkownika do ekranu głównego.

Po prostu, jeśli nieuczciwa aplikacja próbuje przejąć kontrolę nad ekranem użytkownika i uniemożliwić mu opuszczenie (być może przez wdrożenie usługi ułatwień dostępu w celu przechwytywania wszystkich kluczowych zdarzeń), system Android sam zastąpi aplikację, aby przywrócić ekran główny. Następnie użytkownik może prawdopodobnie odinstalować złośliwą aplikację z poziomu programu uruchamiającego.

Ta funkcja została niezauważona, co jest zrozumiałe, ponieważ Google prawdopodobnie nie chciałby reklamować światu sposobu, w jaki patroszy złośliwe aplikacje. Jednak szybkie spojrzenie na otwarty kod źródłowy Androida pokazuje, jak ta prosta funkcja działa na urządzeniach, które ją obsługują.


Badanie Kodeksu

Po pierwsze, to, że na Twoim urządzeniu działa system Android 7.1 lub nowszy, nie oznacza, że ​​funkcja wykrywania paniki jest faktycznie włączona. Wartość określającą, czy funkcja jest włączona, można znaleźć w pliku config.xml plik w pakiecie APK SystemUI.


<integername="config_backPanicBehavior">0integer>

Domyślnie reakcją Androida na panikowe naciśnięcie przycisku Wstecz jest nic nierobienie. Jeżeli wartość całkowita config_backPanicBehavior ma wartość 1, jednak właśnie wtedy zaczyna działać nowy środek ochrony Androida.

W PhoneWindowManager.java widzimy większość sposobu implementacji tej funkcji. Po pierwsze, plik definiuje dwie rzeczy: liczbę naciśnięć przycisku Wstecz, aby system stwierdził, że użytkownik „panikuje”, a następnie jakie działania podjąć w zależności od tego stanu.

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

Domyślnie system wymaga 4 kolejnych naciśnięć przycisku Wstecz, aby przejść do trybu paniki. Określa, czy funkcja używa wartości całkowitej PANIC_PRESS_BACK_NOTHING Lub PANIC_PRESS_BACK_HOME jest określana na podstawie wartości w pliku konfiguracyjnym w pakiecie APK SystemUI.

Niezależnie od tej wartości, każde wielokrotne naciśnięcie przycisku Wstecz jest sprawdzane, czy będzie liczone jako naciśnięcie przycisku paniki. Najpierw system przechwytuje naciśnięcie przycisku w dół KEYCODE_BACK zdarzenie klawisza i sprawdza, czy system jest ustawiony na sprawdzanie wielokrotnych lub długich naciśnięć klawisza. Następnie system sprawdza, czy powinien przekazać naciśnięcie w górę dla tego samego zdarzenia klucza KEYCODE_BACK do aplikacji użytkownika.

w interceptBackKeyDown() tej metody, jeśli licznik naciśnięć klawisza Wstecz wynosi od 1 do 3, system pominie limit czasu wykrywania wielokrotnych naciśnięć, ponieważ wykrycie paniki wymaga co najmniej 4 naciśnięć, aby można było podjąć jakiekolwiek działanie.

Następnie, gdy użytkownik zdejmie palec z klawisza Wstecz, co wyzwala zdarzenie w górę, następuje interceptBackKeyUp dodaje 1 do licznika klawiszy wstecz. Następnie kolejkuje wiadomość na 300 milisekund w przyszłości. Dzieje się tak dlatego, że system rezerwuje 300 milisekundowy okres opóźnienia podczas podejmowania decyzji, czy naciśnięcia przycisku Wstecz są częścią zdarzenia polegającego na wielokrotnym naciśnięciu. Jeśli tak jest, użytkownik może wpaść w panikę naciskając przycisk i system nie powinien wysyłać kluczowego zdarzenia do aplikacji użytkownika.

Wartość limitu czasu wielokrotnego naciśnięcia 300 ms jest przechowywana w bezpiecznym ustawieniu „multi_press_timeout" jak pokazano niżej.

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

Domyślnie ta wartość jest ustawiona 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

Następnie, jeśli rzeczywiście zostanie wykryte wielokrotne naciśnięcie (>1 pełne naciśnięcie przycisku Wstecz w górę/w dół w ciągu 300 ms), system wywołuje backMultiPressAction metoda pozwalająca określić, jakie działania należy podjąć. Na koniec licznik przycisku Wstecz zostaje zresetowany do 0.

Chociaż jest to bardzo drobna i niepubliczna funkcja, miło jest zobaczyć, nad czym Google pracuje za kulisami, aby zapewnić większe bezpieczeństwo Androida dla przeciętnego użytkownika.