Mobile app vulnerability report and checklist

Every app store release hands attackers a copy of your app

Once it’s out there, they can take it apart, modify it and run it on a compromised device.

Our example report shows where published apps are exposed before Ditto Protect is deployed, and the protection they enjoy after. Our checklist helps you assess where your app stands today.

Security assessment score panels
What poor app protection gives away

What ships with your app,
ships to attackers

They don't need to breach anything to start. What they find inside the package decides how much effort an attack takes. 

phone-check 2

They map your estate

Backend hosts, storage buckets and service names sit in plain view, including ones your team thought were private.

fingerprint 1

They find your keys

Embedded credentials let them call your APIs as if they were your app. Permissive certificate handling lets them read and replay traffic on a shared network.

security-model 1

They read what’s left behind

Session caches and temp files stay on the device. A lost or rooted handset becomes a data incident.

 Every endpoint, key and class name left readable gives an attacker a head start.

  • warning

    Leave the package unprotected and it describes your estate to anyone who asks.

  • warning

    Protect one release without building protection into your pipeline, and the next release reopens the gap.

Rely on a lab test alone, and you get a two-week snapshot that lists findings without showing how they were found. Gaps pass sign-off, then resurface in a later release.
ditto-protect

Switch protection on.
See what an attacker loses.

Choose from the example apps in different industries below. We assessed each one twice: as released, and with Ditto Protect. See the results and then get the detailed report.

Step 1Choose your industry

Northwind Banking*

Android · v4.2.0

Everyday current accounts, card controls and payments for four million retail customers.

Retail banking · illustrative example

Step 2Compare an unprotected build with the Ditto Protect results
Security score
41→88
CriticalHighModerateLow
Sits in the High bandHigh band → Low band
Attack hits remaining
40,2007
from 40,200 in the unprotected build
21 detection categories currently firing18 of 21 detection categories fully eliminated
Readable class names
7,900→1,550
named classes readable in the package
Every class name is readable in the shipped package80% of class names removed or renamed by obfuscation
Top five findings in the unprotected buildTop five findings with Ditto Protect applied · 3 fully eliminated
Financial and payment
Critical

Payment flows exposed without adequate transport security

Transport-layer weaknesses in checkout and transfer flows let an attacker on the same network read payment data in transit.

395→0hits
Fully eliminated
Network and TLS configuration
Critical

TLS configuration allows interception of banking traffic

Permissive certificate handling makes man-in-the-middle interception realistic on any untrusted network.

290→0hits
Fully eliminated
Cloud and backend services
High

Backend service endpoints discoverable and under-protected

Internal API hosts and storage buckets were readable straight from the package, handing attackers a map of your estate.

29,900→0hits
Fully eliminated
Insecure data storage
High

Some local caches still hold recoverable session data

Cached session artefacts remain on rooted devices; runtime protection narrows the window but cannot remove the files.

1,010→46hits
95% reduced
Cryptography
Medium

Legacy crypto calls remain inside third-party libraries

Two bundled SDKs still call deprecated ciphers that cannot be rewritten without a vendor update.

880→122hits
86% reduced
Step 3Get the report

That's the summary. The detailed report goes further.

For each finding: what we found, why it matters to a retail bank, what's left after protection, and the six controls that keep it closed.

Get the report

Larkspur Pay*

Android · v3.1.4

Instant transfers, virtual cards and expense controls for small business teams.

Payments and fintech · illustrative example

Step 2Choose whether you’re unprotected or with Ditto Protect
Security score
44→85
CriticalHighModerateLow
Sits in the High bandHigh band → Low band
Attack hits remaining
27,80012
from 27,800 in the unprotected build
19 detection categories currently firing15 of 19 detection categories fully eliminated
Readable class names
6,400→1,280
named classes readable in the package
Every class name is readable in the shipped package80% of class names removed or renamed by obfuscation
Top five findings in the unprotected buildTop five findings with Ditto Protect applied · 3 fully eliminated
Hardcoded credentials and secrets
Critical

Gateway API keys shipped inside the app binary

Live payment-gateway keys sat in plain strings, letting anyone replay authenticated calls from outside your app.

148→0hits
Fully eliminated
Financial and payment
Critical

Card entry screens open to overlay attacks

Nothing stopped a malicious app from drawing over the card-entry flow to harvest details as they were typed.

512→0hits
Fully eliminated
Anti-tamper and integrity
High

