Decompile. Intercept.
Hook. Liquidate.
An interactive field guide for Android security research. Complete with video walkthrough guides, setup commands, auto recon scripts, deep link fuzzers, CVSS calculators, and native memory hooks.
Scope & Legal Guidelines
Delineate client-side reverse engineering from backend testing, and enforce duplicate-checking protocols before submission.
Client-Side vs Backend Scope Boundaries
Client-side static reversing (reading APK manifest, Smali bytecode, and SQLite databases) applies directly to the target application binary. Always confirm backend API hostnames against your target program's in-scope asset list prior to sending active web traffic.
Duplicate Checking Protocol
Check public disclosure logs, issue trackers, and past project notes before submitting. Ensure your finding demonstrates concrete impact (e.g. account takeover or unauthorized data access) rather than submitting plain static decompiler warnings.
Build Your Testing Lab
Select an environment with root access, HTTP proxy interception, and hardware optimization tailored for your PC hardware.
Optimal screen resolution (1080x2340 @ 420dpi) that runs silky smooth on 12th Gen Intel i5 without choking RAM.
CRITICAL: Select "Google APIs", NOT "Google Play". Google APIs images allow easy root access (`adb root`).
- RAM: 4096 MB (4GB)
- VM Heap: 512 MB
- Graphics: Hardware - GLES 2.0
- Cores: 4 Cores
Android Studio AVD
Free / OfficialOfficial emulator. Select Google APIs (non-Play Store) system images for easy root access via Magisk or direct su binary replacement.
sdkmanager --install "system-images;android-33;google_apis;x86_64"
Genymotion
Free TierFast VirtualBox-based emulator platform with automated root toggles and fast multi-version OS switching.
genymotion desktop installer
Waydroid Container
Linux ContainerContainer-based Android system for Linux hosts. Offers near-native performance and LXC container access.
sudo apt install waydroid
Rooted Physical Device
RecommendedProvides minimal anti-emulator noise for targets with root/emulator detection. Flash Magisk + Shamiko.
fastboot flash boot patched_boot.img
Corellium Cloud Virtualization
Enterprise CloudEnterprise cloud virtual ARM Android/iOS devices with root, snapshotting, and kernel-level inspection out of the box.
corellium.com (Browser SaaS Platform)
Windows 11 + WSL Kali Setup: Run the AVD/Genymotion emulator on Windows 11 host (for GPU acceleration), while running Frida, JADX, APKTool, MobSF, and Drozer directly inside WSL Kali Linux. Point the emulator proxy to your WSL IP.
Android 13 & 14 Security Protections & Bypasses
Technical reference for modern OS-level security defenses: RECEIVER_NOT_EXPORTED enforcement, granular media permissions, and Accessibility service restrictions.
Android 14 mandates explicit export flags (`RECEIVER_EXPORTED` or `RECEIVER_NOT_EXPORTED`) when registering dynamic broadcast receivers. Unexported receivers block cross-app broadcast injection attacks.
`READ_EXTERNAL_STORAGE` is split into `READ_MEDIA_IMAGES`, `READ_MEDIA_VIDEO`, and `READ_MEDIA_AUDIO`. Android 14 introduces the partial access Photo Picker model.
Sideloaded APKs are blocked from binding to Accessibility services unless the user manually enables "Allow restricted settings" under App Info -> Special App Access.
Ultimate Tool Repository
Every tool indexed with direct download links, install commands, and usage parameters.
JADX
STATIC DECOMPILERDecompiles Android DEX & APK binaries directly into readable Java code with cross-references.
🔗 GitHub: skylot/jadxsudo apt install jadx
jadx-gui target.apk
APKTool
DISASSEMBLERDecodes resources and disassembles DEX to Smali bytecode. Enables rebuilding patched APKs.
🔗 GitHub: iBotPeaches/Apktoolsudo apt install apktool
apktool d target.apk -o ./unpacked
MobSF
AUTO SCANNERMobile Security Framework — automated static + dynamic analysis web application for mobile binaries.
🔗 GitHub: MobSFdocker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf
apkleaks
SECRET SCANNERScanning tool for extracting URIs, endpoints, API keys, and hardcoded secrets from APK files.
🔗 GitHub: dwisiswant0/apkleakspip install apkleaks
apkleaks -f target.apk -o leaks.txt
TruffleHog
ENTROPY SCANNERHigh-entropy secret scanner designed to audit decompiled code directories for private keys.
🔗 GitHub: trufflesecurity/trufflehogpip install trufflehog
trufflehog filesystem ./unpacked
QARK
CODE AUDITORQuick Android Review Kit — static analysis tool designed to inspect Java source code and APKs.
🔗 GitHub: linkedin/qarkpip install qark
qark --apk target.apk
Frida + frida-tools
INSTRUMENTATIONDynamic instrumentation toolkit to inject JS scripts into native and Java processes live at runtime.
🔗 GitHub: frida/fridapip install frida-tools frida
frida -U -f com.target.app -l script.js
Objection
RUNTIME EXPLORERRuntime mobile exploration toolkit powered by Frida. SSL pinning bypass, root bypass, and keystore dumps.
🔗 GitHub: sensepost/objectionpip install objection
objection --g com.target.app explore
Play Integrity Fix
INTEGRITY BYPASSMagisk module to spoof device fingerprint properties and pass Play Integrity API attestations.
🔗 GitHub: chiteroman/PlayIntegrityFixmagisk --install-module PlayIntegrityFix.zip
reboot via Magisk UI
Burp Suite
HTTP PROXYCore web proxy for inspecting, tampering with, and fuzzing REST/GraphQL API traffic.
🔗 Site: PortSwigger Burpadb push burp_cert.der /sdcard/
burpsuite
mitmproxy
CLI PROXYInteractive scriptable CLI HTTP/HTTPS proxy with Python scripting capabilities.
🔗 Site: mitmproxy.orgpip install mitmproxy
mitmweb --web-port 8081
Drozer
IPC AUDITORSecurity framework for enumerating exported components, ContentProviders, and services.
🔗 GitHub: WithSecureLabs/drozerpip install drozer
drozer console connect
ADB
PLATFORM TOOLAndroid Debug Bridge — pull data, launch activities, and monitor device logcat logs.
🔗 Docs: Android adbsudo apt install adb
adb shell am start -n com.target.app/.MainActivity
Ghidra
NATIVE DECOMPILERSoftware reverse engineering framework for analyzing native ARM `.so` shared libraries.
🔗 Site: ghidra-sre.orgsudo apt install ghidra
ghidra Run
radare2 & r2frida
CLI DISASSEMBLERCommand-line binary reversing framework. Bridges with Frida for live native inspection.
🔗 GitHub: radareorg/radare2sudo apt install radare2 && pip install r2frida
r2 frida://usb//com.target.app
scrcpy
DISPLAY MIRRORMirror and control physical Android devices from your desktop over USB or TCP/IP.
🔗 GitHub: Genymobile/scrcpysudo apt install scrcpy
scrcpy --max-fps 60
apksigner & zipalign
APK SIGNINGRe-align zip offsets and sign patched APK binaries with custom debug keystores prior to installation.
sudo apt install zipalign apksigner
apksigner sign --ks debug.keystore out.apk
blutter
FLUTTER REVERSINGFlutter App Reverse Engineering Tool — reconstructs Dart classes and offsets from native `libapp.so` binaries.
🔗 GitHub: Dutyos/bluttergit clone https://github.com/Dutyos/blutter.git
python blutter.py ./extracted_arm64 ./out
reFlutter
FLUTTER PATCHERPatches compiled Flutter binaries to force HTTP traffic through proxy servers and bypass custom socket SSL pinning.
🔗 GitHub: Impact-I/reFlutterpip install reflutter
reflutter target.apk
Step-by-Step Testing Roadmap
Execute these stages in sequence. Each phase yields target data for the subsequent step.
Target Reconnaissance & Fingerprinting
Determine package ID, version codes, target SDK, and architecture (Native, React Native, Flutter, Cordova).
apkid target.apk
Static Review & Decompilation
Decompile with JADX, audit `AndroidManifest.xml` for exported components, grep for API keys/tokens, and check `network_security_config.xml`.
apkleaks -f target.apk && jadx-gui target.apk
Dynamic Environment & Proxy Setup
Install target APK onto test lab, execute `frida-server`, push Burp CA certificate into system trust store, and confirm proxy traffic.
adb push frida-server /data/local/tmp/ && adb shell "chmod 755 /data/local/tmp/frida-server && /data/local/tmp/frida-server &"
Bypass SSL Pinning & Protections
Execute Objection/Frida hooks to unpin SSL certificates, bypass root checks, and spoof Play Integrity attestations.
objection --g com.target.app explore -s "android sslpinning disable"
API Mapping & Endpoint Assessment
Interact with every screen while Burp captures traffic. Map endpoints for IDOR, BOLA, mass assignment, and auth flaws.
- Query Introspection (
__schema) to dump models. - Query Batching & Depth Limits for DoS testing.
- Mutation Object-Level Authorization (IDOR).
- SMS/Email OTP rate-limits & IP rotation bypasses.
- Response manipulation: flip status booleans in Burp.
- Weak token generation & timestamp seeds.
Component Attack Pass (Drozer & Intents)
Use Drozer to query exported activities, content providers, broadcast receivers, and services without permission checks.
Storage & WebView Audit
Inspect SharedPreferences, SQLite DBs, and WebViews configured with enabled JavaScript or JS interfaces.
Native Binary Reversing (`.so` Shared Libraries)
Decompile ARM native `.so` libraries in Ghidra to analyze JNI exports, obfuscated cryptographic routines, or license validations.
Documentation & Reporting
Structure reproduction steps, attach PoC captures, clearly define business impact, and suggest remediation.
Framework-Specific Testing
Standard Java/Kotlin decompilation with JADX fails on non-native frameworks. Use framework-tailored workflows.
React Native
JavaScriptLogic lives inside bundled JavaScript files (`index.android.bundle`) rather than DEX bytecode.
- Unpack:
apktool d app.apk - Extract
assets/index.android.bundle - If Hermes, decompile with
hermes-dec - Beautify:
npx js-beautify
Flutter (Dart)
Dart AOTFlutter compiles Dart into native ahead-of-time binaries (`libapp.so`). JADX cannot read Dart code.
- Extract
lib/arm64-v8a/libapp.so - Use blutter to restore Dart classes
- Patch SSL:
reflutter app.apk - Load generated symbols into Ghidra
Cordova
HTML5 ContainerHybrid container wrapping HTML5 web assets communicating via native plugin bridges.
- Unpack APK with
apktool d - Inspect web assets in
assets/www/ - Review domain rules in
config.xml - Audit plugins in
assets/www/plugins/
Interactive Audit Checklist
Track findings as you test. Selections save automatically in browser local storage.
Automated APK Recon Script
Execute `apkid`, `apktool`, `apkleaks`, and `jadx` in a single bash pipeline.
#!/usr/bin/env bash
# recon.sh - Automated Mobile Reconnaissance Pipeline
if [ -z "$1" ]; then echo "Usage: ./recon.sh <target.apk>"; exit 1; fi
TARGET="$1"
OUT_DIR="recon_$(basename "$TARGET" .apk)"
mkdir -p "$OUT_DIR"
echo "[+] Step 1: Running APKID Fingerprinting..." && apkid "$TARGET" > "$OUT_DIR/apkid.txt"
echo "[+] Step 2: Unpacking Resources with APKTool..." && apktool d "$TARGET" -o "$OUT_DIR/unpacked" -f
echo "[+] Step 3: Extracting API Keys & URIs with APKLeaks..." && apkleaks -f "$TARGET" -o "$OUT_DIR/secrets.txt"
echo "[+] Step 4: Decompiling DEX to Java with JADX..." && jadx -d "$OUT_DIR/source" "$TARGET"
echo "[+] Recon completed! Results saved to $OUT_DIR/"
Curated Video Tutorials Hub
Step-by-step video guides for Android security techniques.
Frida SSL Pinning Bypass
Learn how to inject custom JavaScript scripts to bypass SSL certificate pinning on Android 13/14.
JADX Decompilation Workflow
Master navigating JADX-GUI, auditing Manifest permissions, and tracing cross-references.
Burp Suite System CA Setup
Step-by-step guide to installing Burp's CA certificate into `/system/etc/security/cacerts/`.
Drozer Exploitation Guide
Learn how to audit exported components and execute SQL injection via Drozer.
Deep Link & Custom Scheme Fuzzing
Extract deep link schemes from `AndroidManifest.xml` and trigger intent redirection vulnerabilities using ADB.
Audit manifest for `` tags.
adb shell dumpsys package com.target.app | grep -E "scheme|host"
Simulate deep link triggers to test input validation and WebView URL redirects.
adb shell am start -W -a android.intent.action.VIEW -d "appscheme://auth?url=https://attacker.com"
Interactive CVSS v3.1 & Bounty Estimator
Calculate CVSS v3.1 severity scores, vector strings, and estimated bounty payout ranges for Android vulnerabilities.
Deliberately Vulnerable Practice Targets
Sharpen security skills legally on vulnerable training applications prior to testing live bounty programs.
InsecureBankv2
Vulnerable mobile banking app. Teaches IPC bugs, plaintext storage, hardcoded symmetric keys, and custom SSL pinning bypass.
DIVA
Damn Insecure Vulnerable App. Covers storage flaws, hardcoded secrets, access control bypasses, and SQLite injection.
Sieve
Vulnerable password manager app. Teaches exported service exploitation, ContentProvider path traversal, and key derivation bugs.
GoatDroid
OWASP training platform. Covers web service integration flaws, side-channel leaks, and mobile auth bypasses.
Advanced Track & Native Memory Hooks
Essential Objection command reference, custom Frida hooks, and native memory patching.
Objection Command Cheat Sheet & Expanded Master Reference ↓
Complete reference of Objection runtime commands for root detection, SSL pinning, class hooking, memory inspection, and Intent invocation.
| Category | Command | Description / Purpose |
|---|---|---|
| Root Bypass | android root disable | Disable common root checks (RootBeer, SafetyNet, etc.) |
| Root Bypass | android root simulate | Fake a non-rooted environment to target app |
| SSL Pinning | android sslpinning disable | Bypass OkHttp, TrustManager, and Xamarin SSL pinning |
| Class Hooking | android hooking list classes | List all currently loaded DEX classes |
| Class Hooking | android hooking search classes <keyword> | Search classes matching keyword (e.g. *User*) |
| Method Hooking | android hooking watch class <class> | Trace all methods inside target class |
| Method Hooking | android hooking set return_value <method> false | Force a method to return false (root check bypass) |
| Memory | memory list modules | List loaded native shared libraries (.so files) |
| Memory | memory search "<pattern>" | Search process RAM for hardcoded string patterns |
| File System | file download <remote> <local> | Pull private app database or file to host PC |
| SQLite | sqlite connect <db_path> | Connect to local SQLite database directly |
| Intent Control | android intent launch_activity <Activity> | Start target activity directly via Intent |
| KeyStore | android keystore list | List Android hardware/software KeyStore entries |
| Clipboard | android clipboard monitor | Monitor clipboard changes live for credentials |
Custom Frida Script Template (Java Method Overriding) ↓
Java.perform(function () {
var CertPinner = Java.use('com.target.security.CertPinner');
CertPinner.verify.implementation = function (chain) {
console.log('[+] Custom SSL Pinning Check Bypassed Successfully');
return true;
};
});
Native ARM64 Memory Patching Snippets (`Memory.protect`) ↓
// Patch native ARM64 memory instructions dynamically
var baseAddr = Module.findBaseAddress("libnative.so");
var targetOffset = baseAddr.add(0x1234);
// Grant Read/Write/Execute permissions to target memory page
Memory.protect(targetOffset, 4, 'rwx');
// Overwrite instruction at memory address with RET (0xc0035fd6 in ARM64)
targetOffset.writeByteArray([0xd6, 0x5f, 0x03, 0xc0]);
console.log('[+] Native ARM64 memory instruction patched with RET!');
Drozer Full Command Master Sheet (50+ Commands) ↓
Complete reference of all Drozer modules for package info, component scans, intent exploitation, and content provider injection.
| Command | Description | Example / Usage |
|---|---|---|
| help / list | Show help menu or list available modules | dz> list |
| run app.package.list | List installed packages | run app.package.list |
| run app.package.attacksurface | Show attack surface (exported components) | run app.package.attacksurface -a com.example.app |
| run app.package.info / dump | Show detailed info or dump manifest | run app.package.info -a com.example.app |
| run app.activity.info | List activities of target application | run app.activity.info -a com.example.app |
| run app.provider.info | List content providers | run app.provider.info -a com.example.app |
| run app.service.info | List services | run app.service.info -a com.example.app |
| run app.broadcast.info | List broadcast receivers | run app.broadcast.info -a com.example.app |
| run app.activity.start | Start a specific activity directly | run app.activity.start -a com.example.app -n .MainActivity |
| run scanner.provider.injection | Scan for SQL injection in ContentProviders | run scanner.provider.injection -a com.example.app |
| run scanner.provider.access | Check content provider access issues | run scanner.provider.access -a com.example.app |
| run scanner.misc.debuggable | Check if app is debuggable | run scanner.misc.debuggable -a com.example.app |
| run scanner.misc.exportedcomponents | Scan for all exported components | run scanner.misc.exportedcomponents -a com.example.app |
| run scanner.permissions.findleaks | Find permission leaks | run scanner.permissions.findleaks -a com.example.app |
| run exploit.provider.query / insert | Execute query or insert into ContentProvider | run exploit.provider.query -a com.example.app |
| run exploit.sharedprefs.read / write | Read or tamper with SharedPreferences XML | run exploit.sharedprefs.read -a com.example.app -p /data/.../config.xml |
| run file.download / list | List or download internal app files | run file.download -p /data/data/com.example.app/databases/db.sqlite |
| run scanner.webview.javascript | Detect vulnerable WebView JS interfaces | run scanner.webview.javascript |
Burp Suite System CA Cert Installation & ADB / Frida / Objection Commands ↓
# Convert .der to .pem openssl x509 -inform DER -in burp.der -out burp.pem # Get subject hash (e.g. 9a53d94b) openssl x509 -inform PEM -subject_hash_old -in burp.pem | head -1 # Rename cert to hash.0 & push to system trust store mv burp.pem 9a53d94b.0 adb root && adb remount adb push 9a53d94b.0 /system/etc/security/cacerts/ adb shell chmod 644 /system/etc/security/cacerts/9a53d94b.0 adb reboot
| Category | Command | Description |
|---|---|---|
| Emulator | emulator -list-avds | List available Android Virtual Devices |
| Emulator | emulator -avd Pixel4_API33 -writable-system -no-snapshot | Start emulator with writable system |
| MobSF | docker run -it --rm -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest | Launch MobSF container |
| ADB | adb shell pm list packages -3 | List 3rd-party installed packages |
| Frida | frida-ps -Uia | List running apps on USB device |
| Frida | frida --codeshare masbog/frida-android-unpinning-ssl -f com.target.app -U | Inject SSL unpinning codeshare script |
| Objection | objection -g com.target.app explore | Explore target application |
| Objection | android sslpinning disable && android root disable | Disable SSL pinning and root checks |
Automated Grep-Sensitive-Words.sh Script ↓
Recursively search decompiled APK source code for secret keys, tokens, AES ciphers, and hardcoded URLs into isolated results files.
#!/usr/bin/env bash
# Grep-Sensitive-Words.sh - Automated Secret Key Extraction
if [ -z "$1" ]; then echo "Usage: ./Grep-Sensitive-Words.sh <APK_Decompiled_Folder>"; exit 1; fi
SEARCH_DIR="$1"
mkdir -p grep_results
KEYWORDS=("accesskey" "admin" "aes" "api_key" "apikey" "checkClientTrusted" "crypt" "http:" "https:" "password" "pinning" "secret" "SHA256" "SharedPreferences" "superuser" "token" "X509TrustManager" "insert into")
for keyword in "${KEYWORDS[@]}"; do
SAFE_KEY=$(echo "$keyword" | sed 's/[: ]/_/g')
grep -EHirn --include=\*.{smali,xml,java,txt} "$keyword" "$SEARCH_DIR" > "grep_results/${SAFE_KEY}.txt"
done
echo "[+] Scan completed! Results stored in grep_results/"
PIDCAT Logcat Filtering Studio ↓
Filter Android logcat logs live by package ID to eliminate noise and isolate sensitive token leakage.
# Clone pidcat repository git clone https://github.com/JakeWharton/pidcat.git && cd pidcat # Run against target application over USB or emulator python pidcat.py -s emulator-5554 com.target.app
Automated Emulator Bootstrapper (`androidBB.bat`) ↓
Automated Windows batch script to start AVD emulator, wait for boot completion, mount root, and launch `frida-server` in background.
@echo off
REM Start emulator
start "" emulator -avd Pixel6-Root -writable-system -no-snapshot -port 5560
echo Waiting for emulator to connect to ADB...
adb wait-for-device
echo Waiting for Android to finish booting...
:wait_boot
for /f "delims=" %%a in ('adb shell getprop sys.boot_completed 2^>nul') do (
if "%%a"=="1" goto booted
)
timeout /t 2 >nul
goto wait_boot
:booted
echo Boot completed. Waiting extra for system to be ready...
timeout /t 5 >nul
echo Restarting ADB as root...
adb root
timeout /t 2 >nul
adb remount
timeout /t 2 >nul
echo Starting frida-server...
adb shell "./data/local/tmp/frida-server &"
echo Done.
pause
Frida Custom DER Cert SSL Pinning Conversion Guide ↓
Convert Burp Suite `.cer` to `.crt` DER format for injection into custom Frida SSL pinning bypass scripts.
# 1. Convert burpsuite.cer to DER crt format
openssl x509 -in burpsuite.cer -out cert-der.crt -outform DER
openssl x509 -inform der -in cert-der.crt -out burp.pem
# 2. Push cert to target device
adb push cert-der.crt /data/local/tmp/
adb shell chmod 644 /data/local/tmp/cert-der.crt
# 3. Reference in Frida Java Script
var fileInputStream = FileInputStream.$new("/data/local/tmp/cert-der.crt");
var bufferedInputStream = BufferedInputStream.$new(fileInputStream);
MobSF Docker Guide (Static + Dynamic Analysis) ↓
docker run -it --rm -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
docker run -it --rm \ -p 8000:8000 \ -p 1337:1337 \ -e MOBSF_ANALYZER_IDENTIFIER=emulator-5554 \ opensecurity/mobile-security-framework-mobsf:latest
Disclosed HackerOne Reports & Technical Writeups
Study real vulnerability writeups disclosed by top researchers on HackerOne and Oversecured to build exploitation mindset.
🔗 WebView & Deep Link Exploitation
HackerOne & Blogs💥 RCE & Arbitrary Code Execution
CRITICAL IMPACT📂 File Theft & ContentProvider Flaws
HIGH IMPACT🔓 Authentication & Lock Bypasses
BOUNTY HIGHLIGHTS🎓 Conference Talks & Free Courses
ACADEMY☁️ Online APK Scanners & Decompilers
CLOUD TOOLSVulnerability Report Generator
Generate standard Markdown vulnerability reports ready for submission.
# [Component] — [Vulnerability Class] leading to [Impact]
## Target Information
- **Package ID:** `com.target.app`
- **Tested Version:** 2.4.1 (Build 10842)
- **Vulnerable Component:** `com.target.app.AuthActivity`
## Summary
A brief summary explaining the root vulnerability and overall impact.
## Steps to Reproduce
1. Launch target application on rooted test environment.
2. Execute ADB command to trigger exported activity:
`adb shell am start -n com.target.app/.AuthActivity`
3. Observe direct authorization bypass to internal dashboard without auth tokens.
## Proof of Concept
[Attach video recording or screenshot]
## Business Impact
Allows local apps on device to bypass authentication filters and extract user session data.
## Suggested Remediation
Remove `android:exported="true"` or declare signature-level permission checks in `AndroidManifest.xml`.