当前位置: 代码迷 >> VC/MFC >> 关于windows钩子,该怎么解决
  详细解决方案

关于windows钩子,该怎么解决

热度:89   发布时间:2016-05-02 03:40:22.0
关于windows钩子
//#define UNICODE
#include <Windows.h>

static HWND hwnd = NULL ;
static HHOOK hHook = NULL ;

LRESULT CALLBACK CallWndProc (int nCode, WPARAM wParam, LPARAM lParam) {
if (nCode >= 0) {
const LPMSG msg = (LPMSG) lParam ;
if (msg->hwnd == hwnd && msg->message == WM_KILLFOCUS) {
msg->message = WM_NULL ;
MessageBox (NULL ,TEXT ("消息") ,TEXT ("") ,MB_ICONINFORMATION) ;
}
}
return CallNextHookEx (hHook ,nCode ,wParam ,lParam);
}

BOOL APIENTRY DllMain (HANDLE hModule ,DWORD dwReason ,LPVOID lpParam) {
switch (dwReason) {
case DLL_PROCESS_ATTACH :
if (true) {
hwnd = FindWindow (TEXT ("CalcFrame") ,TEXT ("计算器")) ;
if (hwnd == NULL) {
MessageBox (NULL ,TEXT ("获取句柄失败") ,TEXT ("") ,MB_ICONERROR) ;
break ;
}
hHook = SetWindowsHookEx (WH_CALLWNDPROC ,CallWndProc ,NULL ,GetWindowThreadProcessId (hwnd ,NULL)) ;
if (hHook == NULL) {
MessageBox (NULL ,TEXT ("注入钩子失败") ,TEXT ("") ,MB_ICONERROR) ;
break ;
}
SendMessage (hwnd ,WM_KILLFOCUS ,0 ,0) ;
}
break ;
case DLL_PROCESS_DETACH :
if (hHook != NULL) {
UnhookWindowsHookEx (hHook) ;
}
break ;
case DLL_THREAD_ATTACH :
break ;
case DLL_THREAD_DETACH :
break ;
}
return TRUE ;
}

以上是dll的内容,然后我用远线程注入到计算器的进程,这步确认已经成功注入
然而计算器失去焦点时并没有弹出消息
------解决思路----------------------
1.请问你用了什么注入方式呢?如果是 用 CreateRemoteThread 的方式。 在 dllmain 里 是不能直接or间接安装钩子的。钩子无效。这是我的经验!我也不知道原因!
2.你是想注入计算机exe 然后做一些修改吗?如果是,为什么不修改exe二进制代码让其加载你的dll。这样的好处是可以调试。
远程注入后好像调试不了
  相关解决方案