Application security feature

Mobile app anti-tampering

Otukan detects modified, re-signed and repackaged copies of your mobile app, while store signing, updates and approved build variants pass cleanly.

  • Android
  • iOS
  • Flutter
  • React Native
Repackaged copies is met at the integrity checks boundary before it reaches the appRepackaged copiesIntegrity checksYour app
  • Package, signature, memory

    Otukan checks a copy at three levels: its files, its signing identity and its code in memory.

  • Your releases pass

    Store signing, updates and approved variants are expected by design, so legitimate users keep a smooth experience.

  • Your backend decides

    Tamper signals travel with the request to your server, where policy decides and a modified copy cannot patch the outcome.

Tampering Otukan catches

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

Patched code

  1. Detect

    Otukan compares executable code in the installed app with your release build, catching removed checks and altered licence logic.

  2. Respond

    Observe, warn, restrict or terminate, as your policy sets for the flow.

  3. Report

    A code integrity signal reaches your backend with the request it concerns.

Edited resources

  1. Detect

    Otukan checks configuration files, bundled scripts and assets against the versions you shipped.

  2. Respond

    Sensitive functions can be limited until the user installs a genuine copy.

  3. Report

    Your team sees which part of the package differed.

Re-signed copies

  1. Detect

    Otukan compares the installed app's certificate or team identifier with the identities your legitimate channels use.

  2. Respond

    Warn the user, restrict account changes and payments, or end the session.

  3. Report

    Signing mismatches are recorded for your fraud and brand-protection teams.

In-memory modification

  1. Detect

    Checks repeat during the session and before sensitive steps, catching code changed after launch.

  2. Respond

    The step in progress follows the action you chose, such as refusing a transfer.

  3. Report

    A runtime threat signal goes to your backend and security team.

Unofficial distribution

  1. Detect

    On Android, Otukan reads the installer the system records; on iOS, the signing and distribution details show the channel. Both are weighed with signing identity.

  2. Respond

    Treated as context rather than a verdict, because some legitimate users sideload.

  3. Report

    Your backend weighs the source together with other signals.

What Otukan integrity checks compare

Each check compares the running app with what you shipped, and together they cover package, signature and runtime.

  • Code integrity

    Detects executable code that differs from your release build, such as patched security checks or removed licence logic.

  • Resource integrity

    Detects configuration files, bundled scripts and assets that were replaced or edited.

  • Signing identity

    Confirms the installed app carries a certificate or team identifier from one of your legitimate channels.

  • Installation source

    Adds the channel the app came from as context for your policy, read the way each platform exposes it, without penalising users who sideload.

  • In-memory integrity

    Detects code changed after launch, which package checks cannot see, working with hooking detection.

  • Server-verified integrity

    Supports platform attestation that your backend verifies, so the decision rests on evidence your server checks, not on the app's own report.

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 legitimate builds

    We record every signing identity, channel and variant your users can legitimately install.

  2. Build in the checks

    Integrity data enters your existing build and release pipeline; signing keys stay with your team.

  3. Check while running

    The app verifies code, resources and signature at launch and again before sensitive steps.

  4. Decide on the server

    Signals reach your backend with each request, where your policy chooses the response.

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 detects modified and repackaged copies of your app by comparing what is running with what you shipped: its code and resources, the certificate it is signed with, and its code in memory. Checks inside the app make those comparisons at launch and again before sensitive steps, and platform attestation lets your server confirm the result independently. Just as important, Otukan knows your legitimate builds, so store signing, updates and approved variants pass cleanly. A failed check becomes a signal to your backend, where your policy decides whether to observe, restrict or stop the session.

For combined static and runtime protection, see mobile app shielding.

Integrity scope

A copy of your app can be changed at three levels. Otukan checks each one, because a check on one level says nothing about the others.

LevelWhat changesTypical attacker goalHow Otukan detects it
PackageCode, resources or configuration inside the appRemove a licence or security check, change an endpoint, insert adwareFile contents are compared with the release build
SignatureThe certificate or team identifier the app is signed withDistribute the modified copy outside your channelsSigning identity is compared with your channels’ identities
RuntimeCode or data in memory after launchChange a function’s result during a session without touching the packageChecks repeat in memory during the session, with hooking detection

