Application security feature

iOS hooking detection

Otukan detects runtime interception in protected iOS apps: injected libraries, swapped methods and patched functions, with a response your backend can act on.

  • iOS
Instrumented iOS process is met at the code and loader checks boundary before it reaches the appInstrumented iOS processCode and loader checksYour app
  • Four layers, checked apart

    Foreign libraries, swapped Objective-C methods, rebound symbols and patched function entries are checked separately, so hiding one trace leaves the others.

  • Checks at the right moment

    Instrumentation often attaches after launch. Otukan repeats its checks right before the functions you mark as critical run.

  • Quiet on clean devices

    Approved SDK behaviour is recorded up front and every build is tested on clean phones, so real customers get through without false alarms.

iOS interception Otukan detects

Pick a technique to see how Otukan finds it, how the app reacts and what your backend receives.

Injected dynamic libraries

  1. Detect

    Otukan compares the images loaded into your process with the set your bundle and iOS should load.

  2. Respond

    The flow in progress applies the response you configured for injection.

  3. Report

    The signal names the unexpected image and when it appeared.

Objective-C method swaps

  1. Detect

    The implementation behind each sensitive selector is compared with the one your build shipped.

  2. Respond

    Protected actions pause or end, per flow.

  3. Report

    Your backend learns which class and selector changed.

Inline function patches

  1. Detect

    The opening instructions of your marked Swift and C functions are checked for redirects.

  2. Respond

    Per your policy, the critical call is blocked or completed with a signal attached.

  3. Report

    A patch signal names the protected function.

Rebound symbol pointers

  1. Detect

    Otukan confirms that calls to sensitive system and library functions still resolve where iOS placed them.

  2. Respond

    Checks relying on those calls are treated as untrusted.

  3. Report

    The rebinding is reported with the affected symbol.

Instrumentation toolkits

  1. Detect

    Threads, ports and memory regions typical of dynamic instrumentation agents are looked for inside your process.

  2. Respond

    Sensitive screens close or the session ends, as you set.

  3. Report

    An instrumentation signal travels with the next request.

What sits behind Otukan hooking detection on iOS

Hooking detection works best when the checks themselves are hard to find and remove.

  • Interception detection

    Checks the loader, the Objective-C runtime and native function entries for signs that someone has redirected your code.

  • Debugger detection

    Finds a debugger attached to a release build, the usual companion to step-by-step interception.

  • Obfuscated checks

    Hides where Otukan's own checks live in the binary, so they cannot be located and hooked first.

  • Jailbreak context

    Adds the device state most hooking needs, so a detection can be weighed with how the phone has been altered.

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 critical functions

    Pick the functions whose outcome matters: PIN checks, signing, transfers, licence and entitlement decisions.

  2. Baseline the build

    Record the libraries, method implementations and SDK swaps a clean, signed build produces.

  3. Check before use

    The app re-runs interception checks immediately before each named function executes.

  4. Respond and report

    The flow applies your policy, and the signal reaches your backend with the request.

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.

Runtime interception in an iOS app shows up in four places: the loader, which reveals libraries that should not be there; the Objective-C runtime, where method implementations can be swapped; the first instructions of native and Swift functions, which can be patched to jump elsewhere; and symbol pointers, which can be rebound to replacement code. Otukan checks each of these independently inside your protected app, repeats the checks just before the functions you name as critical, and sends a signal your backend can act on. It makes interception slower to hide and costlier to sustain. For the cross-platform picture, see mobile app hooking detection.

Injected libraries and method interception

Most interception on iOS starts by getting foreign code into your process. On a jailbroken phone a tweak loader does it at launch. On a stock phone the attacker has to embed a library into a re-signed copy of your app.

What Otukan looks at

