Application security feature

Mobile app reverse engineering protection

Otukan raises the effort needed to analyse your app's valuable logic, layering obfuscation, hardening and runtime checks against decompilers and live probing.

  • Android
  • iOS
  • Flutter
  • React Native
Decompiled app logic is met at the layered hardening boundary before it reaches the appDecompiled app logicLayered hardeningYour app
  • One layer per path

    Decompilers, disassemblers and live inspection each meet a layer built for them, instead of a single setting stretched across all three.

  • Value comes first

    Protection concentrates on the code worth stealing, such as licence checks, risk rules and proprietary algorithms, while the rest of the app gets settings matched to its value.

  • Secrets belong server-side

    Otukan makes client-side logic slow and costly to study, and helps you move what must stay secret to your backend.

Analysis techniques Otukan resists

Pick a technique to see how Otukan answers it, what changes for the analyst and what your team gets back.

Decompilation

  1. Detect

    Analysis happens off the device, so Otukan answers inside the package: renamed identifiers, protected strings and reshaped control flow.

  2. Respond

    Decompiled output stops reading like your source and takes far longer to reconstruct.

  3. Report

    The release record lists which classes and modules were protected.

Native disassembly

  1. Detect

    Compiled libraries are hardened so symbols, strings and call structure give away less to a disassembler.

  2. Respond

    Routines such as encryption and licence logic become harder to locate and follow.

  3. Report

    Protected libraries are listed per release for your security review.

Framework bundles

  1. Detect

    Otukan protects the React Native JavaScript bundle or Hermes bytecode, and the compiled Dart code in Flutter apps.

  2. Respond

    Business logic in the framework layer no longer sits in plain view inside the package.

  3. Report

    Your team sees which framework assets were covered in each build.

Live inspection

  1. Detect

    Runtime checks detect debuggers, hooking frameworks and injected code watching the app as it runs.

  2. Respond

    Protected flows stop or are restricted, per the policy you set.

  3. Report

    An inspection signal reaches your backend with the request it concerns.

Memory reading

  1. Detect

    Otukan detects the conditions that let another process read app memory, such as root, jailbreak and attached tools.

  2. Respond

    Sensitive steps can refuse to load protected values on that device.

  3. Report

    Device-integrity context travels to your server for its decision.

Layers that make up reverse engineering protection

Static layers slow down reading the package; runtime layers slow down watching it run.

  • Code obfuscation

    Renames, restructures and hides strings in managed code, so decompiled output loses the meaning your source carries.

  • Asset and resource encryption

    Keeps bundled configuration, scripts and data files unreadable to anyone who unpacks the app.

  • Binary protection

    Hardens compiled libraries and executables against disassembly and static patching.

  • Anti-debugging

    Detects a debugger stepping through the store build and applies your response for the flow.

  • Hooking detection

    Spots instrumentation that rewrites functions in memory to reveal how the app makes decisions.

  • Memory protection

    Limits how long sensitive values stay readable in memory and detects attempts to read them.

You choose the response

Set a response for each user flow. Start by observing, then tighten flow by flow as the signals prove themselves.

Observe

Signal sent to your backend

Rolling out a new policy and measuring real-world signals.

Warn

This device looks modified. Continue with care.

Conditions some genuine users create, such as developer settings.

Restrict

Payments are unavailable on this device.

Payments, stored data and account changes.

Terminate

Session closed for your security.

Clear tampering on a high-risk flow.

How Otukan hardens your logic

  1. Rank the logic

    Agree with your engineers which modules would hurt most if copied or understood.

  2. Choose the layers

    Match static and runtime layers to each module and each platform.

  3. Harden the release

    Protection runs as a stage in your current release pipeline, with signing kept in your hands.

  4. Compare in a lab

    Analyse unprotected and protected builds side by side in an authorised lab.

  5. Repeat per release

    Every release is protected and recorded, so new code does not ship in the clear.

Free for app publishers

Check your app's exposure

A passive review of your published app by an Otukan engineer. No files, no access to your systems. Findings go by email to the verified publisher.

You finish the request on the next page.

Otukan raises the effort needed to understand your app by answering each analysis technique with its own layer. Against decompilers, it obfuscates managed code and protects strings and framework bundles. Against disassemblers, it hardens native libraries. Against live inspection, runtime checks detect debuggers, hooking and memory reading, then apply the response you set and tell your backend. The aim is cost, not magic: logic that ships to a device can be studied with enough time, so Otukan makes that time long and visible, and helps you keep the true secrets on your server. Android and iOS each get layers designed for their own formats.