Package and signature changes usually come together: once the files change, the original signature is invalid, so the copy must be re-signed. Runtime modification needs no new package, which is why Otukan pairs integrity checks with mobile RASP and hooking detection. Obfuscation keeps the checks themselves hard to find and remove.

Authorised change

Integrity checks that flag your own releases are worse than none. Otukan starts from a list of every legitimate way your app can differ, and each one is expected by design.

ScenarioAndroidiOSOtukan result
Store signingWith Play App Signing, users receive Google’s app signing certificate, not your upload certificateApp Store builds are re-signed by Apple for distributionPass
Store delivery formatGoogle Play generates split APKs from your App Bundle for each deviceApp Store thinning delivers device-specific variantsPass
Update from previous releaseNew code and resources, same signing identityNew build, same team identifier and bundle identifierPass
Beta and internal channelsPlay testing tracks use the same app signing key; non-store channels may use other keysTestFlight, ad hoc and development signingPass, when listed for that build
Enterprise or managed distributionManaged Google Play or private channelsCustom apps or enterprise distributionPass, when listed
Modified and re-signed copyDifferent signing certificateDifferent team identifierSignal
Resource edited, re-signedResource contents differBundle contents differSignal

Otukan records which signing identities are legitimate for each build and channel. When you rotate a key or open a new channel, the expectation is updated before the release, so your users are not caught out. For key handling, see app signing security.

Enforcement on your terms

A failed integrity check shows that something differs; it does not prove fraud. Security researchers, users who sideload an older release and devices with unusual configurations can all produce an unexpected install. Otukan is built to act on that difference with judgement.

Detection

Checks run at launch and repeat before sensitive steps, because runtime modification can start after launch. Where the platform offers attestation, your server verifies it rather than trusting a result the app reports about itself. Obfuscation protects the checks, so they are hard to locate and strip out.

Response

The signal travels to your backend with the request it concerns, and your policy decides: allow and record, step up authentication, restrict payments or account changes, or refuse the session. Keeping the decision on the server means a modified copy cannot patch it out. Policy design is covered on threat response.

Testing

Otukan tests each scenario in the table above together with your team. In an authorised lab, a modified copy is built, re-signed and installed to confirm the expected signal. Builds from each legitimate channel are then installed to confirm nothing fires. Install, update, sign-in and your most sensitive flow are repeated, with versions, devices, results and the reviewer recorded.

For the wider protection model, return to mobile app security. If your app is already published, start with a free App Exposure Check of the public store release. For a structured way to evaluate options, see the anti tampering solution guide.

Common questions

  • What is the difference between repackaging and re-signing?

    Repackaging means unpacking the app, changing something, such as removing a check or inserting code, and building a new package. Because the original signature no longer matches, the package must then be re-signed with a different key. Re-signing without code changes also happens, for example to distribute a copy outside the official store. Otukan detects both through its signing identity and integrity checks.

  • Will store signing trigger integrity checks?

    Otukan's checks are built to expect it. With Play App Signing, users receive Google's app signing certificate rather than your upload certificate, and on iOS, App Store builds are re-signed by Apple for distribution. Otukan's checks are configured for what users actually receive from each channel and tested on a build from each one before release.

  • Should the app shut down when tampering is detected?

    Only where the evidence and the risk justify it. A hard stop on the device can be patched out and inconveniences legitimate users if a check misfires. Otukan's recommended pattern sends the signal to your backend, restricts sensitive functions server-side and keeps a record for investigation, with termination reserved for high-risk flows.

  • Does platform attestation replace in-app integrity checks?

    They work best together. Attestation services such as Play Integrity on Android and App Attest on iOS let your server verify claims about the app and device. Otukan's in-app checks cover the moments and details that attestation does not, such as repeated checks during a session. Each platform's services differ, so both are scoped per platform.

On the mobile engineering team?

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

Know when your app has been changed

Tell us the platform, the framework, how you sign and distribute each build and where modified copies worry you most. We do not ask for binaries, signing keys or production credentials.

Or request a technical demo