shuvonsec/claude-bug-bounty/mobile-pentest
Claude Code and agent skill by shuvonsec/claude-bug-bounty
- community
Checking that the SKILL.md file is still in the repository.
Mobile app pentest for bug bounty (Android APK + iOS IPA) — runtime-first workflow: install app, proxy through Burp/mitmproxy, drive the UI, capture packets, then test the API exactly like a web target; escalate to decompile (apktool/jadx) and Frida/objection only when traffic is SSL-pinned, encrypted, or absent. Covers APK/IPA decompile for hardcoded secrets + hidden API endpoints + base URLs the web app never exposes, exported-activity and deeplink intent injection, WebView addJavascriptInterface bridge abuse, SSL pinning bypass (objection patchapk / Frida CertificatePinner + checkServerTrusted hooks), OkHttp interceptor chain to recover request signing, JNI native-lib triage, and the quick apktool/grep secret + endpoint sweep. Use when the program scope includes a mobile app, when web recon dries up and you need a fresh attack surface, or when traffic is pinned and you must MitM it.
Install
npx vskill@latest install shuvonsec/claude-bug-bounty/mobile-pentestSKILL.md
MOBILE APP PENTEST (ANDROID / iOS)
Mobile apps talk to the same backend as the web app — but they ship a different, less-hunted attack surface: base URLs, API endpoints, header schemes, and hardcoded secrets that web recon never sees. Most hunters skip mobile. That's the edge.
The whole point: the APK/IPA is a copy of the client. Decompile it once and you get every endpoint the web JS never references, every staging/internal base URL, and often a live API key sitting instrings.xml. Then you attack the backend like any web target.
RUNTIME-FIRST — THE ONE RULE THAT MATTERS
Do NOT start by decompiling. Decompiling first burns hours recovering crypto you may never need. Default order:
Most of your paid mobile bugs (IDOR, auth bypass, business logic) come from step 5 — plain HTTP traffic you replay in Burp. Reversing (apktool/jadx/Frida) is a support step to get traffic flowing or to recover a request signer, not the goal.
If Burp already has a stable, replayable request, you are done reversing. Switch to server-side testing.
0. SCOPE CHECK FIRST
Mobile has its own scope traps. Before touching the binary:
- Is the app itself in scope, or only the web domains? Many programs list the app package (
com.target.app) explicitly. If only*.target.comis listed, the API endpoints the app calls are usually in scope — but the app binary analysis may not be. Run/scope. - Third-party SDKs (analytics, ads, crash reporters) bundled in the APK are out of scope — they belong to Firebase/Sentry/AppsFlyer, not the target.
- Don't report "app is debuggable" / "no root detection" / "no obfuscation" — these are N/A on almost every program (no real-world attacker impact). See the Never-Submit list below.
1. SETUP (one-time)
iOS needs a jailbroken device (Apple ships no emulator that defeats pinning). Same flow: install IPA, proxy, drive UI, escalate to frida/objection only if pinned.
2. STATIC SWEEP — SECRETS + ENDPOINTS WEB RECON MISSES 🔑
This is the highest-ROI 5 minutes in mobile hunting. Decompile, then grep. The quick check (no rooted device needed):
Automate it with apkleaks (regex pack for URIs + secrets) when installed:
What to do with each hit (impact-first — this is what makes it submittable vs N/A):
| Found in APK | Action — prove real impact RIGHT NOW | |
|---|---|---|
internal-api.target.com / staging.target.com base URL not in web recon | httpx it, crawl it, /recon it — fresh surface, often weak auth | |
| Live API key (Google Maps, AWS, Algolia, Mapbox, SendGrid) | Call the API as the key. Unkeyed billing = $$. See Credential Leaks rule — a key alone is Informational; proven access is Medium/High | |
Endpoint the web app never calls (/api/internal/, /admin/, /debug/) | Hit it from Burp with your session token — admin/IDOR candidate | |
| Hardcoded backend password / basic-auth header | Verify it authenticates against the live host |
Mobile is the single best place to find non-public base URLs. The web JS bundle only references prod; the app frequently hardcodes staging, internal, and partner APIs. Each one is a new/recontarget.
3. NETWORK-LAYER TESTING — TREAT IT LIKE A WEB TARGET 📡
Once traffic is in Burp, mobile API testing is web API testing. The loop:
- Capture one clean baseline request, replay it unchanged to prove it's stable.
- Mutate the smallest safe field first (never many fields at once — if it's signed/stateful, multi-field changes hide the real blocker).
- Compare status, body, timing, and server state. Note: accepted / normalized / rejected / blocked-by-signer.
What to hit first (full payloads + bypass tables live in the web2-vuln-classes and security-arsenal skills):
- Auth / session — strip or swap the bearer token, device-id, and tenant/user-id; replay across two accounts. Mobile apps love
X-User-Id/deviceIdheaders that the server trusts → horizontal IDOR. - Business logic — change object IDs, amounts, prices, coupon state; skip workflow steps; replay payment requests (race / double-spend). Follow the money.
- Injection — fields reaching search, filter, file metadata, XML, or server-side fetch. SSRF/SSTI/SQLi same as web.
- GraphQL / WebSocket — introspection, field overreach, channel auth, stale-token reuse.
Mobile API endpoints are frequently older and less-reviewed than the web equivalents — the same dev shipped a stricter web gateway but the app hits a legacy/v1/route directly. Always diff the app's endpoints against the web app's.
4. SSL PINNING BYPASS — WHEN TRAFFIC IS BLANK 🔓
If the proxy shows no app traffic (only OS/other-app traffic), the app is pinning. Pinning bypass is a support step to get back to network-layer testing — not a finding by itself.
Fastest path — objection (works against most stock implementations):
When objection fails (custom pinning / obfuscation) — targeted Frida hook:
After bypass, traffic flows into Burp → go back to the Network-Layer loop. You don't report the pinning — you report whatever the now-visible traffic lets you exploit.
5. EXPORTED ACTIVITIES + DEEPLINK INJECTION 📲
AndroidManifest.xml is a free attack-surface map. Any component with exported="true" (or an intent-filter, which makes it exported by default) can be launched by any other app on the device — or a malicious web page.
The dangerous combo (the single most common paid mobile bug pattern):
That means a one-click <a href="targetapp://..."> from any web page reaches an internal component. Test from adb first, then weaponize via a hosted HTML link:
Impact ladder (what makes it submittable):
- Deeplink param flows into a WebView `loadUrl()` → attacker controls the page rendered inside the authenticated app → token theft / phishing in a trusted context. This is the KuCoin-style `UriActivity` pattern — a public-program report where an exported activity opened an arbitrary URL in the app's WebView.
- Deeplink reaches a non-exported internal component via intent redirection (
startActivity(getIntent().getParcelableExtra("forward"))) → access screens meant to be internal-only. - Deeplink sets an auth token / deep-links into a logged-in flow → account takeover if the URL is attacker-supplied (per Oversecured's disclosed deeplink→ATO chain).
Webjavascript:andintent://URIs in a browser can fire these deeplinks with one click. That browser→app pivot is what turns a "theoretical" exported component into a real, submittable one-click exploit.
6. WEBVIEW addJavascriptInterface BRIDGE 🌉
A WebView that calls addJavascriptInterface(obj, "name") exposes that Java object's @JavascriptInterface methods to any JS running in the WebView. If you also control the URL the WebView loads (via the deeplink bug above, an open redirect, or a file:///MitM page), the JS bridge is your foothold.
What to look for and prove:
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/mobile-pentest/SKILL.md
Popularity
- Repository stars
- 4,237
- Repository forks
- 768
- 7-day trend score
- 42
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/shuvonsec/claude-bug-bounty/mobile-pentest)