● Talk to a security engineer: +92 323 8295031info@protonyte.com  ·  PCSF batch enrolling now

Mobile app penetration testing for Android and iOS, on real devices

An app on a customer’s phone is running on hardware you do not control, in the hands of someone who may want to take it apart. Protonyte tests Android and iOS applications against the OWASP Mobile Application Security Verification Standard: what the app stores, what it sends, what it accepts back, and what it still does once the phone is rooted and the pinning is gone.

keystore what is lefton the device

ENGAGEMENT SCOPEtypical 1 - 2 week test

Android APK / AABIN SCOPE
iOS IPAIN SCOPE
Local storage and keychainIN SCOPE
Transport and certificate pinningIN SCOPE
The backend API the app talks toIN SCOPE
Source-code reviewOPTIONAL
// the basics

Why a mobile test is not a web test

Most of what a mobile application is worth attacking for sits in two places: on the device, and in the API behind it. The screens in between are only a way of reaching them.

So the test runs on both sides at once. Statically, we take the package apart and read what shipped inside it - keys, endpoints, debug flags, third-party SDKs. Dynamically, we run it on a rooted Android device and a jailbroken iPhone, defeat the certificate pinning, and watch every request it makes. An app that trusts the phone it is running on is an app that trusts an attacker.

  • 01Both platforms, really testedAndroid and iOS builds on physical devices, not just an emulator that behaves differently.
  • 02Static and dynamicThe package is read apart and the running app is watched; neither on its own is a test.
  • 03The API countsNearly every serious mobile finding we report is on the server, reached through the app.
  • 04Mapped to MASVSFindings are tied to the OWASP standard your auditor or enterprise customer already knows.
// coverage

What we go after

The structure follows the OWASP Mobile Application Security Verification Standard and its testing guide, across both platforms.

// on the device

Local storage

What is left behind on a phone that is lost, sold or seized.

  • Tokens and credentials in preferences or plists
  • Keychain and Keystore use and protection class
  • Databases, caches and logs
  • Screenshots and clipboard leakage
// in the package

What shipped inside the build

A release build is a file anybody can download and open.

  • Hard-coded API keys and secrets
  • Debug flags and test endpoints left on
  • Obfuscation and anti-tamper, where claimed
  • Third-party SDKs and their permissions
// on the wire

Transport and pinning

Everything between the app and your server.

  • TLS configuration and version
  • Certificate pinning, and how hard it is to remove
  • Traffic captured after pinning is bypassed
  • Data sent to third parties
// who is asking

Authentication and session

How the app proves who the user is, and for how long.

  • Token lifetime, refresh and revocation
  • Biometric and PIN unlock bypass
  • Multi-factor handling
  • Account recovery from the app
// the platform

Platform misuse

The parts of Android and iOS an app can hand away by accident.

  • Exported activities, services and providers
  • Deep links and custom URL schemes
  • WebView configuration and JavaScript bridges
  • Backup and debuggable flags
// behind it

The backend API

Tested as its own surface, because that is where the data is.

  • Object-level authorisation between accounts
  • Rate limits and enumeration
  • Client-side checks not repeated on the server
  • Versioned and forgotten endpoints
// methodology

How the work runs

  1. 1

    Scope and build

    We agree the platforms, the build to test and the accounts, and ask for a build that is as close to release as possible.

    • Android and / or iOS
    • Test accounts, including a second one
    • Devices and OS versions
    • Authorisation in writing
  2. 2

    Take it apart

    The package is unpacked and read before it is ever run.

    • Decompile and review
    • Secrets, endpoints and SDKs
    • Permissions and exported components
    • Hardening claims checked against reality
  3. 3

    Run it under watch

    On a rooted device and a jailbroken phone, with the traffic in front of us.

    • Pinning bypass and instrumentation
    • Full request and response capture
    • Storage inspected after real use
    • Runtime tampering and hooking
  4. 4

    Attack the API

    The server is tested as its own target, using the app only to learn how to talk to it.

    • Authorisation between two real accounts
    • Parameter and object tampering
    • Business logic through the API
    • Checks the app does that the server does not
  5. 5

    Report and retest

    One report covering device and server, then a free retest.

    • Findings mapped to MASVS
    • Evidence per finding, on both platforms
    • Fix guidance for your stack
    • Retest and closure summary
// the deliverable

What you are left holding

Two documents and a conversation. Written so the person who signs the invoice and the person who writes the fix can both use them.

  • Executive summary in plain language, with the business risk first
  • Technical findings with the evidence that proves each one
  • CVSS score and a risk rating that reflects your business, not a template
  • Remediation written for the stack you actually run
  • A free retest, and a closure summary you can hand to a customer
  • A debrief call with the tester who did the work, not an account manager
Ask for a sample report
// the standards

Measured against something

The work follows OWASP MASVS, OWASP MASTG, OWASP Mobile Top 10 and NIST SP 800-115, so the coverage can be checked rather than taken on trust, and the report maps to what your auditor or your enterprise customer already recognises.

This page is one part of our penetration testing service. Where a finding needs a different kind of engagement to answer properly, we say so in the report rather than selling you the test we happen to be running.

// faq

Common questions

Do you need the source code?

No. We test the compiled app the way an attacker gets it, from the store or from a build you send us. If you do give us the source we will use it, and the test goes deeper for the same money, but it is never a requirement.

Do you test on an emulator or a real phone?

Real devices, rooted Android and jailbroken iOS, plus an emulator where it is useful. Several protections behave differently on real hardware, and a test that only ran in an emulator will miss them.

Our app has certificate pinning. Does that stop you?

It stops a casual attacker, which is exactly why it is worth having. It does not stop a test: pinning is removed at runtime so we can see the traffic, and part of the report is how much effort that took and how to make it take more.

Is the backend included?

The API the app talks to is in scope by default, because that is where most serious mobile findings actually live. A separate web portal on the same backend is a separate test; we will say so during scoping rather than after.

Will testing affect our live users?

No. We test with accounts you create for us, against whichever environment you choose, and we do not run destructive techniques. If the only environment is production we agree a window and the rules first.

// start here

Let's protect your business together.

Tell us what you need tested. Our team will reply with a clear scope and quote.

By submitting, you agree to our Terms of Use and Privacy Statement.