Dodirnete dugme za odobrenje VPN-a i dijalog ne reaguje. Prirodan zaključak je da je VPN aplikacija ili server pokvaren, pa ljudi resetuju lozinke, mijenjaju DNS ili ponovo instaliraju klijent. 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 zahtjev za pristanak koji dobija tu zaštitu. Dodir nikada ne stiže do dugmeta.

Šta zaštita zapravo odbija

Android štiti osjetljive interakcije od tapjacking-a, kada drugi prozor stoji iznad dijaloga i ili ukrade dodir ili ga učini dvosmislenim. Prikaz se uključuje pomoću View.setFilterTouchesWhenObscured, a događaj stiže noseći MotionEvent.FLAG_WINDOW_IS_OBSCURED kada je drugi prozor označen kao djelimično ili potpuno zaklanjajući. Kada se to dogodi, događaj se odbacuje umjesto da bude dostavljen na pogrešno mjesto. Android 12 (API 31) proširio je istu zaštitu blokiranjem nepovjerljivih dodira u sistemskim površinama za pristanak, zbog čega dijalog za odobrenje može odbiti dodir iz overlaya koji bi druge aplikacije još prihvatile.

Tri stvari rutinski stvaraju prepreku: aplikacija koja ima dozvolu za prikazivanje iznad drugih aplikacija, servis za pristupačnost koji crta sadržaj i plutajući widget snimača ekrana ili alata za filtriranje. Neke funkcije ekrana proizvođača dodaju i sopstveni sloj, zbog čega se isti dijalog može ponašati različito na dva telefona sa istom verzijom Androida. Prozor koji djelimično zaklanja postavlja FLAG_WINDOW_IS_PARTIALLY_OBSCURED, a dodir se odbacuje prije nego što ga dugme uopšte vidi. To je svojstvo ekrana, a ne mreže. U trenutku kada se dodir odbaci, na VPN server nije poslano ništa, pa nikakva promjena na strani servera ne može uticati na ishod.

Odvojite mrtav dodir od neuspješne veze

Ta 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 VPN aplikacije.

Lokalno čitanje možete potvrditi provjerom da li je aplikacija koja traži uopšte pokušala vezu. Klijent koji nikada 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 ima dozvolu za overlay i koji su servisi za pristupačnost uključeni, pa ih uporedite s onim što radi. Ne isključujte samu zaštitu platforme; ona je ono što sprečava skriveni prozor da odgovori na zahtjev za pristanak u vaše ime.

Uklonite prepreku, pa ponovite uobičajeni tok

Prvo identificirajte aplikaciju koja je zatražila odobrenje VPN-a, da znate koji pristanak dajete. Zatim zaustavite konkretni overlay kroz njegovo vlastito podešavanje, umjesto da opozovete široku dozvolu koja vam može trebati kasnije. Filter ekrana obično ima prekidač u svojoj aplikaciji; plutajući widget ima kontrolu za zatvaranje; režim ekrana proizvođača ima prekidač u postavkama ekrana.

Nakon toga se vratite u VPN aplikaciju i ponovo zatražite odobrenje, da se dijalog stvori iznova. Ako dodir sada radi, prilagodite ponašanje kompatibilnosti overlaya ili ga ostavite isključenim dok se povezujete, i zadržite zaštitu dodira uključenom.

Ako ne možete utvrditi koji je prozor odgovoran, uklanjajte ih jedan po jedan i ponavljajte dijalog za pristanak 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 jeste odgovor.

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

Šta ne treba raditi da biste prošli dijalog

Ne dajite pristupačnost nepoznatoj aplikaciji da bi mogla pritisnuti dugme i ne instalirajte pomoćnu aplikaciju u tu svrhu. One daju upravo onu mogućnost koju zaštita postoji da uskrati, na ekranu koji odobrava VPN.

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

Na upravljanom uređaju, politika koja ograničava promjene VPN-a odluka je administratora. Eksperiment s overlayem nije ovlaštenje da je zaobiđete. Isto tako, dugme za pristanak koje ne reaguje nije razlog da oslabite provjeru certifikata ili promijenite vjerodajnice računa: nijedno podešavanje 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 zatražila odobrenje, da li je dijalog ostao otvoren ili se zatvorio, ignoriraju li dodire i drugi osjetljivi zahtjevi poput upozorenja o nepoznatim izvorima ili pristupačnosti, model uređaja i verziju Androida, te liste overlaya i pristupačnosti koje ste snimili.

Pitajte vlasnika podrške još jedno pitanje dok ste tamo: ograničava li politika uređaja promjene VPN konfiguracije uopšte. Upravljana blokada izgleda drukčije od ignoriranog dodira, a znanje s kojim imate posla štedi drugi krug.

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

Android smjernice o tapjacking-u pokrivaju uslove zaklonjenih 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 nikada nije stigao do dugmeta. Dijalog koji ostaje otvoren je ono što treba snimiti, jer pokazuje da je dodir zadržan, a ne dostavljen drugom prozoru.

Povezani članci