What Hackers See When They Decompile Your App and what's each industries secret

What Hackers See When They Decompile Your App

Most engineering teams have a rough intuition that a shipped app can be pulled apart, and that reverse engineering is possible in principle. Fewer have sat with what that actually returns. How much is recovered, how quickly, and how readable it is once it lands on screen.

It is worth being precise about, because the gap between the intuition and the reality is where most mobile app security decisions go wrong. Teams protect what they imagine is exposed rather than what is exposed.

Compilation is not encryption. It is a format change, and every format change is reversible by someone willing to write the reverse.

What Decompilation Actually Recovers

The honest answer depends on your platform, and the differences matter more than most summaries admit.

Android

Close to your source, in minutes. An APK contains DEX bytecode, which retains a great deal of structure: class names, method names, control flow. Decompiled output is not identical to what your developers wrote, but it is comfortably readable by anyone who codes. The manifest, resources, layouts and string tables come back essentially intact. This is not an advanced attack; it is a routine, well-documented first step.

iOS

Harder, but not opaque. Apps ship as compiled machine code and App Store binaries carry FairPlay encryption, so static analysis takes an extra step. What survives is still substantial: class and method names in metadata, string constants, embedded configuration, and framework calls. Researchers consistently find iOS apps more likely to leak secrets than Android ones. The extra difficulty changes the effort, not the outcome.

Cross-platform

Often the most exposed of all. React Native and similar frameworks ship JavaScript bundles that are, in practical terms, your source code. Flutter compiles further but still carries recoverable structure. Teams choosing these frameworks for delivery speed frequently do not realise they have also changed their exposure profile.

The Seven Things Sitting in Your Binary Right Now

Set aside the mechanics and look at the output. Across the apps we assess, the same seven categories come back again and again.

1

Your complete API surface. Endpoints, parameter names, header structures, authentication flows and versioning. Often including staging and internal endpoints that were never meant to ship, still reachable because nobody removed them from the client.

2

Secrets. API keys, tokens, cloud credentials, encryption keys. This remains the single most common finding in mobile assessment, year after year, in organisations of every size.

3

Business logic. Transaction limits, fee calculations, eligibility rules, scoring thresholds, promotional logic. The accumulated product design of your company, written out in readable form.

4

Your security checks, and therefore how to remove them. Root and jailbreak detection, certificate pinning, integrity verification. A method named isDeviceRooted is not just a control; it is a signpost pointing at the control.

5

Your architecture and roadmap. Third-party SDKs and their versions, backend structure, and feature flags for functionality you have not launched yet. Competitors read binaries too.

6

Development residue. Debug logging, test account identifiers, internal comments, TODO notes, staging URLs, developer names. Individually trivial. Collectively, a briefing document.

7

Everything needed to convincingly impersonate you. Package structure, signing metadata, resources, assets and strings: the raw material for a repackaged clone that looks exactly like the real thing.

How Common Is This, Really?

Common enough that the research reads as a description of normal practice rather than of negligence.

815K+hardcoded secrets found across 156,000 iOS apps in one large-scale study
72%of analysed Android AI apps contained at least one hardcoded secret
78Kapps found exposing cloud storage buckets through embedded credentials

Sources: Cybernews large-scale mobile app research (2025, 2026); peer-reviewed analysis presented at ACM CCS 2025.

Two findings from that body of work are worth dwelling on. The first is that iOS apps leak more often than Android apps, despite the platform being harder to analyse. Difficulty is not a control. The second is subtler, and it is the one that surprises teams most.

Removing a secret from your code is not the same as revoking it. Researchers repeatedly find credentials stripped from a current release that still work, because the old version is still downloadable and nobody rotated the key.

Academic analysis of leaked mobile credentials found hundreds of live, functional secrets in the wild, including source-control credentials granting access to thousands of private repositories. Not historical artefacts. Working keys.

The Part Mobile App Security Teams Underestimate

The exposure of secrets gets the attention because it is concrete and quantifiable. The more consequential exposure is category four on that list: your defences are as readable as everything else.

