Engineering

Objective-C app security

Otukan protects Objective-C apps where the runtime exposes them: class and selector metadata, method interception and the release checks that keep them stable.

  • iOS
  • Objective-C
  • Metadata made opaque

    Class, selector and property names in your release binary stop reading like documentation, while the names the runtime looks up by string keep working.

  • Swaps you approve

    Otukan separates the method replacements your own SDKs make from the ones an attacker adds, and reports only the second kind.

  • Release-safe by design

    Every renamed symbol and every runtime check is accepted against your crash tooling and your real user journeys before the build ships.

What Otukan covers in Objective-C code

Controls chosen for a language whose runtime keeps its own map of your app.

  • Selector and class renaming

    Replaces meaningful class, method and property names in the Objective-C metadata sections with names that tell an analyst nothing.

  • Swizzling detection

    Notices when the implementation behind a sensitive selector changes at run time and names the method affected.

  • Bundle integrity

    Detects a re-signed or edited copy of your app, including one whose Objective-C sections were patched by hand.

  • iOS runtime self-protection

    Adds debugger, injection and jailbreak checks that feed the response you set for each sensitive flow.

How it works

  1. Map the dynamic names

    Together we list selectors reached by string, archived classes and interface-builder outlets that must keep their names.

  2. Record approved swaps

    Your embedded SDKs' legitimate method replacements are captured so they never raise a signal.

  3. Protect the archive

    Protection fits your existing Xcode build and release pipeline; signing identities stay with your team.

  4. Accept on devices

    Physical-device runs confirm interception signals, silence on clean devices and readable crash reports.

  5. Release and watch

    Ship through your usual channel and follow which methods attackers target in production.

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.

An Objective-C app carries its own map. Because the runtime sends messages by name, the release binary keeps class names, selectors, property names and method lists, and anyone who decrypts it can read that map and change method implementations while the app runs. Otukan protects both sides of that exposure: it renames the metadata the runtime never looks up by string, detects unapproved method interception on your sensitive classes, and accepts every change against your crash tooling and real journeys. Scope is the Objective-C layer of an iOS app on physical devices; Swift code is covered on Swift app security.

Selectors, classes and runtime metadata

The compiler writes several metadata sections into every Objective-C binary. Each one helps the runtime, and each one helps an analyst.

MetadataWhy the runtime needs itWhat an analyst learnsWhat Otukan does
Class namesClass lookup, archiving, introspectionThe structure of your app, class by classRenames classes that are never looked up by string
SelectorsMessage dispatch by nameEvery method’s purpose, such as verifyPIN:Renames selectors outside your dynamic-name list
Property and ivar namesKey-value coding and layoutWhich fields hold tokens, balances or flagsRenames them where no string lookup reaches them
Protocol listsConformance checksHow modules talk to each otherRenames private protocols
String literalsConstants you referenceEndpoints, error text, feature flagsEncodes the strings you mark as sensitive

Names that must stay readable

Some names are part of a contract with the system. Interface builder connects outlets and actions by name. Keyed archives store class names inside saved data. Key-value coding and NSSelectorFromString build names from strings at run time. Core Data maps entities to classes by name. Otukan keeps these untouched and renames the rest, so an app that relies on dynamic lookups keeps working as it did.

Method interception and approved SDK behaviour

Objective-C lets code swap the implementation behind a selector while the app runs. That is how many legitimate SDKs attach to your app delegate, and it is also the cheapest way for an attacker to skip a PIN check or rewrite a transfer amount.

What attackers change

  • Implementation swaps. A new function replaces the one behind a selector, so every caller now runs attacker code.
  • Class changes on one object. An object is moved to a generated subclass whose methods behave differently.
  • Added forwarding. A class starts forwarding messages it used to handle directly, sending them through code the attacker controls.
  • New categories. An injected library adds methods to your classes that override the originals.

How Otukan tells them apart

Otukan records the method replacements your embedded SDKs make on a clean, signed build. At run time it checks the implementations behind your sensitive selectors against that approved picture. A change inside the approved set is ignored. A change outside it produces a signal naming the class and selector, which travels with your next sensitive request so your backend can decide. Hooking at the native layer is covered on iOS hooking detection.

Release compatibility and diagnostics

Protection must survive the same release routine as your code. Otukan treats compatibility as part of the product.

Crash reports stay readable

Symbolication of Objective-C frames uses your dSYM files. For renamed classes and selectors, Otukan keeps a private rename map per build, so your team can translate a protected crash report back to original names. The map stays with you.

Behaviour that must not change

Before each release, the protected build is run on physical devices through install, update from the previous version, sign-in and your most sensitive flow. Categories, +load methods and classes created from strings are exercised explicitly, because they are where a careless rename would show. A negative run on a clean device confirms that approved SDK swaps stay silent.

Diagnosing a signal

When a swizzling signal fires, it names the selector and the moment it was seen, such as launch or before a transfer. That lets your engineers reproduce it in an authorised lab rather than guess. For the wider iOS picture, return to iOS app security, and further walkthroughs are in iOS app security guides.

Common questions

  • Why is Objective-C easier to reverse engineer than Swift?

    The Objective-C runtime resolves messages by name while the app runs, so the compiler must keep class names, selectors, property names and method lists in the binary. Anyone who decrypts the executable can rebuild readable headers from that metadata. Swift keeps metadata too, but calls can be resolved at compile time. Otukan targets exactly the names Objective-C leaves behind.

  • Our analytics and push SDKs swizzle app delegate methods. Will that trigger alerts?

    No, once those replacements are recorded as approved. During scoping, Otukan captures the swaps your embedded SDKs perform on a clean build. At run time a change that matches the approved set stays silent, and anything outside it, such as a new implementation on your payment confirmation method, produces a signal with the selector named.

  • Can renaming break storyboards or saved data?

    It can, if names reached by string are renamed, which is why Otukan keeps them. Outlets and actions wired in interface builder, classes stored in keyed archives, key-value coding paths and Core Data entity classes all keep their original names. Everything the runtime never looks up by string is eligible for renaming.

Related

Close the map your Objective-C leaves open

Tell us how much of your iOS code is Objective-C, which SDKs you embed that replace methods, and how you use storyboards, key-value coding or archived objects. We never ask for source code, IPA files, signing certificates or production credentials.

Or request a technical demo