Skip to content
AIQGM

What we look at first when we unpack a mobile build

Before any dynamic testing, the shipped binary tells you a lot. These are the first commands we run and what they tend to turn up.

Anything inside the app you ship to the store is public. Anyone can download it and take it apart, so we start where they would:

review — sample-app 2.3.1
The first ten minutes of a mobile review. Illustrative output from a sample app with planted issues; no device or special access needed.
Androidbash
apktool d app-release.apk -o out

# Components other apps can launch without a permission
grep -n 'exported="true"' out/AndroidManifest.xml

# Backups, cleartext HTTP, debug builds shipped by mistake
grep -nE 'allowBackup|usesCleartextTraffic|debuggable' out/AndroidManifest.xml

# Keys and credentials compiled into the app
grep -rEn 'sk_live_|AKIA[0-9A-Z]{16}|-----BEGIN' out/
iOS (decrypted IPA)bash
# Exceptions to App Transport Security (plain HTTP allowed?)
plutil -p Payload/App.app/Info.plist | grep -A6 NSAppTransportSecurity

# Strings in the binary that look like secrets
strings Payload/App.app/App | grep -Ei 'secret|private_key|bearer'
  • Exported activities or receivers that open an internal screen with no login check.
  • allowBackup left on, so app data can be pulled over adb from an unlocked phone.
  • Server-side API keys compiled in. Some keys are meant to be public (a restricted Maps key); a payment secret never is.
  • Tokens written to logs, which end up in crash reports.

None of this needs a jailbroken device or special access. It's the ten minutes an attacker spends before deciding whether your app is worth more time.

This comes from our security review & hardening work.

Tell us what you're working on.

A few paragraphs is plenty. We'll read it, reply by email, and if it looks like a fit, set up a 30-minute Google Meet with an engineer.