TSVIPHookFuntion.h 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. #pragma once
  2. #include <Windows.h>
  3. #include "TSRuntime.h"
  4. //XP系统下挂钩位置偏移
  5. //77D184AE __stdcall NtUserCallOneParam(x, x)
  6. #define NtUserCallOneParam_XPOffset 0x84AE
  7. //77D298A6 __stdcall NtUserGetThreadState(x)
  8. #define NtUserGetThreadState_XPOffset 0x198A6
  9. //77D29F5E __stdcall NtUserGetKeyState(x)
  10. #define NtUserGetKeyState_XPOffset 0x19F5E
  11. //77D2A822 __stdcall NtUserGetAsyncKeyState
  12. #define NtUserGetAsyncKeyState_XPOffset 0x1A822
  13. //77D2A93A __stdcall NtUserCallTwoParam(x, x, x)
  14. #define NtUserCallTwoParam_XPOffset 0x1A93A
  15. //77D184AE __stdcall NtUserCallOneParam(x, x)
  16. #define NtUserCallOneParam_Win2003Offset 0x1b626
  17. //77D298A6 __stdcall NtUserGetThreadState(x)
  18. #define NtUserGetThreadState_Win2003Offset 0x1cb3c
  19. //77D29F5E __stdcall NtUserGetKeyState(x)
  20. #define NtUserGetKeyState_Win2003Offset 0x16348
  21. //77D2A822 __stdcall NtUserGetAsyncKeyState
  22. #define NtUserGetAsyncKeyState_Win2003Offset 0xED3A
  23. //77D2A93A __stdcall NtUserCallTwoParam(x, x, x)
  24. #define NtUserCallTwoParam_Win2003Offset 0x755F
  25. //WIN7X86系统下挂钩位置偏移
  26. //77D184AE __stdcall NtUserCallOneParam(x, x)
  27. #define NtUserCallOneParam_WIN7X86Offset 0x1D8F7
  28. //77D298A6 __stdcall NtUserGetThreadState(x)
  29. #define NtUserGetThreadState_WIN7X86Offset 0x13A20
  30. //77D29F5E __stdcall NtUserGetKeyState(x)
  31. #define NtUserGetKeyState_WIN7X86Offset 0x12D17
  32. //77D2A822 __stdcall NtUserGetAsyncKeyState
  33. #define NtUserGetAsyncKeyState_WIN7X86Offset 0xA2F4
  34. //77D2A93A __stdcall NtUserCallTwoParam(x, x, x)
  35. #define NtUserCallTwoParam_WIN7X86Offset 0xDBCC
  36. //WIN8X86系统下挂钩位置偏移
  37. //77D184AE __stdcall NtUserCallOneParam(x, x)
  38. #define NtUserCallOneParam_WIN8X86Offset 0x7470
  39. //77D2A93A __stdcall NtUserCallTwoParam(x, x, x)
  40. #define NtUserCallTwoParam_WIN8X86Offset 0x8FA7
  41. //77D298A6 __stdcall NtUserGetThreadState(x)
  42. #define NtUserGetThreadState_WIN8X86Offset 0xb9d7
  43. //77D29F5E __stdcall NtUserGetKeyState(x)
  44. #define NtUserGetKeyState_WIN8X86Offset 0x24F08
  45. //77D2A822 __stdcall NtUserGetAsyncKeyState
  46. #define NtUserGetAsyncKeyState_WIN8X86Offset 0xC08D
  47. //WIN7X64系统下挂钩位置偏移
  48. //77D184AE __stdcall NtUserCallOneParam(x, x)
  49. //#define NtUserCallOneParam_WIN7X64Offset 0x160cd
  50. //77D298A6 __stdcall NtUserGetThreadState(x)
  51. #define NtUserGetThreadState_WIN7X64Offset 0x20DCE
  52. //77D29F5E __stdcall NtUserGetKeyState(x)
  53. #define NtUserGetKeyState_WIN7X64Offset 0x229AE
  54. //77D2A822 __stdcall NtUserGetAsyncKeyState
  55. #define NtUserGetAsyncKeyState_WIN7X64Offset 0x3EC48
  56. //77D2A93A __stdcall NtUserCallTwoParam(x, x, x)
  57. #define NtUserCallTwoParam_WIN7X64Offset 0x17426
  58. //WIN8X64系统下挂钩位置偏移
  59. //77D184AE __stdcall NtUserCallOneParam(x, x)
  60. //#define NtUserCallOneParam_WIN7X64Offset 0x160cd
  61. //77D298A6 __stdcall NtUserGetThreadState(x)
  62. #define NtUserGetThreadState_WIN8X64Offset 0x8040
  63. //77D29F5E __stdcall NtUserGetKeyState(x)
  64. #define NtUserGetKeyState_WIN8X64Offset 0x9c12
  65. //77D2A822 __stdcall NtUserGetAsyncKeyState
  66. #define NtUserGetAsyncKeyState_WIN8X64Offset 0x17ad5
  67. //77D2A93A __stdcall NtUserCallTwoParam(x, x, x)
  68. #define NtUserCallTwoParam_WIN8X64Offset 0x8012
  69. DWORD EAX_NtUserCallOneParam = 0;
  70. DWORD EAX_NtUserGetThreadState = 0;
  71. DWORD EAX_NtUserGetKeyState = 0;
  72. DWORD EAX_NtUserGetAsyncKeyState = 0;
  73. DWORD EAX_NtUserCallTwoParam = 0;
  74. DWORD NtUserCallOneParamRet = 0;
  75. DWORD NtUserGetThreadStateRet = 0;
  76. DWORD NtUserGetKeyStateRet = 0;
  77. DWORD NtUserGetAsyncKeyStateRet = 0;
  78. DWORD NtUserCallTwoParamRet = 0;
  79. BYTE NtUserCallOneParamUnhookByte[5] = { 0 };
  80. BYTE NtUserGetThreadStateUnhookByte[5] = { 0 };
  81. BYTE NtUserGetKeyStateUnhookByte[5] = { 0 };
  82. BYTE NtUserGetAsyncKeyStateUnhookByte[5] = { 0 };
  83. BYTE NtUserCallTwoParamUnhookByte[5] = { 0 };
  84. void VIPHookandUnhookAPI(void* para);
  85. __declspec(naked) ULONG __stdcall NtUserCallOneParam(DWORD Param, DWORD Routine)
  86. {
  87. _asm {
  88. mov eax, EAX_NtUserCallOneParam
  89. //mov eax,0x1143
  90. jmp NtUserCallOneParamRet
  91. ret
  92. }
  93. }
  94. __declspec(naked) ULONG_PTR __stdcall NtUserGetThreadState(DWORD Routine)
  95. {
  96. _asm {
  97. mov eax, EAX_NtUserGetThreadState
  98. jmp NtUserGetThreadStateRet
  99. ret
  100. }
  101. }
  102. __declspec(naked) SHORT __stdcall NtUserGetKeyState(int nVirtKey)
  103. {
  104. _asm {
  105. mov eax, EAX_NtUserGetKeyState
  106. jmp NtUserGetKeyStateRet
  107. ret
  108. }
  109. }
  110. __declspec(naked) SHORT __stdcall NtUserGetAsyncKeyState(int nVirtKey)
  111. {
  112. _asm {
  113. mov eax, EAX_NtUserGetAsyncKeyState
  114. jmp NtUserGetAsyncKeyStateRet
  115. ret
  116. }
  117. }
  118. __declspec(naked) ULONG __stdcall NtUserCallTwoParam(DWORD Param1, DWORD Param2, DWORD Routine)
  119. {
  120. _asm {
  121. mov eax, EAX_NtUserCallTwoParam
  122. jmp NtUserCallTwoParamRet
  123. ret
  124. }
  125. }