Engineering

Unity app security

Otukan protects Unity games on Android and iOS: IL2CPP and Mono builds, game logic and memory at runtime, with signals your game servers can act on.

  • Unity
  • Android
  • iOS
  • Protection for both backends

    Mono ships readable assemblies; IL2CPP ships native code with a metadata file that maps it back. Otukan hardens whichever your build produces.

  • Cheats caught in play

    Memory editors, speed tools, hooks and modded clients are detected while the game runs, and your game server receives the signal.

  • Built around frame time

    Runtime checks are scheduled to respect your frame budget, and protected builds are measured on the devices your players use.

What Otukan adds to a Unity game

Controls aimed at the ways players and cheat makers attack mobile games.

  • Game logic hardening

    Protects IL2CPP metadata and Mono assemblies so that class names, methods and strings no longer lead straight to scoring, rewards or matchmaking code.

  • Memory value protection

    Detects memory scanners and editors that search for and rewrite values such as currency, health or cooldowns.

  • Mod and patch detection

    Recognises clients rebuilt with altered code, metadata or asset bundles, and patched native libraries.

  • Speed and time tampering

    Flags manipulation of the game clock and system time that accelerates timers, cooldowns or energy refills.

  • Emulator and bot play

    Identifies emulators and automated input so that ranked and reward modes can treat them under their own rules.

  • Purchase integrity signals

    Adds client integrity evidence to in-app purchase and reward requests, so your server validates receipts with more context.

How it works

  1. Share your build setup

    Unity version, scripting backend, target architectures and plugins per platform. No project files are needed.

  2. Choose protected flows

    Pick the economy, match and reward flows that matter, and the response for each.

  3. Build as usual

    Protection fits your existing Unity build and release pipeline, on developer machines or build servers.

  4. Ship with your keys

    Your keystore and Apple identities stay in your hands at every release.

  5. Feed the game server

    Cheat and integrity signals travel with the requests your server already trusts least.

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.

Unity teams protect game logic and runtime behaviour in two places at once. On the device, Otukan hardens the code your build produces, whether Mono or IL2CPP, and detects memory editors, speed tools, hooks and modified clients while the game runs. On your servers, the decisions that carry real value stay authoritative, and Otukan’s signals tell them which clients to trust. Otukan protects Unity games on Android and iOS. Client protection makes cheating slower, costlier and visible; it does not replace server-side validation of currency, results and purchases. The sections below cover build variants, the client-server boundary and performance.

Build variants

Scripting backends

Unity compiles C# in one of two ways, and the release contents differ sharply.

With Mono, your game code ships as .NET assemblies such as Assembly-CSharp.dll, which standard decompilers turn back into readable C#. .NET MAUI apps ship managed assemblies too; .NET MAUI app security covers those release builds. On Android, Mono cannot target 64-bit ARM, so releases that must meet Google Play’s 64-bit requirement use IL2CPP.

With IL2CPP, Unity converts your code to C++ and compiles it to native machine code. On iOS, IL2CPP is the only backend. The native code is harder to read, but the build also ships global-metadata.dat, which maps functions back to class, method and field names. Otukan protects that metadata and hardens the native code around it.

Native components and content

Every Unity game also carries the engine’s native libraries, your native plugins, third-party SDKs for ads, analytics or payments, and content in asset bundles or Addressables. Otukan’s integrity checks cover the game code, metadata and native libraries, and detect modified content your policy cares about.

ComponentAndroidiOSWhat Otukan adds
Game code (IL2CPP)libil2cpp.so per ABIInside UnityFramework.frameworkNative hardening and integrity checks
Metadata (IL2CPP)global-metadata.dat in the package assetsglobal-metadata.dat in the app bundleMetadata protection
Game code (Mono)Assemblies in the packageNot availableAssembly hardening
Engine and pluginsNative libraries and AARsFrameworksIntegrity checks; runtime checks tuned for SDKs
ContentAsset bundles, AddressablesAsset bundles, AddressablesModification detection

Security boundary

What the client defends

On the device, Otukan detects the tools behind common mobile cheats: memory scanners that rewrite currency or health, speed tools that accelerate timers, hooks that change what game functions return, and modded clients. It also identifies emulators and automated input. The response is yours per flow: observe, warn, restrict the feature, or end the session. For cheat types in detail, see mobile game anti-cheat.

What the server decides

Anything with lasting value belongs on the server: balances, inventory, match outcomes, leaderboard entries and purchase validation against the store’s own server APIs. Otukan attaches client integrity evidence to those requests. The server can then reject impossible results, hold rewards for review, or match flagged players separately, without banning anyone on a single signal.

DecisionClient roleServer role
Match resultDetects memory editing and hooks during playValidates the result against game rules
Currency and rewardsDetects value tampering and speed toolsHolds the balance and grants rewards
In-app purchaseAdds integrity evidence to the requestValidates the receipt with the store
Ranked accessFlags emulators and automated inputApplies matchmaking rules

The wider sector picture is covered on mobile game security.

Performance

Start-up and frame timing

Players notice hitches before they notice anything else. Otukan schedules runtime checks to respect your frame budget, keeping them off the render loop’s critical path. Measure a protected build against a baseline from the same commit: cold start, time to first interactive scene, and frame-time distribution in your heaviest scene, on the low-end and mid-range devices your players really use.

Crash diagnosis

IL2CPP crash reports need native symbols: the symbols package Unity produces for Android and the dSYMs for UnityFramework on iOS. Otukan keeps both valid for protected builds, so your crash tool reads them as before. Force a crash in a protected build on each platform to confirm it. How to measure a protected build is covered on mobile app protection performance.

For how games fit Otukan’s wider protection model, return to mobile app security. A published game can start with a free App Exposure Check of its store build.

Common questions

  • Is IL2CPP enough to stop reverse engineering?

    IL2CPP makes analysis harder than Mono, because game code becomes native machine code. The build also ships a metadata file that maps functions back to class and method names, and public tools use it to rebuild much of the structure. Otukan protects that metadata and hardens the native code, so reaching your game logic becomes slower and costlier.

  • Can client-side protection alone stop cheating?

    It raises the cost of cheating and tells you who is trying. Decisions with real value, such as currency balances, match results and purchase validation, belong on your servers. Otukan protects the client and sends its signals to those servers, so they can reject impossible results, hold rewards for review or place suspicious players in separate matchmaking.

  • Will protection affect frame rate?

    Otukan schedules runtime checks so that they avoid the render loop's critical path, and we measure protected builds against a baseline on your target devices before release. Frame timing depends on your game and your device mix, so the comparison is always made with your own scenes rather than with a generic figure.

Keep your game fair and your economy intact

Tell us your Unity version, scripting backend per platform, the native plugins and SDKs you ship, and which game economy or competitive flows matter most. We never ask for source code, binaries, keystores or production credentials.

Or request a technical demo