URKit++ is a fork of
URKit that adds deobfuscation support:
it can read a DeobfuscationMap.json, load custom export-name maps for
UnityPlayer, and dump rename maps from live IL2CPP metadata. Everything from
upstream URKit (Unity object access, managed calls, hooks, lifecycle, network,
ImGui) works the same.
- Deobfuscation map (
URKit\DeobfuscationMap.json): maps obfuscated IL2CPP class and member names back to their readable names. The loader loads it at backend start, and every lookup (find class, method, field, and the generated SDK helpers) resolves through it, so mods can use real names likeToolTipinstead ofMonoBehaviourPublicIPointerEnterHandler...Unique. See docs/example_deobfuscation_map.json. - UnityPlayer export map (
URKit\UnityPlayerExports.txt): custom export-name file so IL2CPP binding still works when the game's export names are obfuscated ([N] obfuscated = real_il2cpp_name, format in docs/example_exports.txt). When present, export resolution goes through the map instead of exact-name matching. - Rename-map dumper (
AutoDump=1inURKit_config.ini): at startup the loader writesURKit\Dumps\DeobfuscationMap.json.dump,.readable, and.beebyte.csv(a Beebyte-compatible CSV you can feed back into the map). - On-the-fly name recovery: even without a map, the loader builds readable
structural names at launch (
StructuralNames=1) and recovers Beebyte accessor-leak pairs (AccessorLeaks=1). Both default on. - Reverse name lookups:
find_class/AddComponentresolve deobfuscated names to the runtime's obfuscated metadata key, so component-by-real-name works even for classes only described by the map. - Reflection DSL in generated projects: the generated Unity SDK ships the
IL2CPP-SDK
MethodHandler/ClassResolverreflection API — cachedResolvedMethodhandles (MethodHandler::resolve/invoke), and the fluentClassResolverquery DSL (field()/method()/property()/counter()/collector()withtoOffset/toPtr/required), working on both Mono and IL2CPP. Details below.
Example symbol file: docs/example_symbols.json.
The underlying toolkit is URKit: a native C++ modding toolkit for Windows x64 Unity games. It supports Mono and IL2CPP through one loader ABI, and gives you Unity object access, managed method calls, hooks, lifecycle callbacks, networking, and an ImGui overlay, generated straight into a buildable CMake project.
urk-sdk.exe: generates a Mono or IL2CPP mod project.urk-updater.exe: updates a generated project without touching your own files.version.dll,winhttp.dll,winmm.dll: proxy loaders. Install the one the game actually imports.URKitInjector.dll: a proxy-free loader for manual injection workflows.urk-dev-mcp.exe+URKitDevBridge.dll: optional MCP server for AI coding assistants (build, deploy, runtime diagnostics).
Put the proxy DLL next to the game executable, and built mods in the game's
Mods directory. Only install one proxy, and don't rename it.
The generated Unity SDK now ships the IL2CPP-SDK reflection DSL, working on
both Mono and IL2CPP backends through one backend-neutral detail::Backend.
MethodHandlerwithResolvedMethod: resolve a managed method once from a dot-qualified class name (MethodHandler::resolve("UnityEngine.Time", "get_deltaTime")or the exact-signature form), cache the handle, and invoke it per frame withinvoke_raw/invoke<T>for statics or a target for instance calls — no repeated metadata walks.ClassResolver: a fluent query builder over a single class handle that validates against live metadata and captures offsets, raw handles, and native method pointers. Starts from a handle or by name, then chainsfield(),method(),property(),counter(), andcollector()queries withbyName/byTypeName/byType,required(),toOffset(),toPtr(),toName(),toGetter()/toSetter(), andcollectAll()/toPtrList(). Options like.field().byName("m_OnClick").required().toOffset(off).toPtr(p)mirror the SDK'sFieldQuery/MethodQuery/PropertyQuery/FieldCounter/IndexedFieldCollectorAPI.validate()reports required-member misses,resolvePartial()applies whatever matched, andmissReport()returns the failures.SetResolverTrace(fn): install a callback to log each resolver's validation/iteration steps for debugging.
Deobfuscation-aware name resolution and the SDK's SEH guards are handled by
the existing deobfuscation pipeline rather than replicated inside the DSL;
deobfuscate() is accepted for API parity but registers nothing. Full guide:
docs/REFLECTION_DSL.md.
./urk-sdk.exe --game-exe C:\Games\Example\Example.exe --backend auto --name MyMod
cd <GameDir>\urk-sdk-output\MyMod\project
cmake --preset clang-debug
cmake --build --preset clang-debug --parallelThat builds a debug DLL and drops it in the game's Mods directory. You need
CMake 3.28+, Ninja, and either LLVM/Clang or the MSVC toolchain (VS 2022 Build
Tools or newer). Use clang-release / msvc-release when you're ready to
ship, and msvc-debug if you'd rather build with cl.exe.
Launch the game and check URKit_logs.log next to the executable. You
should see the mod initialize. If that file doesn't exist, the game isn't
importing the proxy you installed.
New to URKit? Start with Getting Started. It walks through writing an actual mod, from "hello log" to reading and changing game state, step by step.
For a video walkthrough, check out the URKit SDK Tutorial Series.
Once you know the basics, docs/SDK_HANDBOOK.md is the full reference: object search, threading rules, hooks, the render/highlight pipeline, caching, and a diagnostics chapter for when something doesn't work. ARCHITECTURE.md covers how URKit itself is put together, and docs/DEV_MCP.md covers the AI-assistant MCP server.
Updating an existing project, migrating a hand-patched SDK, or automating the updater from a script: that's all in the handbook's first chapter.
The proxy loaders and URKitInjector.dll load into a game process and can
install API hooks, which is normal mod-loader behavior, but it can trip
antivirus heuristics. A detection alone doesn't mean a release is malicious.
Only download releases from this repository, and check the published SHA-256 digest. Release binaries are self-signed for tamper identification, not as a trust signal: Windows won't trust that certificate by default. Don't disable your antivirus to run URKit. If you get a false positive, report it to the vendor (or open an issue here) with the detection name, the file, and its SHA-256 digest.
URKit is available under the MIT License.
