Android 7.1+ on "paanikatuvastuse" režiim, mis tuvastab meeletu tagasivajutuse

Android Nougatil (7.1+) on paanikatuvastusrežiim, mis tuvastab, kas kasutaja vajutab meeletult tagasinuppu. Lugege lähemalt, et kuulda, mida see teeb.

Kuigi paljud Androidi-kesksete veebisaitide, näiteks meie oma, lugejad satuvad harvemini nende juurde Olukordades, kus petturlik rakendus kahjustab nende süsteemi, ei pruugi see kehtida üldise kohta elanikkonnast. Peaaegu iga nädal kuuleme erinevatelt turvauurijatelt Androidi kasutajatele suunatud uue pahavara kohta. Enamikku neist pahatahtlikest rünnetest saab vältida, kontrollides lubasid või vältides visandliku välimusega rakenduste installimist ja Kuigi me soovitame oma lugejatel võtta oma telefoni turvalisus enda kätte, vastutab Google iga Androidi turvalisuse eest telefon. Sel eesmärgil tutvustas ettevõte vaikselt Android 7.1 Nougati uut turvafunktsiooni nimega "paanika tuvastamine", mis kuulab mitut järjestikust tagasinupu vajutust ja naaseb seejärel kasutaja avakuvale.

Lihtsalt, kui petturlikud rakendused üritavad kaaperdada kasutaja ekraani ja takistada kasutajal lahkumast (võib-olla Juurdepääsetavuse teenuse juurutamine kõigi võtmesündmuste pealtkuulamiseks), tühistab Android ise rakenduse, et taastada avakuva. Seejärel saab kasutaja tõenäoliselt pahatahtliku rakenduse käivitajast desinstallida.

See funktsioon lendas radari alla, arusaadavalt, kuna Google ei sooviks tõenäoliselt maailmale reklaamida ühel viisil, kuidas nad pahatahtlikke rakendusi välja tõrjuvad. Kuid kiire pilk Androidi avatud lähtekoodile näitab, kuidas see lihtne funktsioon seda toetavates seadmetes töötab.


Koodeksi uurimine

Esiteks, see, et teie seadmes töötab Android 7.1+, ei tähenda see, et see paanikatuvastus on tegelikult lubatud. Väärtuse, mis määrab, kas funktsioon on sisse lülitatud, leiate jaotisest config.xml faili SystemUI APK-s.


<integername="config_backPanicBehavior">0integer>

Vaikimisi on Androidi reaktsioon tagasinupu paanilisele vajutamisele mitte midagi teha. Kui täisarv väärtus config_backPanicBehavior on seatud väärtusele 1, kuid just seal rakendub Androidi uus kaitsemeede.

Sees PhoneWindowManager.java näeme põhiosa selle funktsiooni rakendamisest. Esiteks määratleb fail kaks asja: mitu tagasi-nupu vajutust on vaja, et süsteem tuvastaks, et kasutaja on "paanikas" ja seejärel milliseid toiminguid selle oleku põhjal ette võtta.

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

Vaikimisi nõuab süsteem paanikarežiimi sisenemiseks 4 järjestikust tagasinupu vajutust. Kas funktsioon kasutab täisarvu väärtust PANIC_PRESS_BACK_NOTHING või PANIC_PRESS_BACK_HOME määrab SystemUI APK konfiguratsioonifaili väärtus.

Olenemata sellest väärtusest kontrollitakse iga tagasinupu mitmekordset vajutust, et näha, kas seda loetakse paanikavajutuseks. Esiteks peatab süsteem allavajutuse KEYCODE_BACK klahvi sündmus ja kontrollib, kas süsteem on seadistatud kontrollima klahvi mitut või pikka vajutust või mitte. Seejärel kontrollib süsteem, kas see peaks sama KEYCODE_BACK klahvisündmuse ülesvajutuse kasutaja rakendusele edastama või mitte.

Aastal interceptBackKeyDown() meetod, kui tagasiklahvi vajutusloendur on vahemikus 1 kuni 3, jätab süsteem mitme vajutuse tuvastamise ajalõpu vahele, kuna paanikatuvastus nõuab mis tahes toimingu tegemiseks vähemalt 4 vajutust.

Järgmiseks, kui kasutaja eemaldab sõrme tagasi-klahvilt, mis käivitab üles sündmuse, interceptBackKeyUp lisab 1 tagumise klahvi loendurile. Seejärel seab see tulevikus sõnumi järjekorda 300 millisekundiks. Selle põhjuseks on asjaolu, et süsteem jätab 300 millisekundilise viivitusperioodi, kui otsustab, kas tagasinupu vajutused on osa mitme vajutuse sündmusest. Kui see on nii, võib kasutaja nuppu vajutades paanikas olla, nii et süsteem ei peaks võtmesündmust kasutajarakendusele saatma.

300 ms mitme vajutuse ajalõpu väärtus salvestatakse turvasättes "multi_press_timeout" nagu allpool näidatud.

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

Vaikimisi on selle väärtuseks seatud 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

Seejärel, kui tuvastatakse tõepoolest korduv vajutus (>1 tagasinupu vajutus lõpetab üles/alla vajutuse 300 ms jooksul), kutsub süsteem backMultiPressAction meetod, mille abil otsustada, milliseid meetmeid võtta. Lõpuks lähtestatakse tagasinupu loendur 0-le.

Kuigi see on väga väike, avalikustamata funktsioon, on siiski tore näha, mille kallal Google kulisside taga töötab, et muuta Android tavakasutaja jaoks turvalisemaks.