روی دکمه تأیید VPN ضربه می‌زنید و پنجره واکنشی نشان نمی‌دهد. نتیجه طبیعی این است که برنامه یا سرور خراب شده، پس مردم رمزها را بازنشانی می‌کنند، DNS را عوض می‌کنند یا کلاینت را دوباره نصب می‌کنند. معمولاً هیچ‌یک از این‌ها به عیب مربوط نیست، چون اندروید ضربه‌هایی را که از میان یک مانع برسند دور می‌ریزد، و صفحه تأیید VPN دقیقاً همان نوع پنجره حساس رضایت است. ضربه هرگز به دکمه نمی‌رسد.

محافظت در واقع چه چیزی را رد می‌کند

اندروید تعاملات حساس را در برابر tapjacking محافظت می‌کند، جایی که پنجره دیگری روی پنجره گفتگو می‌نشیند و ضربه را می‌دزدد یا آن را مبهم می‌کند. یک نما با View.setFilterTouchesWhenObscured به آن می‌پیوندد، و رویداد با MotionEvent.FLAG_WINDOW_IS_OBSCURED می‌رسد وقتی پنجره دیگری به‌عنوان پوشاننده جزئی یا کامل علامت‌گذاری شده باشد. آن‌گاه رویداد دور انداخته می‌شود نه اینکه به جای اشتباه تحویل شود. اندروید 12 (API 31) همان محافظت را با مسدودکردن لمس‌های غیرقابل‌اعتماد در سطوح رضایت سیستم گسترش داد، و به همین دلیل پنجره تأیید می‌تواند ضربه‌ای از یک لایه رویی را رد کند که برنامه‌های دیگر هنوز می‌پذیرفتند.

سه چیز مرتب مانع می‌سازند: برنامه‌ای با مجوز نمایش روی برنامه‌های دیگر، سرویس دسترسی‌پذیری که محتوا می‌کشد، و ویجت شناور از ضبط‌کننده صفحه یا ابزار فیلتر. برخی ویژگی‌های نمایش سازنده لایه خود را هم اضافه می‌کنند، و به همین دلیل همان پنجره می‌تواند روی دو گوشی با نسخه یکسان اندروید متفاوت رفتار کند. پنجره‌ای که جزئی می‌پوشاند 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 را محدود می‌کند تصمیم مدیر است. آزمایش لایه رویی مجوز دورزدن آن نیست. به همین ترتیب، دکمه تأیید بی‌واکنش دلیلی برای تضعیف بررسی گواهی یا تغییر اعتبارنامه حساب نیست: هیچ‌یک از این دو تنظیم مانع لمسی محلی را برنمی‌دارد.

اگر باز هم نشد، رفتار دقیق را گزارش کنید

پنجره را توصیف کنید نه نتیجه را: کدام برنامه تأیید خواست، پنجره باز ماند یا بسته شد، آیا درخواست‌های حساس دیگر مانند هشدارهای منابع ناشناس یا دسترسی‌پذیری هم ضربه‌ها را نادیده می‌گیرند، مدل دستگاه و نسخه اندروید، و فهرست‌های لایه رویی و دسترسی‌پذیری که ثبت کردید.

وقتی آنجا هستید یک پرسش دیگر از مسئول پشتیبانی بپرسید: آیا سیاست دستگاه اصلاً تغییرات پیکربندی VPN را محدود می‌کند. مسدودسازی مدیریت‌شده با ضربه نادیده‌گرفته‌شده متفاوت به نظر می‌رسد، و دانستن اینکه کدام را می‌بینید یک دور دوم را صرفه‌جویی می‌کند.

این مجموعه مشکل لمس پوشانده‌شده را از دستگاه ورودی خراب، پنجره یخ‌زده یا مسدودسازی سیاست جدا می‌کند. همچنین به نفر بعدی می‌گوید به صفحه نگاه کند یا به شبکه.

راهنمای اندروید درباره tapjacking شرایط پنجره‌های پوشانده و APIهای پشت این رفتار را پوشش می‌دهد. اگر رد شواهد را می‌خواهید، FLAG_WINDOW_IS_OBSCURED و FLAG_WINDOW_IS_PARTIALLY_OBSCURED را در رویدادی بجویید که هرگز به دکمه نرسید. پنجره‌ای که باز می‌ماند همان چیزی است که باید ثبت شود، چون نشان می‌دهد ضربه نگه داشته شده و به پنجره دیگری تحویل نشده است.

مقالات مرتبط