Application security feature

Mobile app anti-debugging

Otukan detects debuggers attached to your store release on Android and iOS, while development and QA builds stay fully debuggable for your own engineers.

  • Android
  • iOS
  • Flutter
  • React Native
Step-through analysis is met at the tracer detection boundary before it reaches the appStep-through analysisTracer detectionYour app
  • Your logic stays unwatched

    A debugger attached to your store release is detected before an analyst can pause a licence check, read a decrypted token or change a return value.

  • Enforced where it counts

    Policy follows the build type, so development and QA builds stay debuggable while the store build refuses a quiet debugging session.

  • Diagnostics you control

    Each detection carries build, flow and platform context, and you decide which diagnostic fields the app is allowed to send.

Debugging routes Otukan watches

Choose a route to see how Otukan spots it, what the app does next and what reaches your team.

Java debugger on Android

  1. Detect

    Otukan checks whether the Java debugging interface is active for your process, or has been switched on in a build that shipped without it.

  2. Respond

    Account and payment screens can be restricted while browsing continues.

  3. Report

    Your backend receives a debugger signal naming the platform, build and flow.

Native tracer on Android

  1. Detect

    Otukan looks for a process tracing your app's compiled libraries, the route analysts take to step through native code.

  2. Respond

    The session can end before protected native logic runs.

  3. Report

    A native-tracing signal travels with the next request to your server.

Debugger on iOS

  1. Detect

    Otukan checks whether a debugger has attached to your iOS process, a state an App Store build does not normally permit.

  2. Respond

    Sensitive steps pause or the app closes, as your policy sets.

  3. Report

    Your team sees the signal alongside signing details that point to a re-signed copy.

Rebuilt as debuggable

  1. Detect

    Otukan recognises a release that has been rebuilt with debugging enabled before anyone attaches a tool.

  2. Respond

    The app treats it as a modified copy and applies your tamper response.

  3. Report

    Integrity and debugging signals arrive together, so analysts see the whole chain.

Late attachment

  1. Detect

    Checks repeat during the session and before the actions you mark, catching a debugger attached after launch.

  2. Respond

    The action in progress follows your rule, for example refusing a transfer.

  3. Report

    When the attachment happened in the session is recorded for investigation.

What Otukan anti-debugging includes

Platform-specific detection, build-aware enforcement and the neighbouring controls that close the gaps a debugger leaves.

  • Java-layer checks

    Watch the Android Java debugging interface for your process, the path most Android debuggers take into an app.

  • Native-layer checks

    Detect tracers attached to compiled code on Android, including the native layers under Flutter and React Native apps.

  • iOS attachment checks

    Detect a debugger attached to the iOS process with checks designed for iOS, not carried over from Android.

  • Hooking detection

    Catches the instrumentation frameworks analysts pair with debuggers to rewrite function results while your app runs.

  • Emulator detection

    Debugging sessions often run on virtual devices; emulator signals add that context to every debugger alert.

  • Repackaging detection

    Flags copies rebuilt and re-signed to make debugging possible, before a debugger is ever attached.

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 anti-debugging goes live

  1. Name your builds

    Tell Otukan which builds are for development, for testing and for the store.

  2. Set build policies

    Test builds observe and report; the store build gets the response each flow needs.

  3. Protect the store build

    Protection slots into the pipeline you already run, and your team keeps its signing keys.

  4. Attach in a lab

    Attach a debugger to the protected build in an authorised lab and confirm the expected signal.

  5. Watch production

    Measure how often the check fires on real users before any flow moves past observe.

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 a debugger attached to the build you publish, and leaves your own engineers free to debug everything else. On Android, separate checks cover the Java debugging interface and native tracers; on iOS, a dedicated check spots a debugger attached to the app process. Enforcement follows the build type: development and QA builds stay debuggable or simply observe, while the store build applies the response you choose per flow and sends the signal to your backend. Anti-debugging makes stepping through your logic slower and louder. It works best alongside hooking, emulator and integrity checks.

Why debuggers matter on a release build

A debugger is the most direct way to learn how an app makes decisions. With one attached, an analyst can pause the app at a licence check, read a session token the moment it is decrypted, change a return value so a risk rule passes, or watch exactly which fields a payment request carries. Obfuscation makes the code harder to read, but a debugger lets someone skip reading and simply watch. That is why debugger detection belongs in any runtime protection plan for apps that handle money, identity or valuable logic.

