Android Nougat (7.1+) มีโหมดตรวจจับความตื่นตระหนกที่จะตรวจจับว่าผู้ใช้กดปุ่มย้อนกลับอย่างเมามันหรือไม่ อ่านเพิ่มเติมเพื่อฟังว่ามันทำอะไร
ในขณะที่ผู้อ่านเว็บไซต์ที่เน้น Android เป็นหลักเช่นของเราเองมักไม่ค่อยเจอ สถานการณ์ที่แอปพลิเคชันอันธพาลทำลายระบบของพวกเขา สิ่งเดียวกันอาจไม่เป็นจริงสำหรับคนทั่วไป ประชากร. เกือบทุกสัปดาห์เราได้ยินจากนักวิจัยด้านความปลอดภัยหลายคนเกี่ยวกับมัลแวร์ใหม่ที่กำหนดเป้าหมายผู้ใช้ Android การโจมตีที่เป็นอันตรายเหล่านี้ส่วนใหญ่สามารถหลีกเลี่ยงได้โดยการตรวจสอบสิทธิ์หรือหลีกเลี่ยงการติดตั้งแอปพลิเคชันที่ดูไม่ชัดเจน และ แม้ว่าเราจะแนะนำให้ผู้อ่านของเราคำนึงถึงความปลอดภัยของโทรศัพท์ของตน แต่ Google ก็มีหน้าที่รับผิดชอบในการรักษาความปลอดภัยให้กับ Android ทุกเครื่อง โทรศัพท์. ด้วยเหตุนี้ บริษัทจึงได้เปิดตัวฟีเจอร์ความปลอดภัยใหม่ใน Android 7.1 Nougat อย่างเงียบๆ ที่เรียกว่า "การตรวจจับความตื่นตระหนก" ซึ่งจะคอยฟังการกดปุ่มย้อนกลับหลายปุ่มติดต่อกัน จากนั้นผู้ใช้จึงกลับไปยังหน้าจอหลัก
ค่อนข้างง่าย หากแอปพลิเคชันโกงพยายามแย่งชิงหน้าจอของผู้ใช้และป้องกันไม่ให้ผู้ใช้ออกไป (อาจโดย เมื่อใช้บริการการเข้าถึงเพื่อสกัดกั้นเหตุการณ์สำคัญทั้งหมด) Android จะแทนที่แอปพลิเคชันเพื่อนำกลับมา หน้าจอหลัก. ผู้ใช้สามารถถอนการติดตั้งแอปพลิเคชันที่เป็นอันตรายออกจากตัวเรียกใช้งานได้
คุณลักษณะนี้ลอยอยู่ใต้เรดาร์ เป็นที่เข้าใจได้ เนื่องจาก Google ไม่น่าจะต้องการโฆษณาไปทั่วโลกด้วยวิธีเดียวกับที่พวกเขากำลังทำลายแอปพลิเคชันที่เป็นอันตราย แต่การดูโค้ดโอเพ่นซอร์สของ Android อย่างรวดเร็วเผยให้เห็นว่าฟีเจอร์ง่ายๆ นี้ทำงานอย่างไรบนอุปกรณ์ที่รองรับ
การตรวจสอบรหัส
ก่อนอื่น เพียงเพราะอุปกรณ์ของคุณใช้ Android 7.1 ขึ้นไปไม่ได้หมายความว่าพฤติกรรมการตรวจจับความตื่นตระหนกนี้เปิดใช้งานอยู่จริงๆ ค่าที่กำหนดว่าคุณลักษณะเปิดอยู่หรือไม่สามารถพบได้ใน config.xml
ไฟล์ภายใน SystemUI APK
<integername="config_backPanicBehavior">0integer>
ตามค่าเริ่มต้น ปฏิกิริยาของ Android ต่อการกดปุ่มย้อนกลับอย่างตื่นตระหนกคือการไม่ทำอะไรเลย ถ้าเป็นจำนวนเต็มของ config_backPanicBehavior
ถูกตั้งค่าเป็น 1 ซึ่งเป็นจุดเริ่มต้นของมาตรการป้องกันใหม่ของ Android
ภายใน 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
ถูกกำหนดโดยค่าในไฟล์กำหนดค่าภายใน SystemUI APK
ไม่ว่าค่านี้จะเป็นอย่างไร การกดหลายปุ่มย้อนกลับแต่ละปุ่มจะถูกตรวจสอบเพื่อดูว่าจะนับเป็นการกดแบบตื่นตระหนกหรือไม่ ขั้นแรก ระบบจะสกัดกั้นการกดลงสำหรับ 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
จากนั้น หากตรวจพบการกดหลายครั้งจริงๆ (ปุ่มย้อนกลับ >1 ปุ่มกดขึ้น/ลงจนเสร็จสิ้นภายใน 300ms) ระบบจะเรียก backMultiPressAction
วิธีการกำหนดว่าจะต้องดำเนินการอย่างไร ในที่สุดตัวนับปุ่มย้อนกลับจะถูกรีเซ็ตเป็น 0
แม้ว่าจะเป็นฟีเจอร์เล็กๆ น้อยๆ ที่ไม่ได้เผยแพร่ต่อสาธารณะ แต่ก็ยังดีที่ได้เห็นสิ่งที่ Google ดำเนินการอยู่เบื้องหลังเพื่อทำให้ Android ปลอดภัยยิ่งขึ้นสำหรับผู้ใช้ทั่วไป