Tapjacking
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Basiese Inligting
Tapjacking is ’n aanval waar ’n malicious application gelanseer word en homself bo ’n victim application posisioneer. Sodra dit sigbaar die slagoffer-app verdoesel, is sy gebruikerskoppelvlak so ontwerp dat dit die gebruiker mislei om daarmee te interaksie hê, terwyl dit die interaksie aan die victim app deurgee.
In werklikheid is dit die gebruiker blindmaak sodat hulle nie weet dat hulle eintlik aksies op die victim app uitvoer nie.
Opsporing
- Kyk vir exported activities in die Android manifest (an activity with an intent-filter is exported by default). As ’n exported activity deur ’n permission beskerm word, sal die attacking app die same permission nodig hê, wat die exploiteerbaarheid beperk.
- Kontroleer die minimum SDK weergawe
android:minSdkVersioninAndroidManifest.xml. As dit laer as 30 is, kan ouer standaardgedrag tapjacking makliker uitleen. - Tydens runtime, gebruik
logcatom geblokkeerde touches op Android 12+ te identifiseer: die stelsel logUntrusted touch due to occlusion by <package>wanneer overlays gefilter word.
Beskerming
Android 12+ default blocking & compat flags
Android 12 (API 31) het “Block untrusted touches” ingevoer: touches wat van ’n ander UID-venster van tipe TYPE_APPLICATION_OVERLAY (opacity ≥0.8) kom, word gedruip. Dit is standaard geaktiveer. Tydens toetse kan jy dit omskakel:
# disable blocking for a specific package (for PoC crafting)
adb shell am compat disable BLOCK_UNTRUSTED_TOUCHES com.example.victim
# re‑enable
adb shell am compat reset BLOCK_UNTRUSTED_TOUCHES com.example.victim
Vertroude vensters (accessibility, IME, assistant) ontvang steeds events. Onsigbare of volledig deursigtige overlays omseil ook die blokkering, wat aanvallers probeer misbruik deur alpha < 0.8.
Hantering van gedeeltelike bedekking
Gedeeltelike overlays wat die teikenarea sigbaar laat, word nie outomaties geblokkeer nie. Mitigeer in sensitiewe views deur events te verwerp met die FLAG_WINDOW_IS_PARTIALLY_OBSCURED flag:
@Override
public boolean onFilterTouchEventForSecurity(MotionEvent event) {
if ((event.getFlags() & MotionEvent.FLAG_WINDOW_IS_PARTIALLY_OBSCURED) != 0) {
return false; // drop tap when anything partially obscures us
}
return super.onFilterTouchEventForSecurity(event);
}
filterTouchesWhenObscured
As android:filterTouchesWhenObscured op true gestel is, sal die View geen aanrakinge ontvang nie wanneer die View se venster deur ’n ander sigbare venster bedek is.
setFilterTouchesWhenObscured
Die attribuut setFilterTouchesWhenObscured wat op true gestel is, kan ook die uitbuiting van hierdie kwesbaarheid voorkom as die Android-weergawe laer is.
As dit op true gestel is, kan byvoorbeeld ’n knoppie outomaties gedeaktiveer word as dit bedek is:
<Button android:text="Button"
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:filterTouchesWhenObscured="true">
</Button>
Eksploitasie
Tapjacking-ExportedActivity
Die mees onlangse Android-toepassing wat ’n Tapjacking-aanval uitvoer (en ’n exported activity van die geteikende toepassing kan aanroep) is te vinde by: https://github.com/carlospolop/Tapjacking-ExportedActivity.
Volg die README-instruksies om dit te gebruik.
FloatingWindowApp
’n Voorbeeldprojek wat FloatingWindowApp implementeer — wat bo-op ander activities geplaas kan word om ’n clickjacking-aanval uit te voer — is te vinde by FloatingWindowApp (bietjie oud; sterkte met die bou van die apk).
Qark
Caution
Dit lyk of hierdie projek nou ongemantien is en dat hierdie funksionaliteit nie meer behoorlik werk nie
Jy kan qark gebruik met die --exploit-apk –sdk-path /Users/username/Library/Android/sdk parameters om ’n kwaadwillige toepassing te skep om moontlike Tapjacking-kwesbaarhede te toets.\
Die versagting is redelik eenvoudig aangesien die ontwikkelaar kan kies om nie raakgebeure te ontvang wanneer ’n view deur ’n ander bedek word nie. Volgens die Android Developer’s Reference:
Soms is dit noodsaaklik dat ’n toepassing kan verifieer dat ’n aksie met die volle kennis en toestemming van die gebruiker uitgevoer word, soos om ’n toestemmingsversoek toe te staan, ’n aankoop te doen of op ’n advertensie te klik. Ongelukkig kan ’n kwaadwillige toepassing probeer om die gebruiker te mislei om hierdie aksies onbewuslik uit te voer deur die beoogde doel van die view te verhul. As ’n oplossing bied die raamwerk ’n aanraking-filtreringsmeganisme wat gebruik kan word om die sekuriteit van views wat toegang tot sensitiewe funksionaliteit gee, te verbeter.
Om aanraking-filtrering te aktiveer, roep
setFilterTouchesWhenObscured(boolean)of stel die android:filterTouchesWhenObscured uitlegattribuut op true. Wanneer geaktiveer, sal die raamwerk aanrakinge verwerp wat ontvang word wanneer die view se venster deur ’n ander sigbare venster verberg word. Gevolglik sal die view nie aanrakinge ontvang wanneer ’n toast, dialoog of ander venster bo die view se venster verskyn nie.
Recent overlay-based malware techniques
- Hook/Ermac variants gebruik byna deursigtige overlays (bv. vals NFC-prompt) om gebare en lock-screen PINs vas te vang terwyl dit aanrakinge daaronder deurstuur, gelewer via Accessibility-ATS modules.
- Anatsa/TeaBot droppers lewer overlays vir honderde banking/crypto apps en vertoon volskerm “maintenance” overlays om slagoffers te vertraag terwyl ATS transfers voltooi.
- Hidden-VNC banking RATs vertoon kortliks phishing-overlays om credentials vas te vang, en staatmaak dan op covert VNC plus Accessibility om taps met minder on-device artifacts te herhaal.
Praktiese wenk vir red teams: meng ’n alpha < 0.8 overlay om Android 12-blokkering te omseil, en eskaleer dan na ’n volskerm accessibility overlay sodra die gebruiker die diens aanskakel. Instrumenteer GestureDescription of ’n headless VNC om beheer te behou nadat credentials gevang is.
Accessibility Overlay Phishing (Banking-Trojan Variant)
Benewens klassieke Tapjacking misbruik moderne Android-bankwarefamilies (bv. ToxicPanda, BrasDex, Sova, ens.) die Accessibility Service om ’n volskerm WebView overlay bo die regmatige toepassing te plaas, terwyl hulle steeds die gebruikersinvoer na die view daaronder kan deurstuur. Dit verhoog geloofwaardigheid dramaties en stel aanvallers in staat om credentials, OTPs of selfs bedrieglike transaksies te outomatiseer.
How it works
- Die kwaadwillige APK versoek die hoogs-sensitiewe
BIND_ACCESSIBILITY_SERVICEtoestemming, gewoonlik deur die versoek weg te steek agter ’n valse Google/Chrome/PDF-viewer dialoog. - Sodra die gebruiker die diens aktiveer, simuleer die malware programmaties die taps wat nodig is om bykomende gevaarlike permissies (
READ_SMS,SYSTEM_ALERT_WINDOW,REQUEST_INSTALL_PACKAGES, …) toe te staan. - ’n WebView word opgeblase en by die window manager gevoeg met die
TYPE_ACCESSIBILITY_OVERLAYvenstertipe. Die overlay kan heeltemal ondeursigtig of semi-deursigtig gerender word en kan as “through” gemerk word sodat die oorspronklike taps steeds aan die agtergrond-activity afgelewer word (dus gebeur die transaksie werklik terwyl die slagoffer net die phishing-form sien).
WebView phishingView = new WebView(getApplicationContext());
phishingView.getSettings().setJavaScriptEnabled(true);
phishingView.loadUrl("file:///android_asset/bank_login.html");
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY, // <-- bypasses SYSTEM_ALERT_WINDOW prompt
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, // «through» flag → forward touches
PixelFormat.TRANSLUCENT);
wm.addView(phishingView, lp);
Tipiese werkstroom wat deur banking Trojans gebruik word
- Vra geïnstalleerde pakkette (
QUERY_ALL_PACKAGES) om uit te vind watter bank-/beursie-app tans oop is. - Laai ’n HTML/JS overlay template van die C2 af wat daardie spesifieke toepassing perfek naboots (Logo, kleure, i18n strings…).
- Vertoon die overlay en oes aanmeldbewyse/PIN/patroon.
- Gebruik die Accessibility API (
performGlobalAction,GestureDescription) om oordragte in die agtergrond te outomatiseer.
Opsporing & Versagting
- Kontroleer die lys geïnstalleerde apps met
adb shell pm list packages -3 -e BIND_ACCESSIBILITY_SERVICE. - Vanaf die toepassing se kant (bank / beursie):
- Skakel
android:accessibilityDataSensitive="accessibilityDataPrivateYes"(Android 14+) op sensitiewe views in om nie-Play-Store dienste te blokkeer. - Kombineer dit met
setFilterTouchesWhenObscured(true)enFLAG_SECURE.
Vir bykomende besonderhede oor die benutting van Accessibility Services vir volledige afstandbeheer van die toestel (bv. PlayPraetor, SpyNote, ens.) sien:
Verwysings
- Android Developers – Tapjacking risk & mitigations (updated 2024)
- Zimperium – HOOK v3 overlay expansion (Aug 2025)
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.


