Application security feature

Asset and resource encryption

How to evaluate asset and resource encryption: which bundled files to protect, who holds the keys, and what Otukan does when your app loads them.

  • Android
  • iOS
  • Flutter
  • React Native
Lifted bundled assets is met at the load-time decryption boundary before it reaches the appLifted bundled assetsLoad-time decryptionYour app
  • Ciphertext in the package

    Configuration, scripts, models and media ship encrypted, so unzipping a downloaded app no longer hands over the files your product depends on.

  • Keys tied to the release

    Asset keys belong to the protected build, not to your users or your servers, so there is no key database for your team to run.

  • Checked when loaded

    Each protected file is verified as your app opens it, so a swapped or edited file fails to load and raises a tamper signal.

Asset threats Otukan handles

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

Swapped configuration files

  1. Detect

    Each protected configuration file is verified against your release at the moment the app opens it.

  2. Respond

    The changed file is refused, and the flow follows your policy, from a recorded signal to stopping.

  3. Report

    A tamper signal with app version and platform reaches your backend.

Debugger at asset load

  1. Detect

    Otukan detects a debugger or tracer attached to the release build while protected files are being decrypted.

  2. Respond

    The asset is withheld or the session ends, as your policy for that flow sets.

  3. Report

    A debugging signal travels with the next request to your backend.

Hooked model loading

  1. Detect

    Otukan detects instrumentation attached to the functions that receive decrypted models and rule tables.

  2. Respond

    Model loading stops for that session, so the hooked code does not receive the plaintext.

  3. Report

    A hooking signal lets your backend flag the account or device for review.

Altered script bundles

  1. Detect

    Script bundles and local web content are integrity-checked each time the app loads them.

  2. Respond

    An altered bundle fails to load, and your policy decides whether the flow continues.

  3. Report

    Your backend receives a tamper signal naming the app version that reported it.

Repackaged copies

  1. Detect

    Otukan checks that code, resources and signing identity match the release you shipped.

  2. Respond

    A re-signed copy carrying changed assets can be stopped before protected content loads.

  3. Report

    An integrity signal tells your backend the request comes from an altered app.

Media recorded in playback

  1. Detect

    Otukan flags screen recording while protected media plays on screens you mark.

  2. Respond

    Playback pauses or the content is hidden, per your policy.

  3. Report

    A capture signal is recorded with the screen it affected, for your content team.

What asset encryption protects

You choose the files; Otukan encrypts them in the protected build and opens them only for your app.

  • Configuration encryption

    Keeps environment settings, endpoint lists and feature switches out of plain view in the shipped package.

  • Script bundle protection

    Encrypts script bundles and local web content that hybrid and cross-platform apps load at runtime.

  • Model and data files

    Protects bundled models, rule tables and reference data that carry your product's know-how.

  • Media protection

    Holds licensed or paid images, audio and levels encrypted until the app renders or plays them.

  • Anti-debugging at load

    Detects debuggers attached while protected files are decrypted and withholds the asset for that session.

  • Repackaging detection

    Spots copies of your app that were unpacked, altered and re-signed for redistribution.

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. List your assets

    Name the files and folders whose contents give away logic, licensed content or know-how.

  2. Mark and build

    Marked assets are encrypted inside your existing build and release pipeline; signing keys stay with you.

  3. Decrypt on load

    The protected app opens each file only at the moment it needs it.

  4. Verify and report

    Load-time checks refuse changed files and send a tamper signal to your backend.

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 asset and resource encryption by starting with the files, not the cipher. List what your app ships besides code, mark the files that would hurt you if copied or changed, and test three things: those files are unreadable in the downloaded package, their keys add no service for your team to run, and a swapped file is refused. Otukan delivers all three for Android, iOS, Flutter and React Native apps. It encrypts marked assets in the protected build, decrypts them only as your app loads them and refuses changed files. Once content is decrypted for use, Otukan’s runtime checks guard it.

Data inventory

An Android package and an iOS app bundle are both archives. Anyone who downloads your app can open them and browse every file inside. On iOS, the App Store’s distribution encryption applies to the executable, not to the resources that sit beside it, so bundled files are readable once the archive is unpacked. On Android, the assets and raw resource folders open just as easily.

Start the evaluation with a table like this one, filled in for your own app.

