|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- #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 ret = MH_CreateHook(&_small, &MinHook_Hooks::hookSmall, (LPVOID*)&trueSmall) == MH_OK;
- ret |= MH_CreateHook(&_branch, &MinHook_Hooks::hookBranch, (LPVOID*)&trueBranch) == MH_OK;
- ret |= MH_CreateHook(&rip_relative, &MinHook_Hooks::hookRip_relative, (LPVOID*)&trueRip_Relative) == MH_OK;
-
- ret |= MH_CreateHook(&_AVX, &MinHook_Hooks::hookAVX, (LPVOID*)&trueAVX) == MH_OK;
- ret |= MH_CreateHook(&_RDRAND, &MinHook_Hooks::hookRDRAND, (LPVOID*)&trueRDRAND) == MH_OK;
-
- ret |= MH_CreateHook(&_loop, &MinHook_Hooks::hookLoop, (LPVOID*)&trueLoop) == MH_OK;
- ret |= MH_CreateHook(&_tail_recursion, &MinHook_Hooks::hookTail_recursion, (LPVOID*)&trueTailRecursion) == MH_OK;
-
- ret |= MH_EnableHook(MH_ALL_HOOKS) == MH_OK;
-
- return ret;
- }
-
- 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;
- }
|