#include #include #include #include #include "../third_party/mhook/mhook-lib/mhook.h" #include "typedefs.h" #include "abstracthook.h" #include "mhook.h" #pragma comment(lib, "..\\x64\\debug\\test_cases.lib") static TypeSmall trueSmall = (TypeSmall)AbstractHookEngine::getSmall(); static TypeBranch trueBranch = (TypeBranch)AbstractHookEngine::getBranch(); static TypeRip_relative trueRip_Relative = (TypeRip_relative)AbstractHookEngine::getRipRelative(); static TypeAVX trueAVX = (TypeAVX)AbstractHookEngine::getAVX(); static TypeRDRAND trueRDRAND = (TypeRDRAND)AbstractHookEngine::getRDRAND(); static TypeLoop trueLoop = (TypeLoop)AbstractHookEngine::getLoop(); static TypeTailRecursion trueTailRecursion = (TypeTailRecursion)AbstractHookEngine::getTailRecursion(); AbstractHookEngine* g_mhook = new MHook(); uint64_t MHook_Hooks::hookSmall(void) { g_mhook->small_ = true; return trueSmall(); } uint64_t MHook_Hooks::hookBranch(uint64_t x) { g_mhook->branch = true; return trueBranch(x); } uint64_t MHook_Hooks::hookRip_relative(void) { g_mhook->rip_relative = true; return trueRip_Relative(); } void MHook_Hooks::hookAVX(float num, void* res) { g_mhook->avx = true; return trueAVX(num, res); } uint32_t MHook_Hooks::hookRDRAND(void) { g_mhook->rdrand = true; return trueRDRAND(); } uint32_t MHook_Hooks::hookLoop(uint32_t x) { g_mhook->loop = true; return trueLoop(x); } uint32_t MHook_Hooks::hookTail_recursion(uint32_t x) { g_mhook->tail_recursion = true; return trueTailRecursion(x); } bool MHook::hook_all(void) { bool ret = Mhook_SetHook((PVOID*)&trueSmall, &MHook_Hooks::hookSmall); ret |= Mhook_SetHook((PVOID*)&trueBranch, &MHook_Hooks::hookBranch); ret |= Mhook_SetHook((PVOID*)&trueRip_Relative, &MHook_Hooks::hookRip_relative); ret |= Mhook_SetHook((PVOID*)&trueAVX, &MHook_Hooks::hookAVX); ret |= Mhook_SetHook((PVOID*)&trueRDRAND, &MHook_Hooks::hookRDRAND); //ret |= Mhook_SetHook((PVOID*)&trueLoop, &MHook_Hooks::hookLoop); ret |= Mhook_SetHook((PVOID*)&trueTailRecursion, &MHook_Hooks::hookTail_recursion); return ret; } bool MHook::unhook_all() { return Mhook_Unhook((PVOID*)&trueSmall) && Mhook_Unhook((PVOID*)&trueBranch) && Mhook_Unhook((PVOID*)&trueAVX) && Mhook_Unhook((PVOID*)&trueRDRAND) && Mhook_Unhook((PVOID*)&trueLoop) && Mhook_Unhook((PVOID*)&trueTailRecursion); }