//#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。这样的好处是可以调试。
远程注入后好像调试不了