Android 7.1+ ima način »Zaznavanje panike«, ki zazna nenadne pritiske gumbov za nazaj

Android Nougat (7.1+) ima način zaznavanja panike, ki zazna, če uporabnik mrzlično pritiska gumb za nazaj. Preberite več, če želite izvedeti, kaj počne.

Medtem ko je veliko bralcev spletnih mest, osredotočenih na Android, kot je naše, manj verjetno naletelo situacijah, ko lažna aplikacija ogrozi njihov sistem, enako morda ne velja za splošno prebivalstvo. Skoraj vsak teden različni varnostni raziskovalci slišimo o novi zlonamerni programski opremi, ki cilja na uporabnike Androida. Večini teh zlonamernih napadov se je mogoče izogniti tako, da pregledate dovoljenja ali se izognete namestitvi pomanjkljivih aplikacij in Čeprav našim bralcem priporočamo, da vzamejo varnost svojega telefona v svoje roke, je Google odgovoren za zaščito vsakega Androida telefon. V ta namen je podjetje tiho predstavilo novo varnostno funkcijo v sistemu Android 7.1 Nougat, imenovano "odkrivanje panike", ki posluša večkratne zaporedne pritiske gumba za nazaj in nato vrne uporabnika na začetni zaslon.

Preprosto, če lažna aplikacija poskuša ugrabiti uporabnikov zaslon in uporabniku preprečiti, da bi zapustil (morda z izvajanje storitve dostopnosti za prestrezanje vseh ključnih dogodkov), bo Android sam preglasil aplikacijo, da bi vrnil domači zaslon. Uporabnik lahko nato domnevno odstrani zlonamerno aplikacijo iz zaganjalnika.

Ta funkcija je letela pod radarjem, kar je razumljivo, saj Google verjetno ne bi želel oglaševati svetu na en način, kako uničuje zlonamerne aplikacije. Toda hiter pogled na odprtokodno kodo Androida razkrije, kako ta preprosta funkcija deluje na napravah, ki jo podpirajo.


Pregled kodeksa

Prvič, samo zato, ker vaša naprava uporablja Android 7.1+, še ne pomeni, da je to vedenje za zaznavanje panike dejansko omogočeno. Vrednost, ki določa, ali je funkcija vklopljena, najdete v config.xml datoteko znotraj APK-ja SystemUI.


<integername="config_backPanicBehavior">0integer>

Privzeto se Android na panične pritiske gumba za nazaj odzove tako, da ne stori ničesar. Če je celoštevilska vrednost config_backPanicBehavior je nastavljen na 1, vendar se tu začne uporabljati nov zaščitni ukrep Androida.

Znotraj PhoneWindowManager.java lahko vidimo večino tega, kako je ta funkcija implementirana. Prvič, datoteka definira dve stvari: koliko pritiskov gumba za nazaj je potrebnih, da sistem ugotovi, da je uporabnik "paničen", in nato, kaj naj izvede glede na to stanje.

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

Privzeto sistem zahteva 4 zaporedne pritiske gumba za nazaj, da vstopi v način panike. Ne glede na to, ali funkcija uporablja celoštevilsko vrednost PANIC_PRESS_BACK_NOTHING oz PANIC_PRESS_BACK_HOME je določena z vrednostjo v konfiguracijski datoteki v APK-ju SystemUI.

Ne glede na to vrednost se vsak večkratni pritisk gumba za nazaj preveri, ali se bo štel kot pritisk v paniki. Najprej sistem prestreže pritisk navzdol za KEYCODE_BACK dogodek tipke in preveri, ali je sistem nastavljen za preverjanje večkratnih ali dolgih pritiskov tipke ali ne. Nato sistem preveri, ali naj pritisk navzgor za isti dogodek tipke KEYCODE_BACK posreduje uporabniški aplikaciji ali ne.

V interceptBackKeyDown() če je števec pritiskov tipke nazaj med 1 in 3, sistem preskoči časovno omejitev zaznavanja večkratnega pritiska, saj zaznavanje panike zahteva vsaj 4 pritiske, da se izvede kakršno koli dejanje.

Nato, ko uporabnik umakne prst s tipke za nazaj, kar sproži dogodek gor, se interceptBackKeyUp doda 1 števcu tipk nazaj. Nato postavi sporočilo v čakalno vrsto za 300 milisekund v prihodnosti. Razlog za to je, ker sistem rezervira 300-milisekundno zakasnitev, ko se odloča, ali so pritiski gumba za nazaj del dogodka večkratnega pritiska. Če je, potem uporabnik morda panično pritiska na gumb, tako da sistem ne bi smel pošiljati ključnega dogodka uporabniški aplikaciji.

Vrednost časovne omejitve večkratnega pritiska 300 ms je shranjena v varni nastavitvi "multi_press_timeout", kot je prikazano spodaj.

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

Privzeto je ta vrednost nastavljena 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

Če je nato res zaznan večkratni pritisk (>1 gumb za nazaj pritisne gor/dol v 300 ms), sistem pokliče backMultiPressAction način za določitev ukrepanja. Končno se števec gumba za nazaj ponastavi na 0.

Čeprav gre za zelo majhno, neobjavljeno funkcijo, je vseeno lepo videti, kaj Google dela v zakulisju, da bi naredil Android varnejši za povprečnega uporabnika.