Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
eb5e229
Update SystemTypeCache.hpp
Kol0vratT Jan 17, 2026
b610b30
Update IL2CPP_Resolver.hpp
Kol0vratT Jan 17, 2026
94dab28
Update Defines.hpp
Kol0vratT Jan 17, 2026
81a4ce3
Update Data.hpp
Kol0vratT Jan 17, 2026
75cd160
Update VTable.hpp
Kol0vratT Jan 17, 2026
7f9c1f2
Update Helper.hpp
Kol0vratT Jan 17, 2026
84b92ab
Update Hash.hpp
Kol0vratT Jan 17, 2026
3170e11
Update Callback.hpp
Kol0vratT Jan 17, 2026
fa8d657
Update Class.hpp
Kol0vratT Jan 17, 2026
a341cfb
Update Domain.hpp
Kol0vratT Jan 17, 2026
e3d0c07
Update ResolveCall.hpp
Kol0vratT Jan 17, 2026
29c9386
Update Defines.hpp
Kol0vratT Jan 17, 2026
475f7c5
Update Obfuscators.hpp
Kol0vratT Jan 17, 2026
a7487a3
Update Camera.hpp
Kol0vratT Jan 17, 2026
13d986f
Update Component.hpp
Kol0vratT Jan 17, 2026
fcf4e4e
Update GameObject.hpp
Kol0vratT Jan 17, 2026
12db821
Update LayerMask.hpp
Kol0vratT Jan 17, 2026
712c6ef
Update Object.hpp
Kol0vratT Jan 17, 2026
3c46159
Update Rigidbody.hpp
Kol0vratT Jan 17, 2026
2b8c70f
Update Transform.hpp
Kol0vratT Jan 17, 2026
5183fde
Update README.md
Kol0vratT Jan 17, 2026
1995bf1
Update README.md
Kol0vratT Jan 17, 2026
d650343
Update README.md
Kol0vratT Jan 17, 2026
a7b1a1d
Update Defines.hpp
Kol0vratT Jan 23, 2026
774593c
Add files via upload
Kol0vratT Jan 23, 2026
c2948b2
Update IL2CPP_Resolver.hpp
Kol0vratT Jan 23, 2026
14a86ce
Update README.md
Kol0vratT Jan 26, 2026
36a0ecd
Update README.md
Kol0vratT Jan 26, 2026
7c10316
Update README.md
Kol0vratT Feb 16, 2026
fe917ac
Update IL2CPP_Resolver.hpp
Kol0vratT Feb 16, 2026
16d298d
Update Class.hpp
Kol0vratT Feb 16, 2026
540eeb2
Update Domain.hpp
Kol0vratT Feb 16, 2026
b147331
Update ResolveCall.hpp
Kol0vratT Feb 16, 2026
765b837
Update String.hpp
Kol0vratT Feb 16, 2026
467310e
Update Thread.hpp
Kol0vratT Feb 16, 2026
7251a34
Update Defines.hpp
Kol0vratT Feb 16, 2026
31e3e9e
Update Application.hpp
Kol0vratT Feb 16, 2026
bdeb346
Update Camera.hpp
Kol0vratT Feb 16, 2026
be7fc01
Update Component.hpp
Kol0vratT Feb 16, 2026
a356426
Create Cursor.hpp
Kol0vratT Feb 16, 2026
d4afddf
Update Debug.hpp
Kol0vratT Feb 16, 2026
c830a5c
Update GameObject.hpp
Kol0vratT Feb 16, 2026
d5dd267
Create Input.hpp
Kol0vratT Feb 16, 2026
7c67814
Update LayerMask.hpp
Kol0vratT Feb 16, 2026
5075083
Update Object.hpp
Kol0vratT Feb 16, 2026
5080786
Update RenderSettings.hpp
Kol0vratT Feb 16, 2026
61af4aa
Update Rigidbody.hpp
Kol0vratT Feb 16, 2026
54fbefc
Update SceneManager.hpp
Kol0vratT Feb 16, 2026
929f661
Create Screen.hpp
Kol0vratT Feb 16, 2026
be24f77
Update Time.hpp
Kol0vratT Feb 16, 2026
01c9903
Update Transform.hpp
Kol0vratT Feb 16, 2026
0a98915
Update Engine.hpp
Kol0vratT Feb 16, 2026
d085302
Update README.md
Kol0vratT Feb 21, 2026
f3ae953
Rework resolver internals and add sample DLL
Kol0vratT Mar 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
/.vs/
**/.vs/
**/bin/
**/obj/
*.user
*.suo
*.VC.db
*.VC.opendb
67 changes: 43 additions & 24 deletions API/Callback.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,14 @@ namespace IL2CPP
{
namespace OnUpdate
{
CallbackHook_t m_CallbackHook;
inline CallbackHook_t m_CallbackHook;

void Add(void* m_pFunction)
{
inline void Add(void* m_pFunction)
{
m_CallbackHook.m_Funcs.emplace_back(m_pFunction);
}

void __fastcall Hook(void* rcx)
inline void __fastcall Hook(void* rcx)
{
for (void* m_Func : m_CallbackHook.m_Funcs)
reinterpret_cast<void(*)()>(m_Func)();
Expand All @@ -32,14 +32,14 @@ namespace IL2CPP

namespace OnLateUpdate
{
CallbackHook_t m_CallbackHook;
inline CallbackHook_t m_CallbackHook;

void Add(void* m_pFunction)
inline void Add(void* m_pFunction)
{
m_CallbackHook.m_Funcs.emplace_back(m_pFunction);
}

void __fastcall Hook(void* rcx)
inline void __fastcall Hook(void* rcx)
{
for (void* m_Func : m_CallbackHook.m_Funcs)
reinterpret_cast<void(*)()>(m_Func)();
Expand All @@ -48,34 +48,53 @@ namespace IL2CPP
}
}

void Initialize()
inline void Initialize()
{
void* m_IL2CPPThread = Thread::Attach(IL2CPP::Domain::Get());
IL2CPP::ScopedThreadAttachment m_Attachment;

Unity::CComponent* mb = IL2CPP::Helper::GetMonoBehaviour();
if (!mb || !mb->m_CachedPtr)
return;

// Find
void** m_MonoBehaviourVTable = *reinterpret_cast<void***>(IL2CPP::Helper::GetMonoBehaviour()->m_CachedPtr);
void** m_MonoBehaviourVTable = *reinterpret_cast<void***>(mb->m_CachedPtr);
if (m_MonoBehaviourVTable)
{
#ifdef _WIN64
OnUpdate::m_CallbackHook.m_VFunc = Utils::VTable::FindFunction(m_MonoBehaviourVTable, 99, { 0x33, 0xD2, 0xE9 }); // xor edx, edx | jmp
OnLateUpdate::m_CallbackHook.m_VFunc = Utils::VTable::FindFunction(m_MonoBehaviourVTable, 99, { 0xBA, 0x01, 0x00, 0x00, 0x00, 0xE9 }); // mov edx, 1 | jmp
// Unity versions may slightly change thunk prologues; use masked patterns + scan a wider range.
const unsigned char upd_pat1[] = { 0x33, 0xD2, 0xE9 }; // xor edx, edx | jmp
const unsigned char upd_msk1[] = { 0xFF, 0xFF, 0xFF };

const unsigned char late_pat1[] = { 0xBA, 0x01, 0x00, 0x00, 0x00, 0xE9 }; // mov edx,1 | jmp
const unsigned char late_msk1[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };

OnUpdate::m_CallbackHook.m_VFunc = Utils::VTable::FindFunctionMasked(m_MonoBehaviourVTable, 256, upd_pat1, upd_msk1, sizeof(upd_pat1));
OnLateUpdate::m_CallbackHook.m_VFunc = Utils::VTable::FindFunctionMasked(m_MonoBehaviourVTable, 256, late_pat1, late_msk1, sizeof(late_pat1));

// Fallback: original exact matcher (some titles still match)
if (!OnUpdate::m_CallbackHook.m_VFunc)
OnUpdate::m_CallbackHook.m_VFunc = Utils::VTable::FindFunction(m_MonoBehaviourVTable, 256, { 0x33, 0xD2, 0xE9 });
if (!OnLateUpdate::m_CallbackHook.m_VFunc)
OnLateUpdate::m_CallbackHook.m_VFunc = Utils::VTable::FindFunction(m_MonoBehaviourVTable, 256, { 0xBA, 0x01, 0x00, 0x00, 0x00, 0xE9 });
#elif _WIN32
OnUpdate::m_CallbackHook.m_VFunc = Utils::VTable::FindFunction(m_MonoBehaviourVTable, 99, { 0x6A, 0x00, 0xE8 }); // push 00 | call
OnLateUpdate::m_CallbackHook.m_VFunc = Utils::VTable::FindFunction(m_MonoBehaviourVTable, 99, { 0x6A, 0x01, 0xE8 }); // push 01 | call
OnUpdate::m_CallbackHook.m_VFunc = Utils::VTable::FindFunction(m_MonoBehaviourVTable, 512, { 0x6A, 0x00, 0xE8 }); // push 00 | call
OnLateUpdate::m_CallbackHook.m_VFunc = Utils::VTable::FindFunction(m_MonoBehaviourVTable, 512, { 0x6A, 0x01, 0xE8 }); // push 01 | call
#endif
}

IL2CPP::Thread::Detach(m_IL2CPPThread);

// Replace (Hook)
Utils::VTable::ReplaceFunction(OnUpdate::m_CallbackHook.m_VFunc, OnUpdate::Hook, &OnUpdate::m_CallbackHook.m_Original);
Utils::VTable::ReplaceFunction(OnLateUpdate::m_CallbackHook.m_VFunc, OnLateUpdate::Hook, &OnLateUpdate::m_CallbackHook.m_Original);
// Replace (Hook) - only if we successfully located targets
if (OnUpdate::m_CallbackHook.m_VFunc)
Utils::VTable::ReplaceFunction(OnUpdate::m_CallbackHook.m_VFunc, OnUpdate::Hook, &OnUpdate::m_CallbackHook.m_Original);
if (OnLateUpdate::m_CallbackHook.m_VFunc)
Utils::VTable::ReplaceFunction(OnLateUpdate::m_CallbackHook.m_VFunc, OnLateUpdate::Hook, &OnLateUpdate::m_CallbackHook.m_Original);
}

void Uninitialize()
inline void Uninitialize()
{
Utils::VTable::ReplaceFunction(OnUpdate::m_CallbackHook.m_VFunc, OnUpdate::m_CallbackHook.m_Original);
Utils::VTable::ReplaceFunction(OnLateUpdate::m_CallbackHook.m_VFunc, OnLateUpdate::m_CallbackHook.m_Original);
if (OnUpdate::m_CallbackHook.m_VFunc && OnUpdate::m_CallbackHook.m_Original)
Utils::VTable::ReplaceFunction(OnUpdate::m_CallbackHook.m_VFunc, OnUpdate::m_CallbackHook.m_Original);

if (OnLateUpdate::m_CallbackHook.m_VFunc && OnLateUpdate::m_CallbackHook.m_Original)
Utils::VTable::ReplaceFunction(OnLateUpdate::m_CallbackHook.m_VFunc, OnLateUpdate::m_CallbackHook.m_Original);
}
}
}
}
Loading