Το Android αγνοεί το πάτημα έγκρισης VPN; Ελέγξτε πρώτα το επικάλυμμα
Ένα κουμπί έγκρισης που δεν δέχεται πάτημα είναι συνήθως τοπικό εμπόδιο στην οθόνη, όχι βλάβη διακομιστή ή λογαριασμού. Αφαιρέστε το επικάλυμμα και κρατήστε την προστασία.
Πατάτε το κουμπί έγκρισης VPN και το παράθυρο δεν αντιδρά. Το φυσικό συμπέρασμα είναι ότι η εφαρμογή ή ο διακομιστής έχουν βλάβη, γι αυτό οι άνθρωποι αλλάζουν κωδικούς, DNS ή επανεγκαθιστούν τον πελάτη. Συνήθως τίποτα από αυτά δεν αγγίζει το πρόβλημα, γιατί το Android απορρίπτει αγγίγματα που φτάνουν μέσα από εμπόδιο, και η οθόνη έγκρισης VPN είναι ακριβώς ένα τέτοιο ευαίσθητο παράθυρο συγκατάθεσης. Το πάτημα δεν φτάνει ποτέ στο κουμπί.
Τι απορρίπτει στην πραγματικότητα η προστασία
Το Android προστατεύει τις ευαίσθητες αλληλεπιδράσεις από το tapjacking, όπου ένα άλλο παράθυρο κάθεται πάνω από το παράθυρο και κλέβει το πάτημα ή το κάνει ασαφές. Μια προβολή συμμετέχει με 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 για το tapjacking καλύπτουν τις συνθήκες καλυμμένων παραθύρων και τα API πίσω από αυτή τη συμπεριφορά. Αν θέλετε το ίχνος αποδείξεων, αναζητήστε τα FLAG_WINDOW_IS_OBSCURED και FLAG_WINDOW_IS_PARTIALLY_OBSCURED στο συμβάν που δεν έφτασε ποτέ στο κουμπί. Το παράθυρο που μένει ανοιχτό είναι αυτό που πρέπει να καταγραφεί, γιατί δείχνει ότι το πάτημα κρατήθηκε και δεν παραδόθηκε σε άλλο παράθυρο.