VPN 승인 버튼을 탭했는데 대화상자가 반응하지 않습니다. 자연스러운 결론은 앱이나 서버가 고장 났다는 것이어서 사람들은 비밀번호를 재설정하고, DNS를 바꾸고, 클라이언트를 다시 설치합니다. 하지만 보통 그중 어느 것도 원인을 건드리지 못합니다. Android는 장애물을 통해 도착한 터치를 버리며, VPN 승인 화면은 바로 그런 민감한 동의 대화상자이기 때문입니다. 탭은 버튼에 도달하지 못합니다.

보호가 실제로 거부하는 것

Android는 다른 창이 대화상자 위에 앉아 탭을 훔치거나 모호하게 만드는 탭재킹으로부터 민감한 상호작용을 보호합니다. 뷰는 View.setFilterTouchesWhenObscured 로 참여하고, 다른 창이 부분적 또는 전체적으로 가리는 것으로 표시되면 이벤트가 MotionEvent.FLAG_WINDOW_IS_OBSCURED 와 함께 도착합니다. 그러면 이벤트는 잘못된 곳으로 전달되는 대신 폐기됩니다. Android 12 (API 31)는 시스템 동의 화면에서 신뢰할 수 없는 터치를 차단해 같은 보호를 확장했고, 그래서 승인 대화상자는 다른 앱이라면 여전히 받아들일 오버레이의 탭을 거부할 수 있습니다.

장애물을 일상적으로 만드는 것은 세 가지입니다. 다른 앱 위에 표시할 권한을 가진 앱, 콘텐츠를 그리는 접근성 서비스, 화면 녹화기나 필터 도구의 떠 있는 위젯입니다. 일부 제조사 화면 기능은 자체 레이어를 더하며, 그래서 같은 Android 버전의 두 휴대폰에서 같은 대화상자가 다르게 동작할 수 있습니다. 부분적으로 가리는 창은 FLAG_WINDOW_IS_PARTIALLY_OBSCURED 를 설정하고, 터치는 버튼이 보기도 전에 폐기됩니다. 이것은 화면의 속성이지 네트워크의 속성이 아닙니다. 탭이 폐기되는 순간 VPN 서버로 아무것도 전송되지 않았으므로 서버 쪽 변경은 결과에 영향을 줄 수 없습니다.

죽은 탭과 실패한 연결을 구분하세요

이 구분이 진단의 전부이며 십 초면 됩니다. 탭이 무시되고 대화상자가 원래 그대로라면 장애물은 국소적입니다. 대화상자가 닫히고 그 뒤 오류가 나타나면 동의가 수락된 것이며, 앱 자체의 이벤트 정보가 필요한 다른 단계로 넘어간 것입니다.

국소적이라는 판단은 요청한 앱이 연결을 시도했는지 확인해 뒷받침할 수 있습니다. 동의 대화상자가 화면에 있는 동안 핸드셰이크 시도를 한 번도 기록하지 않은 클라이언트는 네트워크에 도달하지 않았습니다.

adb shell cmd appops get com.example.vpn SYSTEM_ALERT_WINDOW
adb shell settings get secure enabled_accessibility_services

오버레이 권한을 가진 앱과 활성화된 접근성 서비스를 나열하고 실행 중인 것과 대조하세요. 플랫폼의 보호 자체를 끄지 마세요. 숨은 창이 대신 동의 대화상자에 답하는 것을 막는 것이 바로 그 보호입니다.

장애물을 제거한 뒤 정상 흐름을 다시 시도하세요

먼저 어느 앱이 VPN 승인을 요청했는지 파악해 어떤 동의를 주는지 아세요. 그다음 나중에 필요할 수 있는 넓은 권한을 회수하는 대신 해당 오버레이를 자체 설정에서 멈추세요. 화면 필터는 보통 자체 앱에 토글이 있고, 떠 있는 위젯에는 닫기 제어가 있으며, 제조사 화면 모드에는 디스플레이 설정에 스위치가 있습니다.

그 뒤 VPN 앱으로 돌아가 승인을 다시 요청해 대화상자를 새로 만드세요. 이제 탭이 되면 오버레이의 호환 동작을 조정하거나 연결하는 동안 꺼 두고, 터치 보호는 켜 둡니다.

어느 창이 책임인지 모르겠다면 하나씩 제거하고 변경할 때마다 동의 대화상자를 다시 시도하세요. 녹화기 제어 막대나 떠 있는 단축키가 흔한 범인이며, 작동하기 직전에 제거한 것이 답입니다.

도중에 끈 무관한 것은 모두 되돌리세요. 화면 필터나 야간 모드는 적이 아닙니다. 대화상자와 겹치는 특정 창이 적입니다.

대화상자를 통과하려고 하지 말아야 할 일

버튼을 누르게 하려고 낯선 앱에 접근성을 주지 말고, 그 목적으로 보조 앱을 설치하지 마세요. 그것은 VPN을 허용하는 화면에서 보호가 거부하려고 존재하는 능력을 그대로 넘기는 일입니다.

입력 도구로 대화상자를 자동화하지도 마세요. 악성 오버레이와 같은 결과를 내고 원인에 대해 아무것도 가르쳐 주지 않습니다.

관리되는 기기에서는 VPN 변경을 제한하는 정책이 관리자의 결정입니다. 오버레이 실험은 그것을 우회할 권한이 아닙니다. 마찬가지로 반응하지 않는 동의 버튼은 인증서 검증을 약화하거나 계정 자격 증명을 바꿀 이유가 아닙니다. 두 설정 모두 국소적 터치 장애물을 없애지 않습니다.

그래도 실패하면 정확한 동작을 보고하세요

결론이 아니라 대화상자를 설명하세요. 어느 앱이 승인을 요청했는지, 대화상자가 열린 채였는지 닫혔는지, 알 수 없는 소스나 접근성 경고 같은 다른 민감한 확인도 탭을 무시하는지, 기기 모델과 Android 버전, 그리고 수집한 오버레이와 접근성 목록입니다.

그 자리에서 지원 담당자에게 한 가지 더 물으세요. 기기 정책이 VPN 구성 변경을 제한하는지 여부입니다. 관리되는 차단은 무시된 탭과 다르게 보이며, 어느 쪽을 보는지 알면 두 번째 왕복이 줄어듭니다.

이 조합은 가려진 터치 문제를 고장 난 입력 장치, 멈춘 대화상자, 정책 차단과 구분합니다. 다음 사람이 화면을 볼지 네트워크를 볼지도 알려 줍니다.

Android의 탭재킹 지침은 가려진 창의 조건과 이 동작 뒤의 API를 다룹니다. 증거 흔적을 원한다면 버튼에 도달하지 못한 이벤트에서 FLAG_WINDOW_IS_OBSCURED 와 FLAG_WINDOW_IS_PARTIALLY_OBSCURED 를 찾으세요. 열린 채 남는 대화상자가 기록할 대상입니다. 탭이 다른 창으로 전달되지 않고 보류되었음을 보여 주기 때문입니다.

관련 글