לאנדרואיד נוגט (7.1+) יש מצב זיהוי פאניקה שמזהה אם המשתמש לוחץ בטירוף על כפתור החזרה. קרא עוד כדי לשמוע מה זה עושה.
בעוד שקוראים רבים של אתרים ממוקדי אנדרואיד כמו שלנו נוטים פחות להיתקל בהם במצבים שבהם אפליקציה נוכלת פוגעת במערכת שלהם, ייתכן שהדבר אינו נכון לגבי הכלל אוּכְלוֹסִיָה. כמעט מדי שבוע אנו שומעים מחוקרי אבטחה שונים על תוכנות זדוניות חדשות הממקדות למשתמשי אנדרואיד. את רוב ההתקפות הזדוניות הללו ניתן להימנע על ידי בדיקת הרשאות או הימנעות מהתקנה של יישומים בעלי מראה סקיצה, וכן בעוד שאנו ממליצים לקוראים שלנו לקחת את אבטחת הטלפון שלהם לידיים, גוגל אחראית לאבטחת כל אנדרואיד טלפון. לשם כך, החברה הציגה בשקט תכונת אבטחה חדשה באנדרואיד 7.1 נוגט בשם "זיהוי פאניקה" שמאזין ללחיצות מרובות על כפתור חזרה ברצף ואז מחזיר את המשתמש למסך הבית שלו.
פשוט מאוד, אם אפליקציה נוכלת מנסה לחטוף את המסך של המשתמש ולמנוע מהמשתמש לעזוב (אולי על ידי הטמעת שירות נגישות ליירט את כל אירועי המפתח), אנדרואיד בעצמה תעקוף את האפליקציה כדי להחזיר את מסך הבית. לאחר מכן, המשתמש יכול כנראה להסיר את ההתקנה של האפליקציה הזדונית מהמפעיל.
תכונה זו עפה מתחת לרדאר, באופן מובן, מכיוון שגוגל כנראה לא תרצה לפרסם לעולם בדרך אחת שבה היא מוציאה יישומים זדוניים. אבל מבט מהיר בקוד המקור הפתוח של אנדרואיד מגלה כיצד התכונה הפשוטה הזו פועלת במכשירים התומכים בה.
בחינת הקוד
קודם כל, רק בגלל שהמכשיר שלך פועל עם אנדרואיד 7.1+ לא אומר שהתנהגות זיהוי הפאניקה הזו מופעלת בפועל. ניתן למצוא את הערך שקובע אם התכונה מופעלת ב- config.xml
קובץ בתוך SystemUI APK.
<integername="config_backPanicBehavior">0integer>
כברירת מחדל, התגובה של אנדרואיד ללחיצות בהלה על כפתור החזרה היא לא לעשות כלום. אם הערך השלם של config_backPanicBehavior
הוא מוגדר ל-1, עם זאת, שם נכנסת אמצעי ההגנה החדש של אנדרואיד.
בְּתוֹך PhoneWindowManager.java
אנו יכולים לראות את עיקר אופן יישום התכונה הזו. קודם כל, הקובץ מגדיר שני דברים: כמה לחיצות על כפתור אחורה נדרשות כדי שהמערכת תקבע שהמשתמש "נכנס לפאניקה" ולאחר מכן איזו פעולה לנקוט בהתבסס על המצב הזה.
// 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;
כברירת מחדל, המערכת דורשת 4 לחיצות רצופות על כפתור חזרה כדי להיכנס למצב פאניקה. אם הפונקציה משתמשת בערך השלם של PANIC_PRESS_BACK_NOTHING
אוֹ PANIC_PRESS_BACK_HOME
נקבע על פי הערך בקובץ התצורה בתוך ה-APK של SystemUI.
ללא קשר לערך זה, כל לחיצה מרובת כפתור חזרה נבדקת כדי לראות אם היא תיחשב כלחיצת פאניקה. ראשית, המערכת מיירטת את הקש למטה עבור KEYCODE_BACK אירוע מפתח ובודק אם המערכת מוגדרת לבדוק אם יש לחיצות מרובות או לחיצות ארוכות על המקש. לאחר מכן, המערכת בודקת אם היא צריכה להעביר את הלחיצה למעלה עבור אותו אירוע מפתח KEYCODE_BACK לאפליקציית המשתמש.
בתוך ה interceptBackKeyDown()
בשיטה, אם מונה הלחיצה האחורית הוא בין 1 ל-3, אזי המערכת מדלגת על פסק הזמן של זיהוי לחיצות מרובות מכיוון שזיהוי הפאניקה דורש לפחות 4 לחיצות לכל פעולה שתבוצע.
לאחר מכן, ברגע שהמשתמש מסיר את האצבע מהמקש האחורי אשר מפעיל אירוע מעלה, ה interceptBackKeyUp
מוסיף 1 למונה המפתחות האחורי. לאחר מכן הוא מציב הודעה ל-300 אלפיות השנייה בעתיד. הסיבה לכך היא בגלל שהמערכת שומרת לעצמה תקופת השהייה של 300 אלפיות שניות כאשר היא מחליטה אם הלחיצות על כפתור החזרה הן חלק מאירוע לחיצה מרובת. אם כן, ייתכן שהמשתמש נכנס לפאניקה ללחוץ על הכפתור ולכן המערכת לא צריכה לשלוח את אירוע המפתח ליישום המשתמש.
ערך הזמן הקצוב ללחיצה מרובה של 300ms מאוחסן בהגדרה המאובטחת "multi_press_timeout
" כפי שמוצג מטה.
/**
* 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";
כברירת מחדל, ערך זה מוגדר ל-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
לאחר מכן, אם אכן מזוהה לחיצה מרובה (כפתור אחד אחורה הושלם למעלה/למטה תוך 300 אלפיות השנייה), המערכת קוראת ל- backMultiPressAction
שיטה לקבוע איזו פעולה לנקוט. לבסוף, מונה לחצן החזרה מאופס ל-0.
אמנם תכונה מינורית מאוד ולא מפורסמת, אבל עדיין נחמד לראות על מה גוגל עובדת מאחורי הקלעים כדי להפוך את אנדרואיד לאבטחה יותר עבור המשתמש הממוצע.