您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

90 行
2.4KB

  1. #include <cstdint>
  2. #include <iostream>
  3. #include <iomanip>
  4. #include "typedefs.h"
  5. #include "..\third_party\minhook\include\minhook.h"
  6. #include "abstracthook.h"
  7. #include "minhook.h"
  8. static auto initalized = MH_Initialize();
  9. static TypeSmall trueSmall = nullptr;
  10. static TypeBranch trueBranch = nullptr;
  11. static TypeRip_relative trueRip_Relative = nullptr;
  12. static TypeAVX trueAVX = nullptr;
  13. static TypeRDRAND trueRDRAND = nullptr;
  14. static TypeLoop trueLoop = nullptr;
  15. static TypeTailRecursion trueTailRecursion = nullptr;
  16. AbstractHookEngine* g_MinHook = new MinHook();
  17. uint64_t MinHook_Hooks::hookSmall(void) {
  18. g_MinHook->small_ = true;
  19. return trueSmall();
  20. }
  21. uint64_t MinHook_Hooks::hookBranch(uint64_t x) {
  22. g_MinHook->branch = true;
  23. return trueBranch(x);
  24. }
  25. uint64_t MinHook_Hooks::hookRip_relative(void) {
  26. g_MinHook->rip_relative = true;
  27. return trueRip_Relative();
  28. }
  29. void MinHook_Hooks::hookAVX(float num, void* res) {
  30. g_MinHook->avx = true;
  31. return trueAVX(num, res);
  32. }
  33. uint32_t MinHook_Hooks::hookRDRAND(void) {
  34. g_MinHook->rdrand = true;
  35. return trueRDRAND();
  36. }
  37. uint32_t MinHook_Hooks::hookLoop(uint32_t x) {
  38. g_MinHook->loop = true;
  39. return trueLoop(x);
  40. }
  41. uint32_t MinHook_Hooks::hookTail_recursion(uint32_t x) {
  42. g_MinHook->tail_recursion = true;
  43. return trueTailRecursion(x);
  44. }
  45. bool MinHook::hook_all(void) {
  46. bool ret0 = MH_CreateHook(getSmall(), &MinHook_Hooks::hookSmall, (LPVOID*)&trueSmall) == MH_OK;
  47. bool ret1 = MH_CreateHook(getBranch(), &MinHook_Hooks::hookBranch, (LPVOID*)&trueBranch) == MH_OK;
  48. bool ret2 = MH_CreateHook(getRipRelative(), &MinHook_Hooks::hookRip_relative, (LPVOID*)&trueRip_Relative) == MH_OK;
  49. bool ret3 = MH_CreateHook(getAVX(), &MinHook_Hooks::hookAVX, (LPVOID*)&trueAVX) == MH_OK;
  50. bool ret4 = MH_CreateHook(getRDRAND(), &MinHook_Hooks::hookRDRAND, (LPVOID*)&trueRDRAND) == MH_OK;
  51. //bool ret5 = MH_CreateHook(getLoop(), &MinHook_Hooks::hookLoop, (LPVOID*)&trueLoop) == MH_OK;
  52. bool ret6 = MH_CreateHook(getTailRecursion(), &MinHook_Hooks::hookTail_recursion, (LPVOID*)&trueTailRecursion) == MH_OK;
  53. bool ret7 = MH_EnableHook(MH_ALL_HOOKS) == MH_OK;
  54. return ret0;
  55. }
  56. bool MinHook::unhook_all() {
  57. return MH_DisableHook(MH_ALL_HOOKS) == MH_OK &&
  58. MH_RemoveHook(&_small) == MH_OK &&
  59. MH_RemoveHook(&_branch) == MH_OK &&
  60. MH_RemoveHook(&rip_relative) == MH_OK &&
  61. MH_RemoveHook(&_AVX) == MH_OK &&
  62. MH_RemoveHook(&_RDRAND) == MH_OK &&
  63. MH_RemoveHook(&_loop) == MH_OK &&
  64. MH_RemoveHook(&_tail_recursion) == MH_OK;
  65. }