Android 7.1+에는 미친 듯이 뒤로 버튼 누르기를 감지하는 '패닉 감지' 모드가 있습니다.

click fraud protection

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 키 이벤트에 대한 위로 누르기를 사용자 앱에 전달해야 하는지 여부를 확인합니다.

에서 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를 더욱 안전하게 만들기 위해 뒤에서 어떤 작업을 하고 있는지 보는 것은 여전히 ​​좋은 일입니다.