Dodirnete gumb za odobrenje VPN-a, a dijalog ne reagira. Prirodan zaključak je da su aplikacija ili poslužitelj pokvareni, pa ljudi poništavaju zaporke, mijenjaju DNS ili ponovno instaliraju klijenta. Obično ništa od toga ne dira kvar, jer Android odbacuje dodire koji dolaze kroz prepreku, a zaslon za odobrenje VPN-a upravo je takav osjetljiv dijalog za pristanak. Dodir nikada ne stigne do gumba.

Što 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 pomoću View.setFilterTouchesWhenObscured, a događaj dolazi s MotionEvent.FLAG_WINDOW_IS_OBSCURED kada je drugi prozor označen kao djelomič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 redovito stvaraju prepreku: aplikacija s dopuštenjem prikaza iznad drugih aplikacija, usluga pristupačnosti koja crta sadržaj i plutajući widget snimača zaslona ili alata za filtriranje. Neke funkcije zaslona proizvođača dodaju svoj sloj, pa se isti dijalog može ponašati drukčije na dva telefona s istom verzijom Androida. Prozor koji djelomično prekriva postavlja FLAG_WINDOW_IS_PARTIALLY_OBSCURED, a dodir se odbacuje prije nego što ga gumb uopće vidi. To je svojstvo zaslona, ne mreže. Ništa nije poslano VPN poslužitelju u trenutku odbacivanja dodira, pa nijedna promjena na strani poslužitelja ne može utjecati na ishod.

Odvojite mrtav dodir od neuspjele veze

Razlika je cijela dijagnoza i traje deset sekundi. Ako se dodir ignorira i dijalog ostane točno kakav je bio, prepreka je lokalna. Ako se dijalog zatvori i poslije se pojavi pogreš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 je li aplikacija koja traži uopće pokušala vezu. Klijent koji nikad ne zabilježi pokušaj rukovanja dok je dijalog za pristanak na zaslonu 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 tko drži dopuštenje sloja i koje su usluge pristupačnosti uključene, pa to usporedite s 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 njegovu vlastitu postavku, a ne povlačenjem širokog dopuštenja koje vam može kasnije trebati. Filter zaslona 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 ponovno zatražite odobrenje, da bi dijalog bio stvoren iznova. Ako dodir sada radi, prilagodite 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ći prečac 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 zaslona ili noćni način nisu neprijatelj; neprijatelj je konkretni prozor koji se preklapa s dijalogom.

Što ne treba raditi da biste prošli dijalog

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

Ne automatizirajte 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, gumb koji ne reagira nije razlog da oslabite provjeru certifikata ili promijenite podatke računa: nijedna od dvije postavke ne uklanja lokalnu prepreku za dodir.

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

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

Pitajte vlasnika podrške još jedno: ograničava li politika uređaja promjene konfiguracije VPN-a uopće. Upravljana blokada izgleda drukčije od ignoriranog dodira, a znanje što 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 treba li gledati zaslon ili mrežu.

Androidove smjernice o tapjackingu pokrivaju uvjete prekrivenih prozora i API-je 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 gumba. Dijalog koji ostaje otvoren treba zabilježiti, jer pokazuje da je dodir zadržan, a ne predan drugom prozoru.

Povezani članci