LayerWhat the attacker doesWhat Otukan checks
LoaderAdds a library to the process at launch or laterLoaded images against the expected set for your bundle and iOS
Objective-C runtimeSwaps the function behind a selectorCurrent implementations of sensitive selectors against your build
Function entryOverwrites the first instructions to jump to new codeThe opening bytes of each marked function
Symbol bindingPoints a lazily bound call to a replacementWhere sensitive system and library calls actually resolve

Each layer is independent. An attacker who hides a library from the loader list still leaves patched instructions or changed implementations for the other checks to find. For a PIN check, a signing routine or a transfer, Otukan runs the checks immediately before the call, not only at launch, because instrumentation often attaches once the app is already running.

Swift and Objective-C runtime differences

The language you wrote a function in changes how it can be hooked.

  • Objective-C methods are dispatched by name through the runtime. Swapping one takes a single runtime call, so these are the most common target. Otukan compares implementations directly.
  • Swift members exposed with @objc can be swapped in the runtime, which changes what every Objective-C caller reaches. Members marked @objc dynamic are always dispatched by message, so a swap reaches Swift callers too. Otukan treats both like Objective-C methods.
  • Pure Swift functions are called directly or through type tables. Intercepting them means patching the function entry or its call sites, which Otukan’s entry checks cover for the functions you mark.
  • C and system calls go through symbol stubs. Rebinding a stub is how attackers fake a system answer, such as a clean file check; Otukan confirms those calls resolve where iOS placed them.

This is why Otukan asks which language each critical function uses: the right check depends on it. The Objective-C side is expanded on Objective-C app security, and Swift on Swift app security.

What your backend receives

Each hooking signal carries the layer that fired, the function, selector, library or symbol involved, and the moment it was seen: at launch, at sign-in or immediately before a named call. Your security team can group sessions by technique, notice a new tool spreading across accounts and tighten the server-side decision for one flow while the app itself stays unchanged. When a device that normally reports stops sending signals altogether, your server can treat that silence as a risk too.

Clean-device and authorised-instrumentation tests

A hooking check is only trustworthy when it fires under attack and stays silent for real customers. Otukan accepts every protected release with both.

Positive tests

In an authorised lab, your engineers and Otukan hook each named function with dynamic instrumentation on a jailbroken test phone, and separately embed a library into a re-signed test copy. Each technique must produce its expected signal, name the right function and trigger the response set for that flow.

Negative tests

The same journeys run on stock, non-jailbroken iPhones with the distribution-signed build. Approved SDK swaps must stay silent, and install, update, sign-in and your most sensitive flow must behave exactly as in the unprotected build.

Recording

Each run records the iOS version, device model, build, expected and actual signals, and the reviewer. That record becomes your baseline for the next release. For the full runtime layer, see iOS RASP, and return to iOS app security for the platform overview. More material is in iOS app security guides.

Common questions

  • Can hooking happen on an iPhone that is not jailbroken?

    Yes, in narrower ways. An attacker can re-sign your app with an extra library embedded and install it through a developer account, or use a debugging-enabled build. That copy fails Otukan's integrity checks and its injected library is visible to the loader check. Jailbroken devices open more options, which is why jailbreak context travels with every hooking signal.

  • Will our crash reporter or analytics SDK look like an attack?

    Not after scoping. Several common SDK types replace methods on your app delegate or networking classes for legitimate reasons. Otukan records those replacements on a clean build and treats them as approved. Only interception outside that set, or on the functions you named as critical, produces a signal.

  • Can a skilled attacker hide from hooking detection?

    Determined attackers keep adapting, and no check stays hidden forever. Otukan makes hiding slow and costly: it checks several independent layers, repeats checks before critical calls, obfuscates its own code and lets your backend treat a missing signal as a risk. Signals from the field then show your team which technique is in use and where to tighten next.

On the mobile engineering team?

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

See who is inside your iOS app

Tell us which functions carry your most sensitive decisions, whether they are Swift, Objective-C or a cross-platform layer, and which SDKs in your app legitimately replace methods. Source code, IPA files, signing keys and production credentials are never needed.

Or request a technical demo