AssetTypical locationWhat an attacker gainsEncrypt?
Environment and endpoint configurationBundled JSON or property filesHidden APIs, staging servers, feature switchesYes
Script bundlesThe JavaScript bundle of a React Native app; local web content in hybrid screensBusiness logic in near-readable formYes
On-device models and rule tablesModel files, scoring tables, fraud rulesYour trained know-how, ready to reuseYes
Licensed or paid mediaImages, audio, video, game levelsContent you pay for or sellUsually
Flutter assetsThe app’s bundled asset folderWhatever your team placed thereCase by case
Icons, fonts, generic imagesStandard resource foldersNothing of valueNo

Two questions decide each row. Would a copy of this file help someone build a rival product, bypass a rule or resell your content? Would a changed copy let someone alter how the app behaves? A yes to either marks the file for encryption.

Where the storage boundary sits

Asset encryption protects files inside the package. It is a different boundary from data your app writes to the device after install, which belongs to Android app data encryption and iOS app data encryption. Keeping the two separate stops a team from assuming that one control covers both.

Key lifecycle

Asset keys have an unusual profile. Every user receives the same files, so there is no per-user key to create or recover. What matters is who generates the key, where the app finds it, and what happens when a release changes.

StageResponsibilityWhat to ask during evaluation
GenerationOtukan, during the protected buildAre keys generated for each protected release?
AccessThe protected app, at load timeIs the key material hidden from the code a decompiler shows?
RotationEach new protected releaseDoes a new release stop old extracted material from being reused?
RecoveryRebuild from sourceIs there anything your team must back up?

With Otukan, the asset keys belong to the protected build. Your team does not run a key service for these files and has nothing extra to back up: rebuilding from source produces a fresh protected release. Signing keys never leave your team.

Keys that do not belong here

Asset keys protect files that are the same for everyone. Keys that protect a user’s own data, sign requests or unlock an account belong in platform-backed storage or on your server. For that side of key handling, see cryptographic controls.

Runtime scope

An app cannot use a file it cannot read. At the moment of load, the protected app decrypts the asset into memory and hands it to the code that needs it. That moment defines what asset encryption does and does not do.

What it stops

  • Reading configuration, scripts, models and media from a downloaded package.
  • Dropping a changed file into the package and having the app trust it.
  • Copying licensed content out of the app and reusing it elsewhere.

What it does not stop on its own

  • An analyst with a debugger attached at the moment of load.
  • Instrumentation that reads the decrypted content from memory.
  • Screen recording of media the app is playing.

Otukan answers these with runtime controls that sit alongside asset encryption: debugger and instrumentation detection during load, memory safeguards for decrypted content and capture controls on sensitive screens. Each one sends its signal to your backend, so a bypass on the device is visible on your side. Runtime safeguards for decrypted values are covered on memory data protection.

Proving it on your app

Before a protected release ships, your team and ours run three tests on the files you marked. In an authorised lab, we unpack the protected package and confirm the marked files are unreadable, then swap one and confirm the app refuses it and the tamper signal arrives. On a legitimate device, the same journey completes with no signal. Install, update, sign-in and the flows that load protected content are then repeated, with OS versions, devices, results and reviewer recorded.

Asset encryption is one of several package and runtime controls; return to code and data protection for the full set.

Common questions

  • Should every asset in the app be encrypted?

    No. Encrypt the files whose contents are worth taking or worth changing: configuration, script bundles, models, rule tables and licensed media. Icons, generic images and open-source fonts gain nothing from encryption and only add load work. A short inventory with your team usually shows a small set of folders that carry most of the value.

  • Can an attacker still get the decrypted asset?

    Your app has to read the asset to use it, so a determined analyst on a device they control can try to capture it at that moment. Otukan makes that step slow and visible: runtime checks look for debuggers and memory readers during load, and the signal reaches your backend. What asset encryption removes is the easy path of unzipping a download.

  • Do we need to manage the asset keys ourselves?

    No. Asset keys are part of the protected build rather than a service your team runs. That is the right fit for files that ship identically to every user. Keys that protect a user's own data are a different matter and belong in platform-backed storage on the device or on your server.

  • Does this replace platform encryption on the device?

    It covers a different moment. Android and iOS protect files on a locked or powered-off device. Asset encryption protects the files inside the package itself, which anyone can download and open on a desk long before it reaches a phone.

On the mobile engineering team?

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

Ship assets only your app can read

Tell us the platform, the framework and the bundled files you most want to keep private, such as configuration, scripts or on-device models. We never ask for your binaries, signing keys or production data.

Or request a technical demo