#include #include #include #include "typedefs.h" #include "..\third_party\minhook\include\minhook.h" #include "abstracthook.h" #include "minhook.h" static auto initalized = MH_Initialize(); static TypeSmall trueSmall = nullptr; static TypeBranch trueBranch = nullptr; static TypeRip_relative trueRip_Relative = nullptr; static TypeAVX trueAVX = nullptr; static TypeRDRAND trueRDRAND = nullptr; static TypeLoop trueLoop = nullptr; static TypeTailRecursion trueTailRecursion = nullptr; AbstractHookEngine* g_MinHook = new MinHook(); uint64_t MinHook_Hooks::hookSmall(void) { g_MinHook->small_ = true; return trueSmall(); } uint64_t MinHook_Hooks::hookBranch(uint64_t x) { g_MinHook->branch = true; return trueBranch(x); } uint64_t MinHook_Hooks::hookRip_relative(void) { g_MinHook->rip_relative = true; return trueRip_Relative(); } void MinHook_Hooks::hookAVX(float num, void* res) { g_MinHook->avx = true; return trueAVX(num, res); } uint32_t MinHook_Hooks::hookRDRAND(void) { g_MinHook->rdrand = true; return trueRDRAND(); } uint32_t MinHook_Hooks::hookLoop(uint32_t x) { g_MinHook->loop = true; return trueLoop(x); } uint32_t MinHook_Hooks::hookTail_recursion(uint32_t x) { g_MinHook->tail_recursion = true; return trueTailRecursion(x); } bool MinHook::hook_all(void) { bool ret0 = MH_CreateHook(getSmall(), &MinHook_Hooks::hookSmall, (LPVOID*)&trueSmall) == MH_OK; bool ret1 = MH_CreateHook(getBranch(), &MinHook_Hooks::hookBranch, (LPVOID*)&trueBranch) == MH_OK; bool ret2 = MH_CreateHook(getRipRelative(), &MinHook_Hooks::hookRip_relative, (LPVOID*)&trueRip_Relative) == MH_OK; bool ret3 = MH_CreateHook(getAVX(), &MinHook_Hooks::hookAVX, (LPVOID*)&trueAVX) == MH_OK; bool ret4 = MH_CreateHook(getRDRAND(), &MinHook_Hooks::hookRDRAND, (LPVOID*)&trueRDRAND) == MH_OK; //bool ret5 = MH_CreateHook(getLoop(), &MinHook_Hooks::hookLoop, (LPVOID*)&trueLoop) == MH_OK; bool ret6 = MH_CreateHook(getTailRecursion(), &MinHook_Hooks::hookTail_recursion, (LPVOID*)&trueTailRecursion) == MH_OK; bool ret7 = MH_EnableHook(MH_ALL_HOOKS) == MH_OK; return ret0; } bool MinHook::unhook_all() { return MH_DisableHook(MH_ALL_HOOKS) == MH_OK && MH_RemoveHook(&_small) == MH_OK && MH_RemoveHook(&_branch) == MH_OK && MH_RemoveHook(&rip_relative) == MH_OK && MH_RemoveHook(&_AVX) == MH_OK && MH_RemoveHook(&_RDRAND) == MH_OK && MH_RemoveHook(&_loop) == MH_OK && MH_RemoveHook(&_tail_recursion) == MH_OK; }