App runs happily after being repackaged

Modified builds passed no integrity check, so cloned wallets could be distributed outside the official stores.

24,600→0hits
Fully eliminated
Insecure data storage
High

Transaction history cached longer than needed

Statement data persisted in local storage after sign-out; only a fraction survives once storage is hardened.

1,340→64hits
95% reduced
Third-party SDKs
Medium

Analytics SDK still reads device identifiers

A vendor SDK collects hardware identifiers under its own consent flow, outside the protected boundary.

640→98hits
85% reduced
Step 3Get the report

This is the summary. The detailed report goes further.

For each finding: what we found, why it matters to a payments business, what's left after protection, and the six controls that keep it closed.

Get the report

Ashgrove Insure*

Android · v2.8.2

Motor and home cover with photo-based claims assessment and instant quotes.

Insurance · illustrative example

Step 2Choose whether you’re unprotected or with Ditto Protect
Security score
47→86
CriticalHighModerateLow
Sits in the High bandHigh band → Low band
Attack hits remaining
20,6009
from 20,600 in the unprotected build
18 detection categories currently firing15 of 18 detection categories fully eliminated
Readable class names
5,200→1,120
named classes readable in the package
Every class name is readable in the shipped package78% of class names removed or renamed by obfuscation
Top five findings in the unprotected buildTop five findings with Ditto Protect applied · 3 fully eliminated
Insecure data storage
Critical

Claim documents left readable on the device

Uploaded photographs and claim PDFs were written to shared storage where any other app could read them.

268→0hits
Fully eliminated
Network and TLS configuration
High

Claims traffic sent over downgradeable connections

Fallback to cleartext was permitted, so an attacker could force claims submissions onto an unencrypted channel.

1,910→0hits
Fully eliminated
Cloud and backend services
High

Document storage buckets addressable from the app

Bucket names and region hints in the package allowed direct enumeration of stored claim evidence.

16,700→0hits
Fully eliminated
Personal data handling
Medium

Some diagnostic logs still capture policy numbers

Verbose logging in the offline quote module records policy references that reach your crash reporter.

780→110hits
86% reduced
Cryptography
Medium

Legacy key derivation in the offline quote module

An older derivation routine remains for backwards compatibility with quotes saved on previous versions.

410→88hits
79% reduced
Step 3Get the report

This is the summary. The detailed report goes further.

For each finding: what we found, why it matters to an insurer, what's left after protection, and the six controls that keep it closed.

Get the report

Vantage Play*

Android · v6.0.7

Live tables and tournaments with real-money balances and instant payouts.

Gaming and betting · illustrative example

Step 2Choose whether you’re unprotected or with Ditto Protect
Security score
38→81
CriticalHighModerateLow
Sits in the Critical bandCritical band → Low band
Attack hits remaining
38,90014
from 38,900 in the unprotected build
22 detection categories currently firing18 of 22 detection categories fully eliminated
Readable class names
9,600→1,820
named classes readable in the package
Every class name is readable in the shipped package81% of class names removed or renamed by obfuscation
Top five findings in the unprotected buildTop five findings with Ditto Protect applied · 3 fully eliminated
Anti-tamper and integrity
Critical

Game client can be modified without detection

Balance and odds logic could be patched in a repackaged build and still connect to your live tables.

640→0hits
Fully eliminated
Runtime hooking
Critical

Hooking frameworks attach to the running game

Common instrumentation tools attached at runtime, exposing every in-game call and wallet operation.

33,400→0hits
Fully eliminated
Hardcoded credentials and secrets
High

Server tokens embedded in the shipped build

Static service tokens in the binary allowed table state to be queried without an authenticated session.

96→0hits
Fully eliminated
Emulator and rooted devices
High

Play from emulators remains partly possible

Hardened checks block known emulators, but bespoke virtual devices can still reach the lobby.

2,100→180hits
91% reduced
Third-party SDKs
Medium

Ad SDK still fingerprints the device

The bundled ad network builds its own device signature outside the protected runtime.

520→96hits
82% reduced
Step 3Get the report

This is the summary. The detailed report goes further.

For each finding: what we found, why it matters to a gaming operator, what's left after protection, and the six controls that keep it closed.

Get the report

Meridian Stay*

Android · v5.4.1

Booking, mobile room keys and contactless check-in across 240 properties.

Travel and hospitality · illustrative example

