Warning
Notice of Deprecation (Effective Immediately)
Since I've noticed alot of *kebi pastes after open sourcing this project and other great people like rumi have published their blog (it would hand hold you until a certain point) recently alot of exit scam cheetos popped up out of nowhere from Indonesians,etc I've decided to deprecate this project in favor of not making gi a mainstream you guys have fun until MHY changes something you're on your own now
- I won't be sharing any offsets anymore
- I won't maintain the public repo anymore (but that doesn't mean i won't update it for my personal use)
- I won't be accepting any kind of issue or fix
A modern, configurable MHY0 IL2CPP dumper with clean architecture and versioned offset support.
EclipseDumper extracts C#-style type and method definitions from IL2CPP titles. It is built to be:
- Extensible for different games/engines.
- Maintainable with clear separation of concerns and proper abstraction layers.
- Configurable via per-title JSON (no rebuild required to change offsets/behavior).
Educational and research purposes only. You are responsible for how you use this software.
- C# definition output (classes, fields, methods).
- Optional
script.jsonfor IDA-friendly naming. - Per-title JSON configuration: offsets, detection, behavior flags.
- Full or short type names switchable at runtime (
useFullNames). - Static-linked IL2CPP support in main executable (
useMainModule).
Source/Core— configuration, factories, and engine-agnostic interfaces.Source/Engines/Il2Cpp— IL2CPP-specific implementation (API wrappers and renderers).- Clean layering:
Configuration→EngineFactory→IDumperEngine→ renderer. - Modern C++ practices, consistent naming, minimal but clear comments.
- Open the solution in Visual Studio (x64, Debug/Release).
- Build the
EclipseDumperproject.
- Prepare a JSON config for your target under the app directory (e.g.,
HNA.json). - Launch the target game. Inject the built DLL using your preferred injector.
- Wait until the game reaches a stable point (e.g., login screen), then trigger the dump (follow your injector’s hotkey/console prompt).
Notes:
- Do not trigger too early; IL2CPP may not be initialized yet.
- If the game statically links IL2CPP (no
GameAssembly.dll), setuseMainModule: true.
EclipseDumper loads a per-title JSON file describing engine offsets and behavior. Example:
{
"gameName": "HNA",
"version": "0.3.0",
"engineId": "il2cpp",
"moduleNames": ["GameAssembly.dll"],
"processNames": ["NexusAnima.exe"],
"outputFilePrefix": "HNA",
"generateScriptJson": false,
"maxTypeProbeCount": 2000000,
"useFullNames": false,
"useMainModule": true,
"GetTypeInfoFromTypeDefinitionIndex": "0x1000000",
"ClassGetName": "0x1010000",
"ClassGetNamespace": "0x1010010",
"ClassGetMethods": "0x1010020",
"ClassGetFields": "0x1010030",
"ClassGetFlags": "0x1010040",
"ClassGetType": "0x1010050",
"ClassGetParent": "0x1010060",
"ClassIsEnum": "0x1010070",
"ClassGetInterfaces": "0x1010080",
"ClassFromName": "0x1010090",
"ClassGetMethodFromName": "0x0",
"ClassInit": "0x1020000",
"FromIl2CppType": "0x1030000",
"MethodGetName": "0x1100000",
"MethodGetReturnType": "0x1100010",
"MethodGetParamCount": "0x1100020",
"MethodGetParam": "0x1100030",
"MethodGetParamName": "0x1100040",
"MethodPointer": "0",
"MethodGetFlags": "54",
"FieldGetName": "0x1200000",
"FieldGetType": "0x1200010",
"FieldGetFlags": "0x1200020",
"FieldGetOffset": "0x1200030",
"FieldStaticGetValue": "0x1200040",
"TypeGetName": "0x1300000",
"ClassIsValueType": "0x1300010",
"RuntimeClassInit": "0x1400000",
"VmClassInit": "0x1400010",
"ThreadAttach": "0x1400020",
"VmArrayNew": "0x1400030",
"ObjectNew": "0x1400040",
"RuntimeInvoke": "0x1400050",
"DomainGet": "0x1500000",
"DomainGetAssemblies": "0x1500010",
"DomainAssemblyOpen": "0x1500020",
"AssemblyGetImage": "0x1500030",
"GcDisable": "0x1600000"
}Guidance:
useFullNames: print fully-qualified names viaTypeGetName; otherwise use short class names.useMainModule: if true, RVAs are computed from the main EXE (GetModuleHandleA(nullptr)) for static-linked titles. Otherwise,GameAssembly.dllis used.MethodPointerandMethodGetFlagsare byte offsets withinIl2CppMethod(not addresses).MethodGetFlagsaccepts hex ("0x..") or quoted decimal (e.g. "54").- btw, you can add more apis it isn't limited in anyway
Pull requests are welcome. Keep changes aligned with the architecture.
DM me on discord
soon™- sorry i scraped the idea i might think about it later
BTC:
bc1qgtyshk3pufytrt8stqj8r2gk7lghgqvh84ywlf
BCH:
qq7yc6qygmhnqucuf63s4l3tmj6pz8kaev892cu5hu
ETH(BNB):
0x94260c7F0D977076aac9D1BafA060f7513B9Ee4C
Stellar:
GARG2WCHYK55PUR44PJJNK5EFG32DBSM6IEA2JYA7XLW2QBDZYGTU4Y3
MIT. See LICENSE.