Вы націскаеце кнопку ўхвалы VPN, а дыялог не рэагуе. Натуральная выснова — праграма або сервер зламаныя, таму людзі скідваюць паролі, мяняюць DNS ці пераўсталёўваюць кліент. Звычайна нішто з гэтага не кранае прычыну, бо Android адкідае націскі, якія прыходзяць праз перашкоду, а экран ухвалы VPN — менавіта такі адчувальны запыт згоды. Націск ніколі не дасягае кнопкі.

Што насамрэч адхіляе абарона

Android ахоўвае адчувальныя ўзаемадзеянні ад tapjacking, калі іншае акно сядзіць па-над дыялогам і крадзе націск або робіць яго няпэўным. Прадстаўленне далучаецца праз View.setFilterTouchesWhenObscured, і падзея прыходзіць з MotionEvent.FLAG_WINDOW_IS_OBSCURED, калі іншае акно пазначана як частковае або поўнае зацямненне. Тады падзея адкідаецца, а не патрапляе не туды. Android 12 (API 31) пашырыў тую ж абарону блакаваннем недавераных дотыкаў у сістэмных паверхнях згоды, таму дыялог ухвалы можа адхіліць націск з накладання, якое іншыя праграмы яшчэ прынялі б.

Тры рэчы рэгулярна ствараюць перашкоду: праграма з дазволам паказу па-над іншымі праграмамі, служба даступнасці, якая малюе змест, і плаваючы віджэт ад запісвальніка экрана або інструмента фільтрацыі. Некаторыя функцыі дысплея вытворцы дадаюць уласны пласт, таму адзін і той жа дыялог можа паводзіць сябе па-рознаму на двух тэлефонах з адной версіяй Android. Акно, якое часткова зацямняе, устанаўлівае FLAG_WINDOW_IS_PARTIALLY_OBSCURED, і націск адкідаецца раней, чым кнопка яго ўбачыць. Гэта ўласцівасць экрана, а не сеткі. У момант адкідання націску на сервер VPN нічога не адпраўлена, таму ніякае змяненне на баку сервера не можа паўплываць на вынік.

Аддзяліце мёртвы націск ад няўдалага злучэння

Розніца і ёсць увесь дыягназ, і яна займае дзесяць секунд. Калі націск ігнаруецца, а дыялог застаецца такім жа, перашкода лакальная. Калі дыялог зачыняецца і потым з’яўляецца памылка, згода прынята і вы перайшлі на іншую стадыю, якой патрэбны ўласныя звесткі пра падзеі праграмы 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 па tapjacking апісвае ўмовы зацямнёных акон і API за гэтымі паводзінамі. Калі патрэбны след доказаў, шукайце FLAG_WINDOW_IS_OBSCURED і FLAG_WINDOW_IS_PARTIALLY_OBSCURED у падзеі, якая так і не дайшла да кнопкі. Дыялог, які застаецца адкрытым, і варта зафіксаваць, бо ён паказвае, што націск быў стрыманы, а не перададзены іншаму акну.

Падобныя артыкулы