|
@@ -1,25 +1,106 @@
|
|
// dllmain.cpp : 定义 DLL 应用程序的入口点。
|
|
// dllmain.cpp : 定义 DLL 应用程序的入口点。
|
|
#include "stdafx.h"
|
|
#include "stdafx.h"
|
|
|
|
|
|
-HHOOK g_hook = NULL;
|
|
|
|
-LRESULT CALLBACK Hook_CBT_Proc(int nCode, WPARAM wParam, LPARAM lParam)
|
|
|
|
|
|
+//https://docs.microsoft.com/zh-cn/windows/desktop/winmsg/using-hooks
|
|
|
|
+HHOOK ghk_CBT = NULL;
|
|
|
|
+HHOOK ghk_Mouse = NULL;
|
|
|
|
+HHOOK ghk_CallWndProc = NULL;
|
|
|
|
+
|
|
|
|
+LRESULT WINAPI CallWndProc(int, WPARAM, LPARAM);
|
|
|
|
+LRESULT WINAPI CBTProc(int, WPARAM, LPARAM);
|
|
|
|
+LRESULT WINAPI DebugProc(int, WPARAM, LPARAM);
|
|
|
|
+LRESULT WINAPI GetMsgProc(int, WPARAM, LPARAM);
|
|
|
|
+LRESULT WINAPI KeyboardProc(int, WPARAM, LPARAM);
|
|
|
|
+LRESULT WINAPI MouseProc(int, WPARAM, LPARAM);
|
|
|
|
+LRESULT WINAPI MessageProc(int, WPARAM, LPARAM);
|
|
|
|
+
|
|
|
|
+LRESULT WINAPI CallWndProc(int nCode, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
{
|
|
- WriteTextLog(_T("窗口HCBT_XXX"));
|
|
|
|
- tagMSG* msg;
|
|
|
|
- msg = (tagMSG*)lParam;
|
|
|
|
- if (nCode == HCBT_MINMAX)
|
|
|
|
|
|
+ WriteTextLog(_T("CallWndProc"));
|
|
|
|
+
|
|
|
|
+ if (nCode < 0) // do not process message
|
|
|
|
+ return CallNextHookEx(ghk_CallWndProc, nCode, wParam, lParam);
|
|
|
|
+
|
|
|
|
+ switch (nCode)
|
|
{
|
|
{
|
|
- WriteTextLog(_T("窗口HCBT_MINMAX"));
|
|
|
|
- return 1;
|
|
|
|
|
|
+ case HC_ACTION:
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ default:
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
|
|
|
|
- return CallNextHookEx(g_hook, nCode, wParam, lParam);
|
|
|
|
|
|
+ return CallNextHookEx(ghk_CallWndProc, nCode, wParam, lParam);
|
|
}
|
|
}
|
|
|
|
|
|
-BOOL APIENTRY DllMain(HMODULE hModule,
|
|
|
|
- DWORD ul_reason_for_call,
|
|
|
|
- LPVOID lpReserved
|
|
|
|
-)
|
|
|
|
|
|
+LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
|
|
|
|
+{
|
|
|
|
+ CHAR szBuf[128];
|
|
|
|
+ CHAR szCode[128];
|
|
|
|
+ static int c = 0;
|
|
|
|
+ size_t cch;
|
|
|
|
+ HRESULT hResult;
|
|
|
|
+
|
|
|
|
+ WriteTextLog(_T("CBTProc"));
|
|
|
|
+ if (nCode < 0) // do not process message
|
|
|
|
+ return CallNextHookEx(ghk_CBT, nCode, wParam,lParam);
|
|
|
|
+
|
|
|
|
+ switch (nCode)
|
|
|
|
+ {
|
|
|
|
+ case HCBT_ACTIVATE:
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ case HCBT_CLICKSKIPPED:
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ case HCBT_CREATEWND:
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ case HCBT_DESTROYWND:
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ case HCBT_KEYSKIPPED:
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ case HCBT_MINMAX:
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ case HCBT_MOVESIZE:
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ case HCBT_QS:
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ case HCBT_SETFOCUS:
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ case HCBT_SYSCOMMAND:
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ default:
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return CallNextHookEx(ghk_CBT, nCode, wParam, lParam);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
|
|
|
|
+{
|
|
|
|
+ CHAR szBuf[128];
|
|
|
|
+ CHAR szMsg[16];
|
|
|
|
+ static int c = 0;
|
|
|
|
+ size_t cch;
|
|
|
|
+ HRESULT hResult;
|
|
|
|
+
|
|
|
|
+ if (nCode < 0) // do not process the message
|
|
|
|
+ return CallNextHookEx(ghk_Mouse, nCode,wParam, lParam);
|
|
|
|
+
|
|
|
|
+ WriteTextLog(_T("MOUSE - nCode: %d, msg: %s, x: %d, y: %d, %d times "), nCode, szMsg, LOWORD(lParam), HIWORD(lParam), c++);
|
|
|
|
+
|
|
|
|
+ return CallNextHookEx(ghk_Mouse, nCode, wParam, lParam);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+BOOL APIENTRY DllMain(HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
|
|
{
|
|
{
|
|
g_hCurModule = hModule;
|
|
g_hCurModule = hModule;
|
|
switch (ul_reason_for_call)
|
|
switch (ul_reason_for_call)
|
|
@@ -28,16 +109,16 @@ BOOL APIENTRY DllMain(HMODULE hModule,
|
|
{
|
|
{
|
|
DWORD dwThreadId = 0;
|
|
DWORD dwThreadId = 0;
|
|
GetProcInfo(dwThreadId);
|
|
GetProcInfo(dwThreadId);
|
|
- if (g_hook == NULL)
|
|
|
|
|
|
+ if (ghk_CBT == NULL)
|
|
{
|
|
{
|
|
- g_hook = SetWindowsHookEx(WH_CBT, Hook_CBT_Proc, NULL, dwThreadId);
|
|
|
|
- if (g_hook == NULL)
|
|
|
|
|
|
+ ghk_CBT = SetWindowsHookEx(WH_CBT, CBTProc, LPDWORD(0x000604F4), dwThreadId);
|
|
|
|
+ if (ghk_CBT == NULL)
|
|
WriteTextLog(_T("hook api失败"));
|
|
WriteTextLog(_T("hook api失败"));
|
|
else
|
|
else
|
|
- WriteTextLog(_T("hook api成功"));
|
|
|
|
|
|
+ WriteTextLog(_T("hook api成功:%ld,%p"), GetLastError(), HINSTANCE(0x000604F4));
|
|
}
|
|
}
|
|
|
|
|
|
- WriteTextLog(_T("dll已成功注入:【当前线程id=%d, 进程id=%d】"), ::GetCurrentThreadId(), ::GetCurrentProcessId());
|
|
|
|
|
|
+ WriteTextLog(_T("dll已成功注入:【当前线程id=%d, 目标线程id=%d,进程id=%d】"), ::GetCurrentThreadId(), dwThreadId, ::GetCurrentProcessId());
|
|
WxInfo wxInfo;
|
|
WxInfo wxInfo;
|
|
GetWxInfo(wxInfo);
|
|
GetWxInfo(wxInfo);
|
|
}
|
|
}
|
|
@@ -47,8 +128,11 @@ BOOL APIENTRY DllMain(HMODULE hModule,
|
|
case DLL_THREAD_DETACH:
|
|
case DLL_THREAD_DETACH:
|
|
break;
|
|
break;
|
|
case DLL_PROCESS_DETACH:
|
|
case DLL_PROCESS_DETACH:
|
|
- if (g_hook)
|
|
|
|
- UnhookWindowsHookEx(g_hook);
|
|
|
|
|
|
+ if (ghk_CBT)
|
|
|
|
+ {
|
|
|
|
+ if (UnhookWindowsHookEx(ghk_CBT))
|
|
|
|
+ WriteTextLog(_T("卸载hook成功"));
|
|
|
|
+ }
|
|
WriteTextLog(_T("dll已成功卸载"));
|
|
WriteTextLog(_T("dll已成功卸载"));
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|