Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Mobile application security testing (Android + iOS) mapped to OWASP MASVS/MASTG — static reversing (Flutter AOT, Unity IL2CPP, React Native/Hermes, native ARM64, Mach-O/Swift), SAST (manifest/IPC, storage, crypto, signing), dynamic analysis (Frida/objection, TLS-pinning + root/jailbreak bypass, traffic interception), and privacy testing.
.claude/skills/transilienceai-mobile-security/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | 50% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 113% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 80% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 88% | 0% |
| case-16 | ✓→✗ | ▼ Worse | 70% | 0% |
End-to-end mobile application VAPT for Android (APK/AAB) and iOS (IPA), aligned to the OWASP MASVS v2.x control groups and the MASTG testing process. Four complementary tiers:
.so/Mach-O, smali. Recover secrets, endpoints, and the crypto contract without a device.Info.plist, exported-component & IPC surface, WebView, local storage, cryptographic-primitive weakness, code-signing, and automated baseline (MobSF/apkid/apkleaks) → then manual deep-dive.Static dump first (faster, no device); dynamic is a first-class phase whenever a control can only be proven at runtime (enforced pinning, Keystore-backed keys, root reaction, IPC guards). Cross-asset stitching, scoring, and reporting are owned by sibling skills — this skill produces MASVS/MASTG-tagged findings and hands them off.
In a coverage-mode engagement (pentest-engagement mobile mode) completion is code-enforced, not narrative. Two surfaces are gated, and both are mandatory:
| Surface | File | Classes | |---|---|---| | The app bundle | recon/inventory/mobile-surface.json | the 15 MAS-* MASVS classes | | The backend recovered from the bundle | <apex>-api/recon/inventory/surface.json | the ordinary OWASP API/web classes |
The second row is where the material risk has historically been. A decompiled bundle hands you the full server contract, and that surface is not browser-reachable — so it is systematically under-tested by everyone, including the app's own developers. Recovering the endpoint inventory and driving it through the API classes is not an optional extra; a bundle that yields zero endpoints is treated as a failed acquisition.
Per-class detail: reference/masvs-class-map.md. Two rules worth internalising before you write a negative:
proof_mode: runtime cannot be closed statically. Pinning and root detection are the classic traps: static analysis can prove a control is inert (a CertificatePinner built and never attached, a RootBeer that no DEX references) — raise that as a positive. It can never prove the control is effective; that needs a bypass attempt that failed, and a failed bypass is a legitimate, reportable result.proof_mode: static can never be device-deferred. No device does not excuse the manifest, the signature, the bundled dependencies, or the secrets in the artifact.lib/arm64-v8a/libapp.so / iOS App.framework), Unity (libil2cpp.so + global-metadata.dat), or React Native + Hermes (libhermes.so + index.android.bundle) — needs a runtime-aware decompiler, not just jadx.Start at reference/methodology.md — the phase backbone (ACQUIRE → TRIAGE → STATIC → DYNAMIC → NETWORK → STORAGE → PLATFORM/IPC → BACKEND PIVOT → REPORT), app acquisition + evidence integrity, the MASVS→file coverage map, finding-tagging convention, and the client→API pivot. It routes to every reference below. Do preflight (../coordination/reference/preflight-checklist.md) first.
Cross-cutting
Android
iOS
Framework-specific reverse engineering
index.android.bundle with hermes-dec, BuildConfig secret fast-path, RN-specific MASVS surface.dlopen of an Android .so with a Bionic→glibc forwarder + strcmp/memcmp interceptor (no Frida/emulator).Cross-skill (reused capabilities — cross-linked, not duplicated)
libil2cpp.so + global-metadata.dat dump (Il2CppDumper/Il2CppInspector).Java.perform, ObjC hooks) used by both dynamic files..so..so.Deterministic control-wiring detector
../../tools/apk_control_wiring.py — static cross-reference over a decompiled Android tree that distinguishes a REAL applied control from an ORPHANED one: RootBeer/SafetyNet/Play-Integrity shipped-but-unwired (referenced but the result gates nothing), CertificatePinner built-but-not-attached to an OkHttpClient, hardcoded AES/DES key literals + their invoke-sites, and bundled-but-never-loaded .so. Run it in the STATIC phase BEFORE authoring remediation verdicts — a naive re-test that only greps for the control's presence wrongly reports an inert control "fixed" (a recurring mobile re-test crux).network_security_config.xml, or "no secrets" from a cryptid 1 iOS binary — check the JS/native pin layers, and decrypt the IPA first.Other measured skills in the registry, with their headline benchmark lift.