Application security feature

App repackaging and re-signing detection

Otukan tells your genuine Android or iOS release from a repackaged, re-signed copy, and keeps passing your own builds through key rotation and store changes.

  • Android
  • iOS
  • Flutter
  • React Native
Re-signed copies is met at the signing identity boundary before it reaches the appRe-signed copiesSigning identityYour app
  • Keys stay yours

    Otukan only needs to know which certificates are genuine. Private keys, keystores and distribution certificates never leave your team.

  • Checked after signing

    The protected app verifies the signature it actually carries on the device, so a copy signed by anyone else is recognised.

  • Built for key changes

    Rotation, renewal and store re-signing are planned for, so your own builds keep passing when your signing setup changes.

Repackaging routes Otukan recognises

Choose a route to see how Otukan recognises the copy, what it does and what your backend learns.

Unpacked, edited, re-signed APK

  1. Detect

    Otukan compares the signing certificate and package contents on the device with those of your genuine Android release.

  2. Respond

    The copy is kept away from sign-in, payments and stored data.

  3. Report

    Your backend receives the certificate the copy was signed with.

Re-signed iOS bundle

  1. Detect

    Otukan checks the bundle's signing identity, team and entitlements against your genuine distribution.

  2. Respond

    Sensitive flows close, or the app shows where to get the official release.

  3. Report

    The observed signing team and app version are reported.

Modded copies on third-party stores

  1. Detect

    Otukan reads the installation source where the platform exposes it and pairs it with the signature result.

  2. Respond

    Premium features and in-app value stay locked in modified copies.

  3. Report

    Installation source and signature appear together for trend analysis.

Wrapped copies used for phishing

  1. Detect

    Otukan recognises a genuine-looking app whose code has been rewrapped with extra screens or trackers.

  2. Respond

    Per your policy, sign-in closes in the copy before a credential is typed.

  3. Report

    Your fraud and security teams see the altered package and its certificate.

Controls that pair with re-signing detection

A repackaged copy is usually made for fraud, cheating or phishing, so these controls handle what it is built to do.

  • Fake app defence

    Addresses imitation apps that borrow your name and look to collect your customers' credentials.

  • Anti-modding

    Protects in-app value, entitlements and game logic that modified copies are built to unlock.

  • Signing and release security

    Keeps key custody, certificate records and release checkpoints in order across your build pipeline.

  • Account and installation integrity

    Links an account to genuine installations of your app so sessions from copies stand out.

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 genuine certificates

    You tell Otukan which certificates sign your distributed builds, never the keys themselves.

  2. Protect, then sign

    Protection is applied before final signing, so the signature your users receive stays yours.

  3. Verify on the device

    At launch the app compares its own signature and contents with your genuine release.

  4. Respond and report

    A mismatch triggers your chosen response and reaches your backend with the observed certificate.

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 repackaging and re-signing detection by two tests: can the running app tell its genuine signing identity from any other, and do your own builds keep passing when keys, profiles or stores change? Otukan checks the signing certificate, package contents and installation source on Android and iOS while your app runs. It recognises copies that were unpacked, modified and signed again, applies your response before sensitive flows open and sends the observed certificate to your backend. Your signing keys stay with your team; Otukan only needs to know which certificates are genuine. Detection makes copies visible and costly; your server keeps the final decision.

How re-signing detection fits with other integrity checks is covered on application integrity.

Who holds signing authority

A re-signed copy is only recognisable if you are clear about who signs the genuine one. Signing authority is split differently on each platform.

Android

Every APK or app bundle is signed before it installs. With Play App Signing, your team keeps the upload key and Google holds the app signing key used for installs from Google Play. Builds distributed outside Google Play carry whichever key your team signs them with. Anyone can sign an APK with a key of their own, which is exactly what makes re-signed copies easy to produce.

iOS

Apps are signed with a distribution certificate from your Apple Developer account, and each build carries a provisioning profile and entitlements that tie it to your team. Re-signing a copy needs a different developer identity and a profile of its own, so the copy’s team and entitlements differ from yours. Builds installed from the App Store carry Apple’s distribution signature over your build, so your team identifier and entitlements are what identify the genuine release.