When an attacker decompiles your app, they are not only looking for what you left behind. They are reading what you built on purpose. The root detection, the pinning logic, the integrity check: all of it gets mapped, because a control you can locate is a control you can bypass. Client-side security written in plain, well-named code is a set of instructions for its own removal.

This is the reasoning behind reverse engineering protection as a discipline, and it is more specific than “make the code hard to read”. The goal is to break the attacker’s ability to locate a particular routine among everything else, so that removing your jailbreak check stops being a search and becomes an excavation.

It is also why obfuscation alone has never been sufficient, and is becoming less so. Obfuscation raises the cost of analysis; it does not detect the analysis happening. As AI-assisted tooling compresses the reading step, the layer that holds is the one that responds at runtime rather than the one that hides at rest.

What Reverse Engineering Exposes, by Industry

The seven categories are universal. What differs is which one hurts most, and that depends entirely on what your app is for. Mobile app security is not a single risk profile; it is five quite different ones.

Mobile app hardening for banking apps protecting authentication and transaction logic from reverse engineering

Banking

Most exposed: authentication flows and transaction logic. A decompiled banking app reveals how login, device binding and step-up authentication are constructed, along with transfer limits and the checks that enforce them. The output doubles as the raw material for a repackaged clone carrying your brand. Regulators have priced this in. Mobile app hardening is now an explicit control expectation under frameworks including BNM’s RMiT and the BSP circulars. See how SecIron protects banking and financial services apps.

Mobile app security for fintech and e-wallet apps shielding proprietary scoring and payment logic

Financial services & fintech

Most exposed: proprietary logic. E-wallets, trading, lending and payment apps carry the parts of the business that are genuinely differentiated: scoring models, routing rules, fee structures, execution logic. Reverse engineering here is as much a competitive-intelligence problem as a security one, and the party reading your binary may not be a criminal at all. More on our work across fintech, payments and financial services.

Government mobile app security protecting digital ID and eKYC apps from cloned and repackaged versions

Government & public sector

Most exposed: identity and trust. Digital ID, eKYC, tax, benefits and licensing apps hold verification logic and citizen data, and they carry an institutional name that no one questions. A convincing fake of a government app is one of the most effective phishing instruments available, and unlike a bank, a public agency cannot reimburse a citizen’s losses. More on securing public sector and government apps.

E-commerce mobile app hardening preventing abuse of voucher, loyalty and dynamic pricing logic

E-commerce & retail

Most exposed: promotional and pricing logic. Voucher validation, loyalty accrual, referral bonuses, dynamic pricing and cart rules are frequently enforced client-side for speed. Once read, they are automated, and abuse at scale rarely triggers a fraud alert, because every individual transaction looks legitimate. Losses accumulate quietly in the margin line. More on protecting retail and e-commerce apps.

Insurance mobile app security protecting underwriting rules and claims validation logic from reverse engineering

Insurance

Most exposed: underwriting and claims rules. Quote engines, risk banding, eligibility criteria and claim validation logic embedded in an app describe how the business prices risk. Read by a competitor, it is a pricing model. Read by a fraudster, it is a specification for which claims will pass automated assessment.

Different consequences, one shared cause: logic that was written for a trusted environment and then shipped into an untrusted one.

From Assumption to Control

The background. Mobile development inherited its habits from server development, where the runtime belongs to you. Code sat on machines you controlled, so a value in a config file was private and a check in the request path was final. Those assumptions were correct, and they quietly travelled onto a platform where none of them hold.

The problem. On mobile, the runtime belongs to the user, and sometimes to an attacker. Everything above follows from that single fact: secrets in the binary are public, client-side checks are advisory, and your defences are as readable as the logic they defend. Good engineering practice narrows this, but cannot close it. You can move every secret into platform key storage and re-validate every rule server-side, and your app is still a readable artefact that can be modified and re-signed. Reverse engineering is not a bug in your code for you to fix; it is a property of shipping software to a device you do not own.

Treat the app as a hostile client. Not compromised. Hostile. Assume every value in it is readable and every check in it is optional.