Step 2Choose whether you’re unprotected or with Ditto Protect
Security score
45→84
CriticalHighModerateLow
Sits in the High bandHigh band → Low band
Attack hits remaining
18,4006
from 18,400 in the unprotected build
17 detection categories currently firing14 of 17 detection categories fully eliminated
Readable class names
4,800→990
named classes readable in the package
Every class name is readable in the shipped package79% of class names removed or renamed by obfuscation
Top five findings in the unprotected buildTop five findings with Ditto Protect applied · 3 fully eliminated
Hardcoded credentials and secrets
Critical

Door-key service credentials sat in the package

Credentials for the mobile key service were extractable, putting room access logic within reach of an attacker.

132→0hits
Fully eliminated
Network and TLS configuration
High

Booking traffic interceptable on shared wifi

Weak certificate validation made guest bookings readable on exactly the networks guests use most.

1,420→0hits
Fully eliminated
Cloud and backend services
High

Reservation APIs enumerable from the client

Endpoint patterns in the binary allowed reservation identifiers to be walked without authentication.

14,900→0hits
Fully eliminated
Insecure data storage
Medium

Guest profile cache persists after sign-out

Name and stay history remain in an encrypted local cache until the next launch clears it.

690→74hits
89% reduced
Personal data handling
Medium

Loyalty identifiers still appear in crash reports

Membership numbers are attached to diagnostic payloads handled by your third-party reporter.

320→60hits
81% reduced
Step 3Get the report

This is the summary. The detailed report goes further.

For each finding: what we found, why it matters to a hotel group, what's left after protection, and the six controls that keep it closed.

Get the report

Cardia Health*

Android · v1.9.6

Appointments, repeat prescriptions and remote cardiac monitoring for patients at home.

Healthcare · illustrative example

Step 2Choose whether you’re unprotected or with Ditto Protect
Security score
43→85
CriticalHighModerateLow
Sits in the High bandHigh band → Low band
Attack hits remaining
24,70011
from 24,700 in the unprotected build
20 detection categories currently firing16 of 20 detection categories fully eliminated
Readable class names
6,900→1,410
named classes readable in the package
Every class name is readable in the shipped package80% of class names removed or renamed by obfuscation
Top five findings in the unprotected buildTop five findings with Ditto Protect applied · 3 fully eliminated
Personal data handling
Critical

Patient records written to unprotected storage

Monitoring readings and prescription history were cached in cleartext on the device filesystem.

214→0hits
Fully eliminated
Cryptography
Critical

Health data encrypted with deprecated ciphers

Records at rest used algorithms considered broken, so encryption offered little practical protection.

1,060→0hits
Fully eliminated
Cloud and backend services
High

Clinical backend endpoints exposed in the binary

Hostnames for the clinical record service were readable, exposing internal infrastructure to probing.

21,300→0hits
Fully eliminated
Third-party SDKs
High

Monitoring SDK still transmits device metadata

The device vendor SDK reports hardware telemetry through its own channel, outside the protected boundary.

940→88hits
91% reduced
Insecure data storage
Medium

Appointment cache readable on rooted devices

A small appointment cache stays accessible where the device itself is already compromised.

400→70hits
83% reduced
Step 3Get the report

This is the summary. The detailed report goes further.

For each finding: what we found, why it matters to a healthcare provider, what's left after protection, and the six controls that keep it closed.

Get the report
Inside the report

Every gap we found, and what it takes to close them.

Know where you stand before an external test or regulator tells you. The report sets out the gaps we typically find in apps like yours, with a management summary and the detail engineers and auditors need. 

Visualisation of the report
  • news

    A summary in plain English

    The app's exposure score and attack surface before and after Ditto Protect, and what the change means for a business in your industry.

  • case-study

    Every finding in full

    Organised by exposure area: what we found, what's left once protection is applied and the fixes that need code or vendor changes.

  • document

    The controls to evidence each release

    Turn each finding into a check for your own app: a control checklist for every exposure area, with a sign-off record so the evidence is in hand before anyone asks for it. 

Request the example report

Get the detailed breakdown and checklist

Tell us where to send it.
The report arrives in your inbox within a few minutes.

JOPACC Headshot copy

Maha Bahou

CEO, JoPACC

"Ditto's cryptographically secured communication protocol protects our financial digital identity platform, ensuring trusted data exchange between data subjects and the platform while protecting sensitive information."