Application security feature

Memory data protection

How to evaluate memory data protection: which transient values and buffers are exposed, how long they live, and how Otukan guards them while your app runs.

  • Android
  • iOS
  • Flutter
  • React Native
Values read or edited is met at the process memory boundary before it reaches the appValues read or editedProcess memoryYour app
  • Reading and writing

    Memory risk has two sides: someone reads a value they should not see, or changes a value your app trusts. Otukan addresses both.

  • Lifetime by design

    Each sensitive value gets a planned life from creation to cleanup, with the unavoidable plaintext moments named rather than ignored.

  • Proven at runtime

    Validation happens on the running app with real tools in an authorised lab, not by pointing at storage encryption.

Memory risks Otukan handles

Pick a risk to see how Otukan detects it, how the app responds and what your backend receives.

Memory dumps and readers

  1. Detect

    Otukan detects instrumentation attached to read the process, and seals idle values so a dump between operations finds them encrypted.

  2. Respond

    Marked values stay sealed, and your policy for the flow applies while a reader is attached.

  3. Report

    An instrumentation signal reaches your backend with the session it came from.

Values edited in place

  1. Detect

    Otukan detects tools that search for and rewrite values such as balances, limits, scores or flags.

  2. Respond

    The affected flow follows your policy, from a recorded signal to ending the session.

  3. Report

    A memory-editing signal reaches your backend so the server can reject the changed value.

Breakpoints at decryption

  1. Detect

    Debuggers attached to the process are detected before and during the flows that decrypt sensitive data.

  2. Respond

    Decryption is withheld or the session ends while a debugger is present.

  3. Report

    A debugging signal travels with the request that triggered the flow.

Plaintext left after sign-out

  1. Detect

    Otukan ties cleanup of marked values to sign-out, session expiry and the app moving to the background.

  2. Respond

    Tokens and decrypted records are wiped at those moments instead of lingering until memory is reused.

  3. Report

    Sign-out and expiry cleanup is verified in the regression record for every protected release.

Controls behind memory data protection

Memory data protection draws on several runtime controls, each aimed at a different way of reaching the process.

  • Memory protection

    Seals sensitive values between uses and shortens the time they sit readable in the running app.

  • Memory editing detection

    Spots tools that locate and overwrite values in memory to change prices, limits or game state.

  • Anti-debugging

    Notices a debugger attached to the release build and withholds sensitive work while it is present.

  • Emulator detection

    Recognises virtual devices, where memory inspection tools are easiest to run at scale.

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. Name the values

    List the tokens, keys, records and trusted numbers your app holds while running.

  2. Plan their lives

    Set when each value is created, used and cleared, and mark the moments it must be readable.

  3. Protect and watch

    Otukan seals idle values, clears used buffers and detects readers and editors.

  4. Test with tools

    Dump, debug and edit the protected app in a lab, then repeat on a clean device.

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.

Evaluate memory data protection by asking two questions of every sensitive value your app holds while it runs: who could read it, and who could change it. Then check how long each value stays readable, when it is cleared, and whether the app notices tools that inspect or edit its process. Otukan clears sensitive buffers after use, holds idle values encrypted in memory, ties cleanup to sign-out and backgrounding, and detects debuggers and memory-editing tools on Android and iOS, including Flutter and React Native apps. Some plaintext moments are unavoidable. The goal is to make them short, known and watched.

Value-by-value safeguards are covered on mobile app memory protection.

Exposure

A running app handles three kinds of sensitive content in memory. Each carries a different risk.

KindExamplesRead riskModification risk
Transient secretsSession tokens, decrypted keys, one-time codesAccount takeover, forged requestsLow; changing them breaks the flow
Decrypted recordsStatements, health records, identity documentsPrivacy breach from a dumpLow
Trusted working valuesLimits, balances, scores, feature flags, timersLowHigh: a changed value alters what the app allows
BuffersNetwork responses, image data, text being assembledWhatever passed through themModerate, if the app reuses the buffer

Most memory discussions stop at the first two rows. The third is where games, loyalty schemes and offline payment limits lose money, because the attacker does not need to read anything. They change a number the app believes. Controls for that side are on memory editing detection.

Platform differences

On Android, Java and Kotlin objects are managed by the runtime, which can move and copy them, while native code manages its own memory. On iOS, Swift and Objective-C share memory with system frameworks that keep their own copies of data they display. The iOS controls are described on iOS app memory protection. Flutter and React Native run a further runtime with its own object handling. Otukan writes its controls separately for each platform and measures each framework on its own.

Lifetime

Every sensitive value passes through four stages. Mapping them per value turns a vague worry into a plan your team can test.

StageWhat happensWhat Otukan does
CreationThe value arrives from storage, the network or user inputHolds it sealed where the value is marked
UseThe app needs the value readable for an operation or a screenKeeps the readable window to the operation and watches for debuggers
IdleThe value waits for its next useKeeps it encrypted in memory
CleanupThe session ends, the user signs out or the app goes to the backgroundOverwrites the buffers that held it

Unavoidable plaintext boundaries

Some copies sit outside any app’s reach. Text shown in a field is held by the platform’s interface layer. Strings in managed languages may be copied by the runtime before your code can clear them. Data passed to a system service leaves your process. A credible evaluation names these boundaries for your app instead of implying they do not exist. Otukan’s approach is to shorten the copies your code controls and to detect the tools that would read the rest.

Validation

Memory data protection is proven on the running app. Pointing at encrypted storage proves nothing here, because stored data is decrypted before it is used.

Positive test

In an authorised lab, take a process dump between operations and search it for the marked values. Attach a debugger during a decryption flow and confirm the signal and the response. Run a memory editor against a trusted value such as a limit and confirm the edit is detected and reported to your backend.

Negative control

Repeat the same journeys on a clean device with no tools attached. No signals should fire, and flows should complete at their normal pace. This baseline is what lets your team trust the signals when they do fire.

Regression

After each protected release, repeat install, update, sign-in and the sensitive flows, including sign-out cleanup. Record OS versions, devices, tools used, results and the reviewer, so each release carries its own evidence.

Return to code and data protection for the controls that guard your package and your screens.

Common questions

  • We already encrypt data on the device. Is that memory protection?

    No. Storage encryption protects data while it sits in files and databases. The moment your app reads a record, it decrypts it into memory, and storage encryption plays no further part. Memory data protection starts at that point: how long the plaintext lives, who can read it and whether anyone can change it.

  • Can every copy of a value be removed from memory?

    Not by any app. The platform, the user interface and managed runtimes keep copies your code cannot reach, such as text shown in a field or strings a garbage collector has moved. Otukan reduces the copies your app controls, watches for tools that read the rest and documents what remains, so your risk decision rests on measured behaviour.

  • Why does memory editing matter if our server checks everything?

    If your server checks every value that matters, editing gains an attacker little. In practice, apps trust some values locally for speed or offline use: limits, scores, flags and cached balances. Otukan detects editing tools and reports them, which protects those local decisions and tells your server which sessions deserve a closer look.

On the mobile engineering team?

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

Guard data while your app uses it

Tell us the platform, the framework and the values your app handles in memory that matter most, such as tokens, balances or decrypted records. We never request binaries, keys or production data.

Or request a technical demo