The solution. Practice narrows the gap; protection closes it. The five habits below are the practice half, and they cost nothing but discipline.

1

No secret should exist in the binary. Use platform key storage such as Android Keystore or iOS Secure Enclave, or fetch credentials at runtime against an authenticated session. If a key must ship, assume it is public and scope it as though it were.

2

Rotate, don’t just delete. When you remove a credential, revoke it the same day. Old versions of your app do not disappear when you publish a new one.

3

Every client-side check needs a server-side counterpart. Device checks are valuable signals, not decisions. If removing a check on the device changes what the server allows, the security lived in the wrong place.

4

Decompile your own app before release. The attacker’s first step costs you nothing to run yourself, and it is the only way to see what you actually shipped rather than what you think you wrote.

5

Protect the binary, not just the code. This is the half discipline cannot deliver.

That last point is where mobile app hardening stops being a category and starts being a specific set of jobs. There are four, and each does something the others cannot:

1

Obfuscation raises the cost of reading. It buys time, and against AI-assisted analysis it buys less than it used to, but it still meaningfully slows the search for a specific routine.

2

Code and data encryption removes the plaintext. Strings, logic and embedded resources stop being legible to static analysis at all, rather than merely being harder to name.

3

Integrity verification makes modification self-defeating. Reading a binary is one thing; a repackaged, re-signed copy that refuses to run is a dead end.

4

RASP, or runtime application self-protection, is the layer that does not depend on secrecy. It detects what is happening to the app while it runs: hooking frameworks attaching, debuggers connecting, rooted or jailbroken operating systems, emulated environments. It works whether or not the attacker already understands your code, and it works offline.

The distinction matters when you evaluate options. Obfuscation and encryption defend the binary at rest, which is the part AI-assisted reverse engineering is steadily eroding. RASP defends the app in motion, and its value is unaffected by how well the attacker has read your code, because a hook is a hook whether or not the person attaching it understands what they are hooking.

Obfuscation asks the attacker to work harder. Runtime protection stops assuming they will fail.

Where SecIron Fits

Our position on this is straightforward: you should see your app the way an attacker sees it, before they do. That is the logic behind how our two products divide the work: assessment first, mobile app hardening second.

Run the attacker’s first step yourself

IronScan performs static and dynamic assessment against OWASP, CVE and CWE, surfacing exactly the categories described above: embedded secrets, exposed endpoints, insecure storage, over-broad permissions and weak integrity checks, each with remediation guidance attached. It runs inside CI/CD, so the check happens every build rather than every audit.

Explore IronScan →

Make reading it worth nothing

IronWall applies layered code protection and obfuscation, three-layer encryption, anti-tampering and anti-repackaging, and RASP that continues to work offline, so a binary that is read still cannot be modified and run. Root, jailbreak, emulator, hooking, injection and debugger attachment are detected on the device, at the moment they occur.

It applies to the compiled binary in your build process, with no SDK to integrate and no source code changes. Explore IronWall →

For the wider picture of how these layers fit together, see What Is Mobile App Hardening? A Complete Guide for Security Teams.

Conclusion

The uncomfortable truth about a decompiled app is not that it reveals a mistake. It is that it reveals the ordinary, competent work of a development team, architecture, logic and defences alike, to anyone who cares to look.

That is not a reason to build differently on mobile. It is a reason to build with the assumption already priced in, using practice where practice reaches and mobile app hardening where it does not: nothing on the device is secret, nothing on the device is trusted, and the app itself has to be able to tell when something is wrong. Teams that start from that assumption ship faster, because they stop relying on protections that were never going to hold.

Ready to launch a secure app?

Send us your app and we will show you what comes back when it is pulled apart: the findings, the exposure, and what hardening changes. No changes to your codebase required to find out.

Contact us

Recent Posts

What Hackers See When They Decompile Your App and what's each industries secret
Mobile App Hardening vs RASP vs App Shielding Where Does It Stop? Blog
What is Mobile app hardening A Complete Guide for Security Teams Blog