Application security feature

Mobile app memory protection

Otukan shortens how long tokens, keys and decrypted data sit in app memory and detects tools that read it, so a running app gives away as little as possible.

  • Android
  • iOS
  • Flutter
  • React Native
Secrets read from RAM is met at the value lifetime boundary before it reaches the appSecrets read from RAMValue lifetimeYour app
  • Shorter exposure windows

    Sensitive values exist in readable form only for the moment the app uses them, then they are overwritten.

  • Sealed while idle

    Between uses, protected values are held encrypted in memory, so a copy of process memory yields ciphertext.

  • Readers are noticed

    Debuggers, instrumentation and memory-scanning tools that try to read the process raise a signal your backend receives.

Memory exposures Otukan reduces

Pick an exposure to see how Otukan limits it, how the app reacts and what your team receives.

Session and refresh tokens

  1. Detect

    Otukan keeps tokens sealed in memory and opens them only while a request is being built.

  2. Respond

    A read attempt during a session triggers the response you set for that flow.

  3. Report

    A memory-access signal travels with the next request so your server can revoke the session.

Decrypted keys

  1. Detect

    Key material is unwrapped just before a cryptographic operation and wiped straight after it.

  2. Respond

    Signing or decryption is refused if a reader is attached.

  3. Report

    Your security team sees which operation was protected and why it stopped.

Personal and payment data

  1. Detect

    Otukan limits the lifetime of decrypted records and clears the buffers that held them.

  2. Respond

    Screens holding marked data can close when the app leaves the foreground.

  3. Report

    Signals are recorded so fraud and privacy teams see attempted access.

Memory scanning tools

  1. Detect

    Otukan detects debuggers, instrumentation toolkits and memory scanners attached to the process.

  2. Respond

    The flow in progress follows the reaction you chose, from a quiet record to closing the app.

  3. Report

    A runtime signal reaches your backend with the affected request.

Controls around memory protection

Memory protection guards data while it is in use; neighbouring controls guard the code and the data at rest.

  • Anti-debugging

    Detects a debugger that pauses the app to read values at the moment they are decrypted.

  • Hooking detection

    Finds instrumentation that intercepts functions to capture the values passed through them.

  • Secrets protection

    Protects keys and tokens shipped with the app before they ever reach memory.

  • Memory editing detection

    Addresses tools that change values in memory, such as game scores and balances, rather than 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 it works

  1. Inventory the values

    We list every sensitive value your app handles and where each one first appears in memory.

  2. Set lifetimes

    For each value, you decide how long it may stay readable and what ends its life.

  3. Add memory controls

    Memory controls join your current pipeline; you keep custody of signing keys.

  4. Test with readers

    We dump and scan the protected app in an authorised lab to measure what remains.

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.

The runtime values that need protection are the ones that would let someone act as your user or read their data: session and refresh tokens, decrypted keys, one-time codes, card and account numbers, and personal records the app has just decrypted. They need protecting for exactly as long as they are readable, which should be the moment of use and no longer. Otukan keeps these values sealed in memory between uses, wipes them after use and detects debuggers, instrumentation and memory scanners trying to read the process. No app can use a value without it existing in memory, so the aim is a short, watched window, measured on your own app.

How memory safeguards fit a wider data-protection programme is covered on memory data protection.

Memory exposure

Different values appear in memory for different reasons and linger for different lengths of time. The first task is to map them.

ValueWhere it appearsHow long it typically lingers without protectionTarget lifetime with Otukan
Session and refresh tokensAfter sign-in, then with each requestFor the whole session, often longerReadable only while a request is built
Encryption and signing keysAfter being loaded from secure storageUntil the app is closedReadable only during the operation
One-time codes and PINsWhile the user types and the app submitsUntil memory is reusedCleared once submitted
Card, account and identity dataAfter decryption for display or submissionAcross screens and in the backgroundCleared when the screen closes
API secrets shipped with the appFrom launchFor the app’s lifetimeUnwrapped on demand; see secrets protection

Platform differences

Android apps mix Java or Kotlin, which manage memory for you, with native libraries, which do not. iOS apps mix Swift and Objective-C with system frameworks that keep their own copies. iOS app memory protection covers that side in detail. Flutter and React Native add a further runtime on top. Otukan writes its controls for each platform and measures each framework separately.

Control boundary

Memory protection is often confused with code protection. They guard different things, and a buyer should know which is which.

QuestionControlWhat it protects
Is the running code the code we shipped?Anti-tampering and hooking detectionIntegrity of instructions
Can someone change values the app relies on?Memory editing detectionIntegrity of data in use
How long is sensitive data readable?Memory protectionConfidentiality of data in use
Is stored data readable from disk?Data encryptionConfidentiality of data at rest

An intact app can still leave a token in memory for hours. A tampered app can still hold its secrets for only a moment. Otukan treats the two as separate controls with shared signals, so a hooking detection can also end the life of every sealed value in the session.

Validation

Memory protection must be proven on the app and platforms you ship, because runtimes behave differently from one release to the next.

What we agree before testing

Your team and ours list each value, the flow that handles it, the lifetime you chose and the reader tools to use in the lab. That list becomes the test plan, and its results become the record your auditors and risk team can read. When a new release adds a sensitive value, it joins the list before the release ships.

Positive test

In an authorised lab, we attach a debugger and a memory scanner to the protected app during the flow that handles each value, and confirm two things: the signal fires, and a process dump taken between uses holds no readable copy of the value.

Negative control

The same journey runs on a clean device with no reader attached, to confirm nothing fires and the flow completes normally.

Regression

Install, update, sign-in and the sensitive flow are repeated after each protected release, with versions, devices, results and the reviewer recorded.

Residual exposure

Some copies are outside any app’s control: values passed to system components, framework caches, and strings in managed languages that cannot be overwritten. We measure and document what remains for your app, so your risk team works from evidence rather than assumptions. The wider picture is on mobile app security. For a structured way to evaluate options, see the memory protection solution guide.

Common questions

  • Can any app keep secrets out of memory entirely?

    No app can use a value without it existing in memory at some point. What changes the risk is how long it stays readable and whether anyone can reach it. Otukan keeps protected values sealed between uses, clears them after use and watches for tools trying to read the process, so the window is short and watched.

  • Why is this harder in Java, Kotlin, Swift, Dart or JavaScript?

    Managed languages copy and move values on their own, and some string types cannot be overwritten once created. Otukan handles protected values in buffers it can clear and keeps them out of immutable types where the platform allows. For values that pass through framework code, we measure what remains in memory and record it as residual exposure.

  • Is memory protection the same as anti-tampering?

    They answer different questions. Anti-tampering asks whether the code running is the code you shipped. Memory protection asks how long sensitive data is readable while that code runs. A perfectly intact app can still leave a token in memory for hours, which is why the two work together.

  • Does wiping values affect performance?

    Protection is applied to the values you mark, not to all of memory, so the work happens only around sensitive operations. We measure launch and responsiveness with your team on the oldest devices you support before release, so you see the effect on your own app.

On the mobile engineering team?

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

Give memory scrapers nothing to read

Tell us the platform, the framework and the values you worry about most in memory, such as session tokens, card data or wallet keys. Binaries, keys and production credentials stay with you; we never request them.

Or request a technical demo