Attack paths

Reverse engineering is three different activities, and a protection plan should treat them separately.

PathWhat the analyst doesWhat they learnOtukan layer
DecompilationTurns managed code or framework bundles back into readable sourceClass structure, business rules, endpoints, embedded keysObfuscation, string protection, bundle protection
DisassemblyReads compiled native code as machine instructionsEncryption routines, licence checks, native security logicBinary hardening and symbol reduction
Runtime inspectionWatches the app run with a debugger, hooks or memory readsValues after decryption, decisions as they are madeAnti-debugging, hooking detection, memory protection

Android

Android packages carry managed bytecode that decompiles back to something close to source, plus native libraries. R8 shrinks and renames code at build time; Otukan goes further with control-flow changes, string protection and native hardening.

iOS

iOS apps ship as compiled machine code, so the main static path is disassembly of the executable and its frameworks. Otukan’s iOS layers target symbols, strings and Swift and Objective-C metadata that give an analyst a map.

Cross-platform frameworks

React Native apps carry a JavaScript bundle or Hermes bytecode; Flutter apps carry compiled Dart code. Both hold real business logic, and Otukan protects them on top of the platform layers. .NET MAUI release builds, with their managed assemblies, are covered on .NET MAUI app security.

Layered resistance

No single layer does the job. Each one covers a gap the others leave.

Hardening the package

Asset encryption and binary protection make the unpacked app less useful. Configuration files, scripts and native libraries stop revealing their purpose at a glance, and static patching gets harder.

Obfuscation

Renaming, control-flow changes and string protection strip meaning from decompiled output. Otukan concentrates the strongest settings on the modules you ranked highest and matches the rest of the app to its value. Details are on mobile code obfuscation.

Instrumentation controls

Static layers slow down reading; they do not stop someone watching the app run. Runtime checks detect debuggers, hooking frameworks and injected code, and the app responds per flow. The signal goes to your backend, where an analyst on the device cannot change the outcome. Runtime detail is covered on mobile RASP.

Measuring resistance

Protection is only useful if you can see its effect. Otukan and your engineers analyse an unprotected build and a protected build side by side in an authorised lab, using the same classes of technique an outside analyst would use. For each module you ranked, the record notes what could be read, located or changed in each build, and which runtime signals fired during the attempt. That comparison is repeated when the app changes significantly, so the protection plan follows the code rather than lagging behind it. It also gives your security review a concrete artefact instead of a vendor statement.

Limits of client-side protection

Everything that ships inside an app runs on hardware the attacker may own. Given unlimited time, a determined team can recover client-side logic and any secret embedded with it. Honest protection starts from that fact.

  • Move true secrets server-side. Keys that let someone impersonate your app belong on the backend, issued per session.
  • Treat the client as evidence, not authority. Your server decides; the app supplies signals.
  • Make analysis slow and noisy. Layered protection turns quiet reading into a long effort that trips runtime checks along the way.
  • Protect every release. Protection is applied to each build in your pipeline, so new code ships with the same layers as the last release.

Reverse engineering protection is one part of what mobile app security covers. If your app is already in a store, you can request a free App Exposure Check of the public release. For a structured way to evaluate options, see the anti reverse engineering solution guide.

Common questions

  • Can any protection make an app impossible to reverse engineer?

    No client-side protection can promise that, because the app has to run on a device someone else controls. What Otukan changes is the cost. Obfuscation, hardening and runtime checks turn quick reading into a long, noisy project, and runtime signals tell your backend when someone is trying. Secrets that must never leak belong on your server.

  • Where should API keys and signing secrets live?

    Anything whose disclosure would let an attacker act as your app belongs on the server, issued per session or per user. Where a value has to ship in the app, Otukan protects it with string and asset protection and checks the runtime before it is used, so extracting it takes far more effort.

  • Will protection change how our app behaves or reports crashes?

    Protection is set up with a keep list for code that relies on reflection, serialisation or third-party libraries, and every protected build goes through your usual tests. Crash reports stay readable with the mapping files your team keeps from each release.

  • How do we know the protection works on our app?

    We analyse an unprotected and a protected build side by side in an authorised lab, using the same techniques an analyst would, and record what each one reveals. You see the difference on your own code rather than on a sample app.

On the mobile engineering team?

How protection fits your build, signing and release, platform by platform.

Make your app expensive to study

Tell us the platform, the framework and the logic you most want to keep out of a competitor's or attacker's hands. We do not ask for binaries, source code, signing keys or production credentials.

Or request a technical demo