setwindowshookex 在win7下设立全局钩子,求解决,顶者有分
setwindowshookex 在win7下设置全局钩子,求解决,顶者有分。
准备做远程协助功能,下载了realvnc的源码,其中有 wm_hooks.dll,该处的源码 使用了全局hook,但是并没有效果。
将主要代码发布进来:
1.全局宏小结
2.挂载钩子函数
3.钩子函数处理
上面双星线中间的代码为我加的代码,想看下 是否拦截了其他界面的wm_paint消息,结果让我失望啊。在 pMsg = NULL;的断点进不去,只有自己窗口激活的时候才能进去。事实证明 在win7下 全局钩子设置不成功,最后只挂在自己的进程中了。
关于这个问题,是否有人遇到过,通过什么方法可以解决。
我又陆续下载了几个全局钩子的例子,找了一些资料,都是用这个方法的,但是在win7上就是没效果的,只能截获当前进程的
------解决方案--------------------
没用过这个一起学习下!
------解决方案--------------------
这里不成功?
下个断点看看, 返回正常不.
不成功就提升软件的权限, 提升权限的代码网上多的是
------解决方案--------------------
以管理员身份运行
以XP兼容模式运行
------解决方案--------------------
请先将调试器attach到其他process后再设断点。
------解决方案--------------------
勾子本来也只能挂在自己的进程里啊!
1 hook_GetMessage = SetWindowsHookEx(WH_GETMESSAGE, HookGetMessage, dll_instance, 0);
dll_instance这个参数就是进程的句柄,你没有办法得到其它进程的句柄。
如果把你的程序挂到其它进程,你可以把你的程序写在一个dll中,再用一些后门的办法让进程把你的dll启动。如LoadLibrary这样存在漏洞的api。这样你就能得到那个程序的instance了。
准备做远程协助功能,下载了realvnc的源码,其中有 wm_hooks.dll,该处的源码 使用了全局hook,但是并没有效果。
将主要代码发布进来:
1.全局宏小结
#pragma data_seg(".WM_Hooks_Shared")
DWORD hook_owner = 0;
DWORD hook_target = 0;
HHOOK hook_CallWndProc = 0;
HHOOK hook_CallWndProcRet = 0;
HHOOK hook_GetMessage = 0;
HHOOK hook_DialogMessage = 0;
BOOL enable_cursor_shape = FALSE;
HCURSOR cursor = 0;
#ifdef _DEBUG_1
UINT diagnostic_min=1;
UINT diagnostic_max=0;
#endif
#pragma data_seg()
2.挂载钩子函数
hook_GetMessage = SetWindowsHookEx(WH_GETMESSAGE, HookGetMessage, dll_instance, 0);
3.钩子函数处理
LRESULT CALLBACK HookGetMessage(int nCode, WPARAM wParam, LPARAM lParam)
{
//***************************************************************************//
MSG* pMsg = (MSG*) lParam;
if(pMsg->message==WM_PAINT||pMsg->message==WM_ERASEBKGND||pMsg->message==WM_NCPAINT)
{
pMsg = NULL;
}
//***************************************************************************//
if (nCode == HC_ACTION)
{
if (wParam & PM_REMOVE)
{
MSG* msg = (MSG*) lParam;
ProcessWindowMessage(msg->message, msg->hwnd, msg->wParam, msg->lParam);
}
}
return CallNextHookEx(hook_GetMessage, nCode, wParam, lParam);
}
上面双星线中间的代码为我加的代码,想看下 是否拦截了其他界面的wm_paint消息,结果让我失望啊。在 pMsg = NULL;的断点进不去,只有自己窗口激活的时候才能进去。事实证明 在win7下 全局钩子设置不成功,最后只挂在自己的进程中了。
关于这个问题,是否有人遇到过,通过什么方法可以解决。
我又陆续下载了几个全局钩子的例子,找了一些资料,都是用这个方法的,但是在win7上就是没效果的,只能截获当前进程的
------解决方案--------------------
没用过这个一起学习下!
------解决方案--------------------
hook_GetMessage = SetWindowsHookEx(WH_GETMESSAGE, HookGetMessage, dll_instance, 0);
这里不成功?
下个断点看看, 返回正常不.
不成功就提升软件的权限, 提升权限的代码网上多的是
------解决方案--------------------
以管理员身份运行
以XP兼容模式运行
------解决方案--------------------
请先将调试器attach到其他process后再设断点。
------解决方案--------------------
勾子本来也只能挂在自己的进程里啊!
1 hook_GetMessage = SetWindowsHookEx(WH_GETMESSAGE, HookGetMessage, dll_instance, 0);
dll_instance这个参数就是进程的句柄,你没有办法得到其它进程的句柄。
如果把你的程序挂到其它进程,你可以把你的程序写在一个dll中,再用一些后门的办法让进程把你的dll启动。如LoadLibrary这样存在漏洞的api。这样你就能得到那个程序的instance了。