|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- #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 = &_small;
- static TypeBranch trueBranch = &_branch;
- static TypeRip_relative trueRip_Relative = &_rip_relative;
- static TypeAVX trueAVX = &_AVX;
- static TypeRDRAND trueRDRAND = &_RDRAND;
- static TypeLoop trueLoop = &_loop;
- static TypeTailRecursion trueTailRecursion = &_tail_recursion;
-
- 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);
- }
|