Dodirnete dugme za odobrenje VPN-a, a dijalog ne reaguje. Prirodan zaključak je da su aplikacija ili server pokvareni, pa ljudi resetuju lozinke, mijenjaju DNS ili ponovo instaliraju klijenta. Obično ništa od toga ne dira kvar, jer Android odbacuje dodire koji dolaze kroz prepreku, a ekran za odobrenje VPN-a je upravo takav osjetljiv dijalog za pristanak. Dodir nikad ne stigne do dugmeta.

Šta zaštita zapravo odbija

Android štiti osjetljive interakcije od tapjackinga, gdje drugi prozor stoji iznad dijaloga i krade dodir ili ga čini dvosmislenim. Prikaz se pridružuje sa View.setFilterTouchesWhenObscured, a događaj dolazi sa MotionEvent.FLAG_WINDOW_IS_OBSCURED kada je drugi prozor označen kao djelimično ili potpuno prekrivajući. Tada se događaj odbacuje umjesto da bude dostavljen na pogrešno mjesto. Android 12 (API 31) proširio je istu zaštitu blokiranjem nepouzdanih dodira na sistemskim površinama za pristanak, zbog čega dijalog za odobrenje može odbiti dodir sa sloja koji bi druge aplikacije još prihvatile.

Tri stvari redovno stvaraju prepreku: aplikacija sa dozvolom prikaza iznad drugih aplikacija, servis pristupačnosti koji crta sadržaj i plutajući widget snimača ekrana ili alata za filtriranje. Neke funkcije ekrana proizvođača dodaju svoj sloj, pa se isti dijalog može ponašati drugačije na dva telefona sa istom verzijom Androida. Prozor koji djelimično prekriva postavlja FLAG_WINDOW_IS_PARTIALLY_OBSCURED, a dodir se odbacuje prije nego što ga dugme uopšte vidi. To je svojstvo ekrana, ne mreže. Ništa nije poslano VPN serveru u trenutku odbacivanja dodira, pa nijedna promjena na strani servera ne može uticati na ishod.

Odvojite mrtav dodir od neuspjele veze

Razlika je cijela dijagnoza i traje deset sekundi. Ako se dodir ignorira i dijalog ostane tačno kakav je bio, prepreka je lokalna. Ako se dijalog zatvori i poslije se pojavi greška, pristanak je prihvaćen i prešli ste u drugu fazu kojoj trebaju vlastite informacije o događajima aplikacije.

Lokalno čitanje možete potvrditi provjerom da li je aplikacija koja traži pristup uopšte pokušala vezu. Klijent koji nikad ne zabilježi pokušaj rukovanja dok je dijalog za pristanak na ekranu nije stigao do mreže.

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

Popišite ko drži dozvolu sloja i koji su servisi pristupačnosti uključeni, pa to uporedite sa onim što radi. Ne isključujte samu zaštitu platforme; ona sprječava skriveni prozor da umjesto vas odgovori na dijalog za pristanak.

Uklonite prepreku pa ponovite uobičajeni tok

Prvo utvrdite koja je aplikacija tražila odobrenje za VPN, da biste znali koji pristanak dajete. Zatim zaustavite konkretni sloj kroz njegovo vlastito podešavanje, a ne povlačenjem široke dozvole koja vam može kasnije trebati. Filter ekrana obično ima prekidač u svojoj aplikaciji; plutajući widget ima kontrolu za zatvaranje; način prikaza proizvođača ima prekidač u postavkama prikaza.

Zatim se vratite u aplikaciju VPN i ponovo zatražite odobrenje, da bi dijalog bio stvoren iznova. Ako dodir sada radi, podesite kompatibilnost sloja ili ga ostavite isključenim dok se povezujete, a zaštitu dodira ostavite uključenom.

Ako ne možete utvrditi koji je prozor odgovoran, uklanjajte ih jedan po jedan i ponavljajte dijalog nakon svake promjene. Kontrolna traka snimača ili plutajuća prečica obično je krivac, a ono što ste uklonili neposredno prije nego što je proradilo je odgovor.

Vratite sve nepovezano što ste usput isključili. Filter ekrana ili noćni režim nisu neprijatelj; neprijatelj je konkretni prozor koji se preklapa sa dijalogom.

Šta ne treba raditi da biste prošli dijalog

Ne dajite pristupačnost nepoznatoj aplikaciji da bi pritisnula dugme i ne instalirajte pomoćnu aplikaciju za to. Time dajete upravo sposobnost koju zaštita postoji da odbije, na ekranu koji odobrava VPN.

Ne automatizujte dijalog alatom za unos. To daje isti rezultat kao zlonamjerni sloj i ne uči vas ničemu o uzroku.

Na upravljanom uređaju politika koja ograničava promjene VPN-a odluka je administratora. Eksperiment sa slojem nije ovlaštenje da je zaobiđete. Isto tako, dugme koje ne reaguje nije razlog da oslabite provjeru certifikata ili promijenite podatke računa: nijedno od dva podešavanja ne uklanja lokalnu prepreku za dodir.

Ako i dalje ne uspije, prijavite tačno ponašanje

Opišite dijalog, a ne zaključak: koja je aplikacija tražila odobrenje, da li je dijalog ostao otvoren ili se zatvorio, da li i drugi osjetljivi upiti poput upozorenja za nepoznate izvore ili pristupačnost ignorišu dodire, model uređaja i verziju Androida, te liste slojeva i servisa pristupačnosti koje ste snimili.

Pitajte vlasnika podrške još jedno: ograničava li politika uređaja promjene konfiguracije VPN-a uopšte. Upravljana blokada izgleda drugačije od ignorisanog dodira, a znanje šta gledate štedi drugi krug.

Taj skup razlikuje problem prekrivenog dodira od pokvarenog ulaznog uređaja, zamrznutog dijaloga ili blokade politikom. Kaže i sljedećoj osobi da li da gleda ekran ili mrežu.

Android smjernice o tapjackingu pokrivaju uslove prekrivenih prozora i API iza ovog ponašanja. Ako želite trag dokaza, tražite FLAG_WINDOW_IS_OBSCURED i FLAG_WINDOW_IS_PARTIALLY_OBSCURED na događaju koji nikad nije stigao do dugmeta. Dijalog koji ostaje otvoren treba zabilježiti, jer pokazuje da je dodir zadržan, a ne predan drugom prozoru.

Povezani članci