Before I tried to hook the entry in my iat, which obviously leads to various dumb failures...
85 lines
2.3 KiB
C++
85 lines
2.3 KiB
C++
#include <Windows.h>
|
|
#include <iostream>
|
|
#include <iomanip>
|
|
#include <cstdint>
|
|
#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);
|
|
} |