Mobile Application Penetration Testing: iOS & Android, Explained
A mobile application penetration test assesses three layers at once: the app running on the device, the sensitive data it stores locally, and the backend API it talks to. Testers reverse-engineer the binary, inspect on-device storage for secrets, attempt to defeat client-side protections like certificate pinning, and attack the backend — all measured against the OWASP Mobile Application Security Verification Standard (MASVS). The defining fact of mobile security is that your app runs on a device the attacker fully controls, so the app itself is part of the attack surface.
If you are scoping a mobile application pentest, this guide explains the three layers, the standard we test against, and the platform-specific techniques that make mobile distinct from web.
The standard: OWASP MASVS and MASTG
Mobile testing has its own recognized framework. The OWASP Mobile Application Security Verification Standard (MASVS) defines what a secure mobile app must do, grouped into control areas: storage, cryptography, authentication, network communication, platform interaction, code quality, and resilience against reverse engineering. Its companion, the Mobile Application Security Testing Guide (MASTG), provides the concrete procedures and test cases. Working against MASVS means coverage is measured against a public benchmark instead of an individual tester’s habits — and it gives you a defensible answer when a customer or auditor asks which standard you tested to.
Layer 1: the app on the device
A mobile app is distributed directly to the attacker’s hardware, which changes everything. On a jailbroken or rooted device, a tester has the same control over your app that an attacker would:
- Static analysis and reverse engineering — the IPA or APK is decompiled to inspect the code, configuration, and resources. The first thing this surfaces is hardcoded secrets: API keys, encryption keys, and credentials baked into the binary, which are trivially extracted because the app ships to the attacker. Tools like MobSF automate the first pass.
- Runtime instrumentation — using Frida and objection, the tester hooks into the live app to bypass logic, read variables in memory, and call internal functions directly. This is how client-side controls get defeated at runtime rather than in the code.
- Anti-tampering and resilience — root/jailbreak detection, anti-debugging, and obfuscation are tested for bypasses. These are defense-in-depth, not a substitute for server-side checks, and the test confirms an attacker cannot simply disable them.
Layer 2: local data storage
What an app leaves behind on the device is one of the most common and serious mobile findings. Testers inspect every place data is written:
- Insecure storage — sensitive data sitting in plaintext in
SharedPreferences(Android),NSUserDefaultsorplistfiles (iOS), unprotected SQLite databases, cache, or logs. - Platform secret stores — whether secrets are correctly placed in the Android Keystore or iOS Keychain, with the right access controls, rather than rolled by hand.
- Data leakage — sensitive information exposed through app backups, screenshots taken when the app is backgrounded, the clipboard, or third-party SDK logging.
The principle is simple: assume the device can be lost, stolen, or compromised, and verify that what’s stored on it would not hand an attacker the keys.
Layer 3: the platform attack surface and the backend
Mobile apps expose components to the operating system and other apps, and that interface is an attack surface of its own:
- Inter-process communication (IPC) — on Android, exported activities, services, content providers, and broadcast receivers that other apps can invoke; on iOS, the equivalent inter-app surfaces. Misconfigured exports let a malicious app on the same device trigger privileged actions or read protected data.
- Deep links and URL schemes — custom URL handlers that, if they trust their input, can be abused to drive the app into unintended states or leak data to an attacker-controlled destination.
- Network communication and certificate pinning — testers intercept the app’s traffic with a proxy (Burp Suite), and where the app uses certificate pinning to prevent that, they attempt to bypass it with Frida. Pinning is a valuable control, but a test confirms whether it actually holds — and once traffic is visible, the backend API gets the same scrutiny a web pentest applies: broken object-level authorization (IDOR), weak JWT handling, injection, and business-logic abuse.
That last point is the one teams most often underestimate: the backend API behind a mobile app is frequently its weakest link, because developers assume only the official app will ever call it. An attacker doesn’t play by that rule. This is why a serious mobile engagement always includes the API layer, not just the client.
Why a mobile test is not just a web test
The backend overlaps with web testing, but the device layers do not exist on the web at all. Reverse engineering, on-device storage, Keychain/Keystore handling, IPC exposure, deep-link abuse, and certificate-pinning bypass are mobile-specific, and they are where the platform-unique findings come from. Testing only the API misses half the picture; testing only the binary misses the other half. A complete assessment covers all three layers, on each platform you ship — iOS and Android differ enough in implementation that a fix on one does not guarantee the other.
The bottom line
Mobile application penetration testing accepts the uncomfortable truth that your app runs on hardware the attacker owns, and tests accordingly: the binary is reverse-engineered, local storage is inspected for anything sensitive, client-side protections like certificate pinning are challenged, the IPC and deep-link surface is probed, and the backend API is attacked in full — all measured against OWASP MASVS. The result is a prioritized, proof-backed view of what an attacker with your app on their phone could actually achieve.
For how scope drives cost, see our pentest pricing guide, and for choosing the right depth of access, types of penetration testing. Ready to test your app? Get in touch.
Frequently asked questions
What is mobile application penetration testing? add
Mobile application penetration testing is a security assessment of an iOS or Android app that examines three layers: the application running on the device, the data it stores locally, and the backend API it communicates with. Testers reverse-engineer the app, inspect local storage for secrets, attempt to bypass protections like certificate pinning, and attack the backend — all measured against the OWASP Mobile Application Security Verification Standard (MASVS).
What standard does a mobile pentest follow? add
The recognized standard is the OWASP Mobile Application Security Verification Standard (MASVS), paired with the Mobile Application Security Testing Guide (MASTG) for the actual test procedures. MASVS defines security requirements across storage, cryptography, authentication, network communication, platform interaction, code quality, and resilience to reverse engineering, so coverage is consistent and measured against a public benchmark.
Why isn't testing the backend API enough? add
Because the app on the device is itself an attack surface. A mobile app ships to the attacker's own phone, where they have full control: they can decompile it, read hardcoded secrets, inspect data written to the device, hook the running app with tools like Frida, and bypass client-side protections. Insecure local storage, weak certificate pinning, and exposed inter-process components are real, common findings that a backend-only test never sees.
Do you test both iOS and Android? add
Yes. The two platforms share the same threat model but differ in implementation — Keychain versus Keystore for secret storage, the App Transport Security and entitlements model on iOS versus exported activities, services, and content providers on Android. A complete assessment covers whichever platforms you ship, because a flaw fixed on one does not guarantee the other is safe.