ArtefactWho owns itAndroidiOSWhat Otukan compares
Signing keyYour team, or Google for Play installsUpload key and app signing keyDistribution certificate private keyNever held by Otukan
CertificatePublic, derived from the keySigning certificate in the packageSigning identity and teamAgainst the genuine list
Profile and entitlementsYour developer accountNot applicableProvisioning profile and entitlementsTeam and entitlements
Package contentsYour buildCode and resources in the APKCode and resources in the bundleAgainst the release

Where each checkpoint sits

The order of steps decides whether the check protects you or locks you out. Otukan fits your existing build and release pipeline in this sequence:

  1. Build. Your pipeline produces the release as it does today.
  2. Protect. Otukan’s protection is applied, including the signature and content checks.
  3. Sign. Your team signs the protected build. For store installs, Google Play (with Play App Signing) or the App Store applies the distribution signature. Either way, the identity users receive stays tied to your account.
  4. Verify. Before distribution, install the signed build on test devices and confirm the check passes for the genuine signature.
  5. Distribute. Submit to the store or your channel as usual. On the device, the app verifies itself at launch.

A second verification belongs after the store step: install from the store itself and confirm the check still passes, because the certificate your users receive can differ from the one you uploaded with.

Recovery when signing changes

Most failures in re-signing detection happen to genuine builds during a change, not to attackers. Plan these cases before they happen.

Certificate rotation

Android supports signing key rotation with a lineage that links old and new keys. Add the new certificate to Otukan’s genuine list in the release before you rotate, so users on either signature keep passing, then retire the old entry once it has left your installed base.

Expiry

On iOS, an in-house or ad hoc build stops launching when its provisioning profile expires or its certificate is revoked. App Store installs are not affected by the distribution certificate’s expiry. Track expiry dates for each channel and renew with the genuine list updated in advance.

Rollback

If you roll back to an older release, it must carry a genuine list that still matches the certificate in use. Keep the list versioned alongside each release.

Failed installation

Android refuses to install an update signed with a different key over an existing install, unless the rotation lineage links them. If a copy with the same package name is already installed, the genuine app cannot install over it; the user must remove the copy first. The copy’s own signature check can point that user to the official release.

Platform walkthroughs are covered on detecting repackaging in Android apps and preventing mods that need iOS re-signing. For a progressive web app shipped in a store wrapper, see progressive web app protection. To evaluate anti tampering more broadly, see the anti tampering solution guide.

Common questions

  • We use Play App Signing. Will our genuine installs pass?

    Yes, when the check is configured with the right certificate. With Play App Signing, Google signs what your users install with the app signing key, while your team signs uploads with a separate upload key. Otukan's genuine-certificate list holds the certificate your users' installs actually carry, which you can read from the Play Console, so store installs pass and copies signed elsewhere do not.

  • What happens when we rotate or renew a certificate?

    Plan it as a release step. Add the new certificate to Otukan's genuine list in the release before the change, so both old and new signatures pass while users update. Once the old certificate no longer appears in your installed base, remove it. Test install, update and sign-in on both signatures before switching.

  • Can an attacker remove the signature check from the copy?

    They can try, which is why the check is not alone. Signature verification is combined with content checks, code obfuscation and a report to your backend. Stripping the check means finding and defeating several of them, and your server can still ask why a request arrived without the integrity signal it expects.

  • Do you need our signing keys?

    No. Otukan never asks for private keys, keystores, distribution certificates with their private keys or provisioning credentials. The check only needs the public certificate information that identifies your genuine builds, and your team keeps signing every release exactly as it does today.

On the mobile engineering team?

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

Make copies of your app recognisable

Tell us your platforms, how each build is signed and distributed (store, enterprise or test channels) and whether a key rotation is planned. We never ask for signing keys, certificates, binaries or production credentials.

Or request a technical demo