Learn Android Fundamentals
Before testing, ensure you understand Android’s core concepts:Core Concepts
Core Concepts
- Basics — Android security model, sandboxing, UIDs, permissions
- Dalvik & Smali — DEX bytecode, the human-readable Smali representation
- Application Entry Points — how the system routes traffic into the app
Entry Points
Entry Points
- Activities (Launcher and exported)
- URL Schemes / Deep Links
- Content Providers
- Services
- Broadcast Receivers
- Intents and Intent Filters
Tooling Basics
Tooling Basics
- How to use ADB (Android Debug Bridge)
- How to decompile, modify, and recompile Smali code
- How to extract APKs from a device
Static Analysis Checklist
Static analysis examines the APK without running it. Always start here before dynamic testing.
General Checks
- Check for obfuscation and anti-tampering / emulator-detection controls
- Sensitive banking/financial apps should verify if the device is rooted and respond accordingly
- Search for interesting strings: passwords, URLs, API keys, encryption keys, Bluetooth UUIDs, hardcoded tokens, backdoor credentials
- Pay special attention to Firebase URLs — check for unauthenticated access to Realtime Database endpoints
Manifest (AndroidManifest.xml) Review
- Is the app running in debug mode (
android:debuggable="true")? If so, try to exploit it - Does the APK allow backups (
android:allowBackup="true")? - List all exported Activities — can they be invoked without authentication?
- Unity Runtime: exported
UnityPlayerActivitywith aunityCLI extras bridge; test-xrsdk-pre-init-library <abs-path>for pre-initdlopen()RCE
- Unity Runtime: exported
- List Content Providers — are any exported without proper permissions?
- List exposed Services and Broadcast Receivers
- Check registered URL Schemes for input validation issues
-
android:exportedis mandatory on Android 12+ — misconfigured components allow external intent invocation
Network & Transport Security
- Review Network Security Config (
networkSecurityConfigXML) forcleartextTrafficPermitted="true"or domain-specific overrides - Check for calls to Play Integrity / SafetyNet / DeviceCheck — can custom attestation be hooked or bypassed?
- Inspect App Links / Deep Links (
android:autoVerify) for intent-redirection or open-redirect issues
Code Review
- Identify usage of
WebView.addJavascriptInterfaceorloadData*()that may lead to RCE/XSS - Analyse cross-platform bundles (Flutter
libapp.so, React Native JS bundles, Capacitor/Ionic assets) - Scan third-party native libraries for known CVEs (e.g., libwebp CVE-2023-4863, libpng)
- Run automated scanners: MobSF ≥ 3.9, Semgrep Mobile rules, Pithus
- Check all libraries are compiled with the PIE flag
- Check OEM ROM add-ons (OxygenOS / ColorOS / MIUI / OneUI) for extra exported ContentProviders that bypass permissions
Crypto & Key Management
- Are passwords or secrets hardcoded in source?
- Is the app using deprecated/insecure algorithms (RC4, MD4, MD5, SHA1)?
- Is SSL pinning implemented? Statically search for pinning libraries (
OkHttp,TrustKit,Retrofit, customX509TrustManager). Use Objection or Frida scripts to bypass at runtime.
Dynamic Analysis Checklist
Environment Setup
- Prepare environment: rooted device/emulator, Burp CA cert installed, Drozer, Frida
- For online testing: use Appetize.io for APK execution with ADB access
- For local emulators: Android Studio AVD (x86 with ARM library support) or Genymotion
- Magisk/Zygisk quick notes:
Data Leakage
- Check for unintended data leakage in logs — use
pidcatoradb logcat - Check Copy/Paste buffer — does the app allow copying sensitive data to clipboard?
- Check crash logs — do they expose sensitive information?
- Check SQLite databases at
/data/data/<package>/databases/for plaintext sensitive data - Verify that
adb backup/bmgr backupnowcannot dump app data
Component Exploitation
- Test exported Activities for authorization bypass:
- Test Content Providers for SQL injection and path traversal
- Test exported Services for information disclosure or privilege escalation
- Test Broadcast Receivers for manipulation
- Test deep links / URL schemes:
Traffic Interception
- Intercept HTTP/HTTPS traffic with Burp Suite
- Test for MitM susceptibility — weak cipher suites, improper certificate validation
- Bypass SSL Pinning using:
- Objection:
objection --gadget com.package.app explore --startup-command "android sslpinning disable" - Frida scripts /
apk-mitm - MobSF dynamic analysis
- Objection:
- Test for Tapjacking / TapTrap animation-based attacks (works on Android 15+, no overlay permission needed)
- Test overlay / SYSTEM_ALERT_WINDOW clickjacking and Accessibility Service abuse
Frida Instrumentation
- Use Frida to hook methods, extract runtime values, and bypass checks:
- Dump memory with Fridump3:
- Bypass fingerprint/biometric authentication:
- Instrument with modern tooling: Objection > 2.0, Frida 17+ (Android 16 support)
- For Play Integrity bypass, try:
Frida Gadget,MagiskIntegrityFix, ZygiskNext + PIF combinations
Binder / LPE Testing
- Probe for Binder-level LPEs (CVE-2023-20963, CVE-2023-20928) if scope permits
- For OEM telephony bugs (e.g., OxygenOS CVE-2025-10184): attempt permission-less SMS read/send via
contentCLI orContentResolver
Obfuscation & Deobfuscation
ProGuard
Open-source tool that shrinks, optimizes, and obfuscates Java code. Distributed as part of the Android SDK and runs during release builds.
DexGuard
Commercial obfuscator with stronger protections. Step-by-step deobfuscation guide available at blog.lexfo.fr/dexguard.html.