Wireless & Mobile Security · intermediate · ~11 min
- Structure a mobile assessment with the **OWASP MASTG/MASVS** - Perform **static analysis** of an app package (manifest, secrets, crypto) - Perform **dynamic analysis**: inspect local storage and proxy network traffic on an authorized device - Explain **certificate pinning** and why testers bypass it *on their own test device* - Keep every step **lab-only**: an emulator or a device you own, with test accounts
Mobile assessment combines static analysis (inspecting the app package) with dynamic analysis (watching the app run). OWASP's Mobile Application Security Testing Guide (MASTG) and the MASVS verification standard give that work a repeatable structure, so you check the same categories every time instead of poking around.
This builds directly on the mobile app security model: you know findings cluster in storage, traffic, permissions, and the backend — here you actually go look. Everything happens on an emulator or a device you own, with test accounts and a lab backend. Testing an app or account that isn't yours is out of scope.
A structured method is what separates a real assessment from guessing. The MASVS gives you verifiable requirements (e.g. "no sensitive data in unprotected storage," "TLS with proper validation"), and the MASTG tells you how to test each one. That structure makes findings reproducible and reports credible — and it ensures you don't miss the storage or traffic issue that matters most.
An APK is a zip archive; tools decompile its DEX bytecode into readable code. Review:
debuggable, allowBackup, cleartext traffic.iOS IPA files are inspected similarly; deeper inspection is harder without a jailbroken test device.
On a device/emulator you own:
Test device (yours) --> intercepting proxy (your CA) --> lab backend
the app inspect requests/responses test data only
Pinning means the app only trusts a specific server certificate/key — a good defence that stops ordinary interception. To inspect an app's own traffic on a device you control, a tester may disable pinning in that test build/instrumented app to see what it sends. This is a lab technique on your own device — never a way around someone else's security.
Defensive note: pinning with a safe update/rotation path is a strong control; just don't let it hide insecure behaviour from your own testing.
Knowledge check:
The MASVS gives you the checklist categories; map each to a test:
| MASVS area | You verify… |
|---|---|
| Storage | No sensitive data in unprotected storage; keystore used |
| Crypto | Strong, standard algorithms; keys not hardcoded |
| Network | TLS everywhere; certificate validation (and pinning where apt) |
| Platform | Least-privilege permissions; components not needlessly exported |
| Code/Resilience | No secrets in the package; debuggable off |
Work category by category — it's how you avoid missing something.
Mobile assessment combines inspecting the app package with watching the app run. OWASP's mobile guidance gives that work a structure.
Start with the package itself.
An APK (the Android app file) is really a zip archive. Tools decompile its DEX (the compiled bytecode) back into readable code. From there, review:
iOS apps (IPA files) are inspected the same way, though it is harder without a jailbroken device.
Now run the app and observe its behavior.
An app may pin its server's certificate. This means it only trusts that specific certificate, so a proxy's certificate is rejected and you cannot read the traffic.
Testers bypass pinning on an authorized test device to inspect the traffic. Keep the right framing: pinning is a defense that raises the bar. Its absence — or a trivial bypass — is worth noting, but pinning is never a substitute for server-side checks.
OWASP's Mobile Application Security Testing Guide (MASTG) and the Mobile Top 10 structure mobile testing. They cover issues such as improper credential usage, insecure storage and communication, and weak crypto or authentication. Think of them as the mobile analogue of the WSTG and Top 10 you use for web.
Test only the apps and accounts you are authorized to test. Use your own test devices.
A lab-only mobile testing checklist you can actually run against your own test app:
LAB SETUP (device/emulator you own, test accounts, lab backend only)
[ ] Install the app on an emulator or a device you control
[ ] Route traffic through your intercepting proxy; install YOUR CA on the test device
STATIC
[ ] Unzip/decompile the APK; grep code + resources for keys/secrets/tokens
[ ] Read the manifest: debuggable? allowBackup? cleartextTraffic? exported components?
[ ] Check crypto: any ECB / hardcoded keys / custom crypto?
DYNAMIC
[ ] Exercise the app (log in with a TEST account, use main features)
[ ] Inspect app-private storage for plaintext tokens/PII
[ ] Review captured traffic: TLS? cert validation? sensitive data in requests?
REPORT (per finding)
[ ] Title, severity, evidence (redacted), impact, remediation, retest
How to use it. Run the static checks first (they're fast and often decisive), then the dynamic ones against a test account. Each box maps to a MASVS requirement, so a completed checklist is your evidence. Keep everything on your own device with test data — that's what keeps it authorized.
Walking the workflow the MASTG way:
| Phase | Action | Finding it catches |
|---|---|---|
| Setup | Own device + proxy + test accounts | (keeps it authorized) |
| Static | Grep package for secrets | Hardcoded API keys |
| Static | Read manifest flags | debuggable/backup/cleartext/exported |
| Dynamic | Inspect private storage | Plaintext tokens/PII |
| Dynamic | Review proxied traffic | Cleartext / no cert validation |
| Report | Structured finding | Reproducible, actionable |
Static-then-dynamic is the habit: cheap checks first, live checks second, everything on hardware you own.
Mistake 1 — testing an app/account that isn't yours. Wrong: proxying a third-party app with a real account. Why wrong: that's unauthorized, and you may capture others' data. Fix: your own test build (or an authorized target), a test account, a lab backend.
Mistake 2 — skipping static analysis. Wrong: jumping straight to traffic capture. Why wrong: you miss hardcoded secrets and manifest issues that a 5-minute grep finds. Fix: static first (package + manifest + crypto), then dynamic.
Mistake 3 — treating pinning bypass as an attack skill. Wrong: framing "bypass pinning" as breaking security. Why wrong: it's only valid to inspect your own app's traffic on your own device. Fix: keep it a lab technique; report pinning as a positive control.
Recognize it: if you can't point to "my device, my test account," stop.
Questions to ask: Did I do static before dynamic? Is this strictly my device/app/account? Which MASVS category am I currently verifying?
Security & safety — scope, data, evidence.
Beginner habits: static before dynamic; own device + test account always; map each check to a MASVS item. Advanced habits: automate static checks in CI; script storage/traffic captures for repeatability; write findings with clear severity and retest steps.
Beginner 1 — Static-first. Objective: list the three things you'd check in a decompiled package before ever running the app, and what each reveals. Concepts: static analysis.
Beginner 2 — Lab authorization. Objective: write the one-line rule that keeps mobile testing authorized, and name the three "own" things it requires (device, account, backend). Concepts: scope, ethics.
Intermediate 1 — Storage review. Objective: for a test app you own, describe how you'd inspect its private storage after login and exactly what would count as a finding. Concepts: dynamic storage analysis.
Intermediate 2 — Traffic + pinning. Objective: explain how you'd inspect an app's HTTPS traffic on your own device, what to do if it pins certificates, and how you'd report pinning. Concepts: proxying, pinning.
Challenge — Mini MASTG report. Objective: run the lab checklist against a deliberately-insecure practice app (yours), and write up two findings in full report form (title, severity, evidence redacted, impact, remediation, retest). Requirements: your own app/device/account; test data only. Concepts: the whole lesson + reporting.
Next: you've completed the wireless & mobile track — continue into the defensive capstone labs to apply this end-to-end.