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