Android 7.1+ har en "panikkdeteksjon"-modus som oppdager hektiske tilbakeknapper

Android Nougat (7.1+) har en panikkdeteksjonsmodus som oppdager om brukeren febrilsk trykker tilbake-knappen. Les mer for å høre hva den gjør.

Mens mange lesere av Android-sentriske nettsteder som vår egen er mindre sannsynlig å komme over situasjoner der en useriøs applikasjon kompromitterer systemet deres, er det ikke sikkert at det samme gjelder for det generelle befolkning. Nesten hver uke hører vi fra ulike sikkerhetsforskere om ny skadelig programvare rettet mot Android-brukere. De fleste av disse ondsinnede angrepene kan unngås ved å inspisere tillatelser eller unngå å installere skisserte applikasjoner, og Selv om vi anbefaler leserne våre å ta telefonens sikkerhet i egne hender, er Google ansvarlig for å sikre alle Android-enheter telefon. For det formål introduserte selskapet stille en ny sikkerhetsfunksjon i Android 7.1 Nougat kalt "panikkdeteksjon" som lytter etter flere tilbake-knapptrykk etter hverandre, returnerer deretter brukeren til startskjermen.

Ganske enkelt, hvis en useriøs applikasjon prøver å kapre brukerens skjerm og hindre brukeren i å forlate (kanskje ved å implementerer en tilgjengelighetstjeneste for å avskjære alle viktige hendelser), vil Android selv overstyre applikasjonen for å bringe tilbake startskjermen. Brukeren kan da antagelig avinstallere den skadelige applikasjonen fra startprogrammet.

Denne funksjonen fløy under radaren, forståelig nok slik at Google sannsynligvis ikke vil annonsere for verden på en måte de sløyer ondsinnede applikasjoner. Men en rask titt på Androids åpne kildekode avslører hvordan denne enkle funksjonen fungerer på enhetene som støtter den.


Undersøker koden

Først av alt, bare fordi enheten din kjører Android 7.1+ betyr det ikke at denne panikkdeteksjonsatferden faktisk er aktivert. Verdien som bestemmer om funksjonen er på, finner du i config.xml filen i SystemUI APK.


<integername="config_backPanicBehavior">0integer>

Som standard er Androids reaksjon på panikktrykk på tilbakeknappen å ikke gjøre noe. Hvis heltallsverdien av config_backPanicBehavior er satt til 1, men det er her Androids nye beskyttelsestiltak starter.

Innenfor PhoneWindowManager.java vi kan se hoveddelen av hvordan denne funksjonen er implementert. Først av alt definerer filen to ting: hvor mange tilbake-knapptrykk som trengs for at systemet skal fastslå at brukeren "får panikk", og deretter hva som skal gjøres basert på den tilstanden.

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

Som standard krever systemet 4 påfølgende tilbakeknapptrykk for å gå inn i panikkmodus. Hvorvidt funksjonen bruker heltallsverdien til PANIC_PRESS_BACK_NOTHING eller PANIC_PRESS_BACK_HOME bestemmes av verdien i konfigurasjonsfilen i SystemUI APK.

Uavhengig av denne verdien, blir hvert tilbake-knapp multi-trykk sjekket for å se om det vil telle som et panikktrykk. Først avskjærer systemet nedpressen for KEYCODE_BACK nøkkelhendelse og sjekker om systemet er satt til å se etter flere trykk eller lange trykk på tasten. Deretter sjekker systemet om det skal sende opp-trykket for den samme KEYCODE_BACK-nøkkelhendelsen til brukerappen eller ikke.

I interceptBackKeyDown() metoden, hvis telleren for tilbake tastetrykk er mellom 1 og 3, hopper systemet over tidsavbruddet for flertrykksdeteksjonen da panikkdeteksjonen krever minst 4 trykk for at en handling skal utføres.

Deretter, når brukeren fjerner fingeren fra tilbaketasten som utløser en opp-hendelse, vil interceptBackKeyUp legger til 1 til tilbaketastetelleren. Den setter deretter en melding i kø i 300 millisekunder fremover. Grunnen til dette er fordi systemet reserverer en forsinkelsesperiode på 300 millisekunder når det skal avgjøre om tilbake-knappene er en del av en multi-press-hendelse. Hvis det er det, kan brukeren få panikk ved å trykke på knappen, slik at systemet ikke skal sende nøkkelhendelsen til brukerapplikasjonen.

300ms multipress timeout-verdien er lagret i den sikre innstillingen "multi_press_timeout" som vist under.

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

Som standard er denne verdien satt til 300ms.

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

Så, hvis et multi-trykk faktisk oppdages (>1 tilbake-knapp fullført opp/ned-trykk innen 300 ms), kaller systemet opp backMultiPressAction metode for å bestemme hva som skal gjøres. Til slutt tilbakestilles tilbakeknapptelleren til 0.

Selv om det er en svært liten, upublisert funksjon, er det fortsatt hyggelig å se hva Google jobber med bak kulissene for å gjøre Android sikrere for den gjennomsnittlige brukeren.