You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
2.1KB

  1. #include <Windows.h>
  2. #include <cstdint>
  3. #include "../third_party/mhook/mhook-lib/mhook.h"
  4. #include "typedefs.h"
  5. #include "abstracthook.h"
  6. #include "mhook.h"
  7. #pragma comment(lib, "..\\x64\\debug\\test_cases.lib")
  8. static TypeSmall trueSmall = &_small;
  9. static TypeBranch trueBranch = &_branch;
  10. static TypeRip_relative trueRip_Relative = &_rip_relative;
  11. static TypeAVX trueAVX = &_AVX;
  12. static TypeRDRAND trueRDRAND = &_RDRAND;
  13. static TypeLoop trueLoop = &_loop;
  14. static TypeTailRecursion trueTailRecursion = &_tail_recursion;
  15. AbstractHookEngine* g_mhook = new MHook();
  16. uint64_t MHook_Hooks::hookSmall(void) {
  17. g_mhook->small_ = true;
  18. return trueSmall();
  19. }
  20. uint64_t MHook_Hooks::hookBranch(uint64_t x) {
  21. g_mhook->branch = true;
  22. return trueBranch(x);
  23. }
  24. uint64_t MHook_Hooks::hookRip_relative(void) {
  25. g_mhook->rip_relative = true;
  26. return trueRip_Relative();
  27. }
  28. void MHook_Hooks::hookAVX(float num, void* res) {
  29. g_mhook->avx = true;
  30. return trueAVX(num, res);
  31. }
  32. uint32_t MHook_Hooks::hookRDRAND(void) {
  33. g_mhook->rdrand = true;
  34. return trueRDRAND();
  35. }
  36. uint32_t MHook_Hooks::hookLoop(uint32_t num, uint32_t cnt) {
  37. g_mhook->loop = true;
  38. return trueLoop(num, cnt);
  39. }
  40. uint32_t MHook_Hooks::hookTail_recursion(uint32_t x) {
  41. g_mhook->tail_recursion = true;
  42. return trueTailRecursion(x);
  43. }
  44. bool MHook::hook_all(void) {
  45. bool ret = Mhook_SetHook((PVOID*)&trueSmall, &MHook_Hooks::hookSmall);
  46. ret |= Mhook_SetHook((PVOID*)&trueBranch, &MHook_Hooks::hookBranch);
  47. ret |= Mhook_SetHook((PVOID*)&trueRip_Relative, &MHook_Hooks::hookRip_relative);
  48. ret |= Mhook_SetHook((PVOID*)&trueAVX, &MHook_Hooks::hookAVX);
  49. ret |= Mhook_SetHook((PVOID*)&trueRDRAND, &MHook_Hooks::hookRDRAND);
  50. ret |= Mhook_SetHook((PVOID*)&trueLoop, &MHook_Hooks::hookLoop);
  51. ret |= Mhook_SetHook((PVOID*)&trueTailRecursion, &MHook_Hooks::hookTail_recursion);
  52. return ret;
  53. }
  54. bool MHook::unhook_all() {
  55. return Mhook_Unhook((PVOID*)&trueSmall) &&
  56. Mhook_Unhook((PVOID*)&trueBranch) &&
  57. Mhook_Unhook((PVOID*)&trueAVX) &&
  58. Mhook_Unhook((PVOID*)&trueRDRAND) &&
  59. Mhook_Unhook((PVOID*)&trueLoop) &&
  60. Mhook_Unhook((PVOID*)&trueTailRecursion);
  61. }