Android Nougatissa (7.1+) on paniikkitunnistustila, joka havaitsee, jos käyttäjä painaa kiihkeästi takaisin-painiketta. Lue lisää kuullaksesi, mitä se tekee.
Vaikka monet Android-keskeisten verkkosivustojen, kuten omamme, lukijat törmäävät harvemmin tilanteissa, joissa petollinen sovellus vaarantaa heidän järjestelmän, sama ei välttämättä päde yleiseen väestö. Lähes joka viikko kuulemme eri tietoturvatutkijoilta uusista Android-käyttäjiin kohdistetuista haittaohjelmista. Suurin osa näistä haitallisista hyökkäyksistä voidaan välttää tarkastamalla käyttöoikeudet tai välttämällä summittainen näköisten sovellusten asentamista. Vaikka suosittelemmekin lukijoitamme ottamaan puhelimensa suojauksen omiin käsiinsä, Google on vastuussa jokaisen Androidin turvaamisesta puhelin. Tätä tarkoitusta varten yritys esitteli hiljaa uuden suojausominaisuuden Android 7.1 Nougatissa nimeltä "paniikkitunnistus", joka kuuntelee useita takaisin-painikkeen painalluksia peräkkäin ja palauttaa sitten käyttäjän aloitusnäyttöön.
Yksinkertaisesti, jos roistosovellus yrittää kaapata käyttäjän näytön ja estää käyttäjää poistumasta (ehkä ottamalla käyttöön esteettömyyspalvelun kaikkien tärkeiden tapahtumien sieppaamiseksi), Android ohittaa itse sovelluksen palauttaakseen aloitusnäyttö. Käyttäjä voi sitten oletettavasti poistaa haitallisen sovelluksen käynnistysohjelmasta.
Tämä ominaisuus lensi tutkan alle, ymmärrettävästi, koska Google ei todennäköisesti halua mainostaa maailmaa yhdellä tavalla, jolla he tuhoavat haitallisia sovelluksia. Mutta nopea katsaus Androidin avoimeen lähdekoodiin paljastaa, kuinka tämä yksinkertainen ominaisuus toimii sitä tukevissa laitteissa.
Koodia tutkitaan
Ensinnäkin se, että laitteesi käyttöjärjestelmä on Android 7.1+, ei tarkoita, että tämä paniikkitunnistus olisi todella käytössä. Arvo, joka määrittää, onko ominaisuus käytössä, löytyy config.xml
tiedosto SystemUI APK: ssa.
<integername="config_backPanicBehavior">0integer>
Oletusarvoisesti Androidin reaktio paniikkiin takaisin-painikkeen painalluksiin on olla tekemättä mitään. Jos kokonaislukuarvo config_backPanicBehavior
on asetettu arvoon 1, mutta siinä Androidin uusi suojatoimenpide astuu voimaan.
Sisällä PhoneWindowManager.java
voimme nähdä suurimman osan siitä, kuinka tämä ominaisuus on toteutettu. Ensinnäkin tiedosto määrittelee kaksi asiaa: kuinka monta Takaisin-painiketta painetaan, jotta järjestelmä voi todeta, että käyttäjä on "paniikissa" ja mitä toimia tämän tilan perusteella tulee tehdä.
// 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;
Oletuksena järjestelmä vaatii 4 peräkkäistä paluupainikkeen painallusta siirtyäkseen paniikkitilaan. Käyttääkö funktio kokonaislukuarvoa PANIC_PRESS_BACK_NOTHING
tai PANIC_PRESS_BACK_HOME
määritetään SystemUI APK: n määritystiedoston arvon perusteella.
Tästä arvosta riippumatta jokainen takaisin-painikkeen painallus tarkistetaan, jotta nähdään, lasketaanko se paniikkipainallukseksi. Ensin järjestelmä sieppaa alas painalluksen KEYCODE_BACK näppäintapahtuma ja tarkistaa, onko järjestelmä asetettu tarkistamaan näppäimen useita painalluksia tai pitkiä painalluksia. Sitten järjestelmä tarkistaa, pitäisikö sen siirtää ylös-painallus samalle KEYCODE_BACK-näppäintapahtumalle käyttäjäsovellukselle.
Vuonna interceptBackKeyDown()
menetelmää, jos takaisin-näppäimen painalluslaskuri on välillä 1 ja 3, järjestelmä ohittaa usean painalluksen tunnistuksen aikakatkaisun, koska paniikkitunnistukseen tarvitaan vähintään 4 painallusta minkä tahansa toiminnon suorittamiseen.
Seuraavaksi, kun käyttäjä poistaa sormensa takaisin-näppäimeltä, joka laukaisee ylös-tapahtuman, interceptBackKeyUp
lisää 1:n takanäppäinlaskuriin. Sitten se asettaa viestin jonoon 300 millisekuntia tulevaisuudessa. Syynä tähän on se, että järjestelmä varaa 300 millisekunnin viivejakson päättäessään, ovatko takaisin-painikkeen painallukset osa usean painalluksen tapahtumaa. Jos on, käyttäjä saattaa olla paniikkissa painikkeen painamisessa, joten järjestelmän ei pitäisi lähettää avaintapahtumaa käyttäjäsovellukselle.
300 ms: n usean painalluksen aikakatkaisuarvo on tallennettu suojattuun asetukseen.multi_press_timeout
" kuten alla.
/**
* 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";
Oletuksena tämä arvo on 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
Sitten, jos monipainallus todella havaitaan (>1 takaisin-painikkeen painallus ylös/alas 300 ms: n sisällä), järjestelmä kutsuu backMultiPressAction
tapa määrittää, mitä toimia tulee tehdä. Lopuksi paluupainikkeen laskuri nollataan nollaan.
Vaikka se on hyvin pieni, julkistamaton ominaisuus, on silti mukava nähdä, mitä Google tekee kulissien takana tehdäkseen Androidista turvallisemman keskivertokäyttäjälle.