Legitimate debugging, on the other hand, is part of daily engineering. The goal is not to make debugging impossible everywhere; it is to make the build your users install hostile to it, and to tell your backend when someone tries.

Detection scope by platform

A debugger reaches a mobile app through different doors on each platform, and Otukan builds a separate check for each door. Nothing on this page carries an Android behaviour across to iOS, or the reverse.

RoutePlatformWhat an analyst gainsWhat Otukan checks
Java debugging interfaceAndroidBreakpoints and variable inspection in Kotlin and Java codeWhether the interface is active for your process or was enabled by a rebuild
Native tracingAndroidStep-through of compiled libraries, including engine code under Flutter and React NativeWhether another process is tracing your app’s native code
Debugger attachmentiOSControl over the running process and its memoryWhether a debugger is attached to the app process
Rebuilt debuggable copyAndroid and iOSA release altered and re-signed so a debugger can attachIntegrity and signing identity against your release

Android: two layers

Android apps run managed code and often native libraries side by side. A debugger on the managed layer sees your Kotlin or Java logic; a tracer on the native layer sees compiled libraries, encryption routines and framework engines. Otukan watches both, because protecting only one leaves the other as the easy path.

iOS: a narrower door

An App Store build is not normally open to a debugger, so attachment on a store build usually means the device is jailbroken or the app has been re-signed. Otukan reports the attachment and your backend can weigh it with the signing details that come with it. For jailbreak signals, see iOS jailbreak detection.

Build modes

Anti-debugging fails when it gets in the way of your team. Otukan starts from the build you are shipping and sets enforcement to match.

BuildWho uses itDebuggingOtukan policy
DevelopmentEngineers at their desksExpectedChecks off or observe only
QA and pre-releaseTesters and automationSometimes neededObserve and report, so testers see what would fire
Store releaseYour usersNever expectedThe response you set for each flow

Keeping these policies separate means a tester who attaches a debugger to chase a bug is not locked out, while the same action against the store build produces a signal your server can act on.

User impact and diagnostics

Response choices

Otukan gives each flow its own response. Browsing a catalogue under a debugger may only need a recorded signal. Signing in, changing account details or approving a payment can be restricted or closed. Start in observe, measure, then tighten one flow at a time. Policy design is covered on threat response.

Handling diagnostics

Each detection names the condition, the build, the platform and the flow. You choose whether any further fields go with it. That keeps the signal useful to analysts without sending personal data from the device.

Proving the check

Before a protected release ships, your engineers and Otukan attach a debugger to the protected build in an authorised lab and confirm the signal. The same journey then runs on a legitimate device, which should stay quiet. Finally, install, update, sign-in and your most sensitive flow are repeated, and the results are recorded with devices, OS versions and the reviewer.

Anti-debugging sits inside Otukan’s wider runtime protection, which is covered on mobile RASP. For the full product, return to mobile app security.

Common questions

  • Will anti-debugging stop our own developers from debugging?

    No. Otukan ties enforcement to the build type. Development and QA builds keep full debugging, or run the checks in observe mode so testers see what would fire without being blocked. Only the build you publish to the store enforces the responses you choose, and you can change that policy per flow.

  • Is developer mode on a phone the same as an attached debugger?

    No, and Otukan treats them differently. Many legitimate users switch on developer options or USB debugging for reasons unrelated to your app. Otukan reports that as context. An attached debugger or tracer on your store build is a much stronger signal, and your policy can respond to it more firmly.

  • Can a skilled attacker get past debugger detection?

    Anti-debugging makes analysis slower and more expensive, and it tells your backend when someone tries. An attacker who controls a device can work to hide a debugger, so Otukan checks at several moments, pairs the result with integrity, emulator and hooking signals, and lets your server refuse requests from sessions that look wrong.

  • What diagnostic data leaves the device?

    The signal describes the condition, the build, the platform and the flow where it fired. You decide which additional fields the app may send. Otukan does not need screen content, user input or personal data to report a debugger, which keeps your privacy review focused.

On the mobile engineering team?

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

Keep your release off the debugger

Tell us the platform, the framework and which builds your developers and testers debug today. We do not ask for binaries, signing keys or production credentials.

Or request a technical demo