dllmain.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. // dllmain.cpp : 定义 DLL 应用程序的入口点。
  2. #include "stdafx.h"
  3. //https://docs.microsoft.com/zh-cn/windows/desktop/winmsg/using-hooks
  4. HHOOK ghk_CBT = NULL;
  5. HHOOK ghk_Mouse = NULL;
  6. HHOOK ghk_CallWndProc = NULL;
  7. LRESULT WINAPI CallWndProc(int, WPARAM, LPARAM);
  8. LRESULT WINAPI CBTProc(int, WPARAM, LPARAM);
  9. LRESULT WINAPI DebugProc(int, WPARAM, LPARAM);
  10. LRESULT WINAPI GetMsgProc(int, WPARAM, LPARAM);
  11. LRESULT WINAPI KeyboardProc(int, WPARAM, LPARAM);
  12. LRESULT WINAPI MouseProc(int, WPARAM, LPARAM);
  13. LRESULT WINAPI MessageProc(int, WPARAM, LPARAM);
  14. LRESULT WINAPI CallWndProc(int nCode, WPARAM wParam, LPARAM lParam)
  15. {
  16. WriteTextLog(_T("CallWndProc"));
  17. if (nCode < 0) // do not process message
  18. return CallNextHookEx(ghk_CallWndProc, nCode, wParam, lParam);
  19. switch (nCode)
  20. {
  21. case HC_ACTION:
  22. break;
  23. default:
  24. break;
  25. }
  26. return CallNextHookEx(ghk_CallWndProc, nCode, wParam, lParam);
  27. }
  28. LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
  29. {
  30. CHAR szBuf[128];
  31. CHAR szCode[128];
  32. static int c = 0;
  33. size_t cch;
  34. HRESULT hResult;
  35. WriteTextLog(_T("CBTProc"));
  36. if (nCode < 0) // do not process message
  37. return CallNextHookEx(ghk_CBT, nCode, wParam,lParam);
  38. switch (nCode)
  39. {
  40. case HCBT_ACTIVATE:
  41. break;
  42. case HCBT_CLICKSKIPPED:
  43. break;
  44. case HCBT_CREATEWND:
  45. break;
  46. case HCBT_DESTROYWND:
  47. break;
  48. case HCBT_KEYSKIPPED:
  49. break;
  50. case HCBT_MINMAX:
  51. break;
  52. case HCBT_MOVESIZE:
  53. break;
  54. case HCBT_QS:
  55. break;
  56. case HCBT_SETFOCUS:
  57. break;
  58. case HCBT_SYSCOMMAND:
  59. break;
  60. default:
  61. break;
  62. }
  63. return CallNextHookEx(ghk_CBT, nCode, wParam, lParam);
  64. }
  65. LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
  66. {
  67. CHAR szBuf[128];
  68. CHAR szMsg[16];
  69. static int c = 0;
  70. size_t cch;
  71. HRESULT hResult;
  72. if (nCode < 0) // do not process the message
  73. return CallNextHookEx(ghk_Mouse, nCode,wParam, lParam);
  74. WriteTextLog(_T("MOUSE - nCode: %d, msg: %s, x: %d, y: %d, %d times "), nCode, szMsg, LOWORD(lParam), HIWORD(lParam), c++);
  75. return CallNextHookEx(ghk_Mouse, nCode, wParam, lParam);
  76. }
  77. BOOL APIENTRY DllMain(HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
  78. {
  79. g_hCurModule = hModule;
  80. switch (ul_reason_for_call)
  81. {
  82. case DLL_PROCESS_ATTACH:
  83. {
  84. DWORD dwThreadId = 0;
  85. GetProcInfo(dwThreadId);
  86. if (ghk_CBT == NULL)
  87. {
  88. ghk_CBT = SetWindowsHookEx(WH_CBT, CBTProc, HINSTANCE(0x000604F4), dwThreadId);
  89. if (ghk_CBT == NULL)
  90. WriteTextLog(_T("hook api失败"));
  91. else
  92. WriteTextLog(_T("hook api成功:%ld,%p"), GetLastError(), HINSTANCE(0x000604F4));
  93. }
  94. WriteTextLog(_T("dll已成功注入:【当前线程id=%d, 目标线程id=%d,进程id=%d】"), ::GetCurrentThreadId(), dwThreadId, ::GetCurrentProcessId());
  95. WxInfo wxInfo;
  96. GetWxInfo(wxInfo);
  97. }
  98. break;
  99. case DLL_THREAD_ATTACH:
  100. break;
  101. case DLL_THREAD_DETACH:
  102. break;
  103. case DLL_PROCESS_DETACH:
  104. if (ghk_CBT)
  105. {
  106. if (UnhookWindowsHookEx(ghk_CBT))
  107. WriteTextLog(_T("卸载hook成功"));
  108. }
  109. WriteTextLog(_T("dll已成功卸载"));
  110. break;
  111. default:
  112. break;
  113. }
  114. return TRUE;
  115. }