Android 7.1+ har ett "panikdetektionsläge" som upptäcker hektiska tillbakaknappstryckningar

click fraud protection

Android Nougat (7.1+) har ett panikdetekteringsläge som känner av om användaren frenetiskt trycker på bakåtknappen. Läs mer för att höra vad den gör.

Medan många läsare av Android-centrerade webbplatser som vår egen är mindre benägna att stöta på situationer där en oseriös applikation äventyrar deras system, kanske detsamma inte är sant för det allmänna befolkning. Nästan varje vecka hör vi från olika säkerhetsforskare om ny skadlig programvara som riktar sig till Android-användare. De flesta av dessa skadliga attacker kan undvikas genom att inspektera behörigheter eller undvika att installera program som ser skissartade ut, och Även om vi rekommenderar våra läsare att ta telefonens säkerhet i egna händer, är Google ansvarigt för att säkra alla Android-enheter telefon. För det ändamålet introducerade företaget tyst en ny säkerhetsfunktion i Android 7.1 Nougat som heter "panikdetektering" som lyssnar efter flera bakåtknappstryckningar i följd och sedan återgår användaren till sin hemskärm.

Helt enkelt, om ett oseriöst program försöker kapa användarens skärm och hindra användaren från att lämna (kanske genom implementerar en tillgänglighetstjänst för att fånga upp alla viktiga händelser), kommer Android själv att åsidosätta applikationen för att återställa hemskärm. Användaren kan då förmodligen avinstallera det skadliga programmet från startprogrammet.

Den här funktionen flög under radarn, förståeligt nog så eftersom Google sannolikt inte skulle vilja annonsera för världen på ett sätt som de rensar skadliga applikationer. Men en snabb titt på Androids öppna källkod avslöjar hur denna enkla funktion fungerar på de enheter som stöder den.


Granska koden

Först och främst, bara för att din enhet kör Android 7.1+ betyder det inte att detta panikdetekteringsbeteende faktiskt är aktiverat. Värdet som avgör om funktionen är på finns i config.xml filen i SystemUI APK.


<integername="config_backPanicBehavior">0integer>

Som standard är Androids reaktion på paniktryckningar på bakåtknappen att inte göra någonting. Om heltalsvärdet på config_backPanicBehavior är inställd på 1, men det är där Androids nya skyddsåtgärd slår in.

Inom PhoneWindowManager.java vi kan se huvuddelen av hur den här funktionen implementeras. Först och främst definierar filen två saker: hur många bakåtknapptryckningar som behövs för att systemet ska avgöra att användaren "får panik" och sedan vilken åtgärd som ska vidta utifrån det tillståndet.

// 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 kräver systemet 4 på varandra följande bakåtknappstryckningar för att gå in i panikläget. Huruvida funktionen använder heltalsvärdet för PANIC_PRESS_BACK_NOTHING eller PANIC_PRESS_BACK_HOME bestäms av värdet i konfigurationsfilen i SystemUI APK.

Oavsett detta värde kontrolleras varje flertrycksknapp på bakåtknappen för att se om det kommer att räknas som ett paniktryck. Först avlyssnar systemet nedpressen för KEYCODE_BACK nyckelhändelse och kontrollerar om systemet är inställt på att söka efter flera eller långa tryckningar på knappen. Sedan kontrollerar systemet om det ska skicka upptryckningen för samma KEYCODE_BACK-nyckelhändelse till användarappen eller inte.

I den interceptBackKeyDown() Om räkneverket för tillbaka tangenttryckningar är mellan 1 och 3, hoppar systemet över tidsgränsen för flertrycksdetektering eftersom panikdetekteringen kräver minst 4 tryckningar för att någon åtgärd ska kunna vidtas.

Därefter, när användaren tar bort fingret från bakåttangenten som utlöser en upp-händelse, interceptBackKeyUp lägger till 1 till räkneverket för tillbakanyckeln. Det köar sedan ett meddelande i 300 millisekunder i framtiden. Anledningen till detta är att systemet reserverar en 300 millisekunders fördröjningsperiod när det bestäms om bakåtknappstryckningarna är en del av en flertryckshändelse. Om så är fallet kan användaren få panik när han trycker på knappen så att systemet inte ska skicka nyckelhändelsen till användarapplikationen.

300ms multipress timeout-värdet lagras i den säkra inställningen "multi_press_timeout" enligt nedanstående.

/**
* 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 är detta värde inställt på 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

Sedan, om ett flertryck verkligen upptäcks (>1 bakåtknapp fullständigt tryck upp/ner inom 300 ms), anropar systemet backMultiPressAction metod för att avgöra vilka åtgärder som ska vidtas. Slutligen återställs räknaren för bakåtknappen till 0.

Även om det är en mycket liten, opublicerad funktion, är det fortfarande trevligt att se vad Google arbetar med bakom kulisserna för att göra Android säkrare för den genomsnittliga användaren.