Android 7.1+ are un mod „Detecție panică” care detectează apăsările frenetice ale butonului înapoi

click fraud protection

Android Nougat (7.1+) are un mod de detectare a panicii care detectează dacă utilizatorul apasă frenetic butonul înapoi. Citiți mai multe pentru a afla ce face.

În timp ce mulți cititori de site-uri web centrate pe Android, cum ar fi al nostru, sunt mai puțin probabil să întâlnească situațiile în care o aplicație necinstită își compromite sistemul, este posibil să nu fie același lucru pentru general populatie. Aproape în fiecare săptămână auzim de la diverși cercetători în domeniul securității despre noi programe malware care vizează utilizatorii Android. Cele mai multe dintre aceste atacuri rău intenționate pot fi evitate prin inspectarea permisiunilor sau evitând instalarea de aplicații cu aspect incomplet și în timp ce le recomandăm cititorilor noștri să ia în propriile mâini securitatea telefonului lor, Google este responsabil pentru securizarea fiecărui Android telefon. În acest scop, compania a introdus în liniște o nouă caracteristică de securitate în Android 7.1 Nougat numită „detectarea panicii

„ care ascultă apăsări multiple de buton înapoi în succesiune, apoi readuce utilizatorul la ecranul de pornire.

Pur și simplu, dacă o aplicație necinstită încearcă să deturneze ecranul utilizatorului și să împiedice utilizatorul să plece (poate prin implementând un serviciu de accesibilitate pentru a intercepta toate evenimentele cheie), Android va suprascrie în sine aplicația pentru a aduce înapoi Ecranul de start. Utilizatorul poate apoi să dezinstaleze aplicația rău intenționată din lansator.

Această caracteristică a zburat sub radar, de înțeles, deoarece Google probabil nu ar dori să facă publicitate lumii într-un mod în care evită aplicațiile rău intenționate. Dar o privire rapidă asupra codului open source al Android dezvăluie cum funcționează această caracteristică simplă pe dispozitivele care o acceptă.


Examinarea Codului

În primul rând, doar pentru că dispozitivul tău rulează Android 7.1+ nu înseamnă că acest comportament de detectare a panică este de fapt activat. Valoarea care determină dacă caracteristica este activată poate fi găsită în config.xml fișier în APK-ul SystemUI.


<integername="config_backPanicBehavior">0integer>

În mod implicit, reacția Android la apăsările de panică ale butonului înapoi este să nu facă nimic. Dacă valoarea întreagă a config_backPanicBehavior este setat la 1, totuși, aici intervine noua măsură de protecție a Android.

În PhoneWindowManager.java putem vedea cea mai mare parte a modului în care este implementată această caracteristică. În primul rând, fișierul definește două lucruri: câte apăsări de buton înapoi sunt necesare pentru ca sistemul să determine că utilizatorul „intră în panică” și apoi ce acțiune să întreprindă în funcție de starea respectivă.

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

În mod implicit, sistemul necesită 4 apăsări consecutive de buton înapoi pentru a intra în modul de panică. Indiferent dacă funcția folosește sau nu valoarea întreagă a PANIC_PRESS_BACK_NOTHING sau PANIC_PRESS_BACK_HOME este determinată de valoarea din fișierul de configurare din APK-ul SystemUI.

Indiferent de această valoare, fiecare apăsare multiplă a butonului înapoi este verificată pentru a vedea dacă va conta ca o apăsare de panică. În primul rând, sistemul interceptează apăsarea în jos pentru KEYCODE_BACK evenimentul tastei și verifică dacă sistemul este sau nu setat să verifice dacă există apăsări multiple sau apăsări lungi ale tastei. Apoi, sistemul verifică dacă ar trebui să treacă sau nu apăsarea în sus pentru același eveniment de tastă KEYCODE_BACK către aplicația utilizator.

În interceptBackKeyDown() metoda, dacă contorul de apăsare a tastei înapoi este între 1 și 3, atunci sistemul omite timeout-ul de detectare a apăsării multiple, deoarece detectarea panicăi necesită cel puțin 4 apăsări pentru orice acțiune.

Apoi, odată ce utilizatorul își scoate degetul de la tasta înapoi, care declanșează un eveniment de sus, interceptBackKeyUp adaugă 1 la contorul cheii înapoi. Apoi pune în coadă un mesaj timp de 300 de milisecunde în viitor. Motivul pentru aceasta este că sistemul își rezervă o perioadă de întârziere de 300 de milisecunde atunci când decide dacă apăsările butonului înapoi fac parte dintr-un eveniment de apăsare multiplă. Dacă este, atunci utilizatorul poate intra în panică apăsând butonul, astfel încât sistemul nu ar trebui să trimită evenimentul cheie către aplicația utilizator.

Valoarea de timeout de 300 ms de apăsare multiplă este stocată în setarea sigură "multi_press_timeout" așa cum se arată mai jos.

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

În mod implicit, această valoare este setată la 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

Apoi, dacă este într-adevăr detectată o apăsare multiplă (>1 apăsare completă a butonului înapoi în sus/jos în 300 ms), sistemul apelează backMultiPressAction metoda pentru a determina ce acțiune trebuie luată. În cele din urmă, contorul butonului înapoi este resetat la 0.

Deși este o funcție foarte minoră, nepublicată, este încă plăcut să vedem la ce lucrează Google în culise pentru a face Android mai sigur pentru utilizatorul obișnuit.