首页
社区
课程
招聘
[求助] 求教通过CreateRemoteThread远程执行LoadLibraryW注入DLL后,在DLL里面设置全局Hook无效
发表于: 2019-11-14 18:46 3700

[求助] 求教通过CreateRemoteThread远程执行LoadLibraryW注入DLL后,在DLL里面设置全局Hook无效

2019-11-14 18:46
3700
通过CreateRemoteThread注入dll是成功了,DllMain中能执行其它操作了,但是在DLL文件中SetWindowsHookEx执行不到钩子回调函数,请问是什么原因?

这是DLL文件中的测试代码, CreateRemoteThread执行代码就不贴出来了,能注入成功,MessageBox能正常弹出,就是Hook回调执行不到。

HHOOK g_hHook = NULL;

LRESULT CALLBACK LowLevelKeyboardProc(int code, WPARAM wParam, LPARAM lParam)
{
	if (HC_ACTION == code && wParam == WM_KEYUP) {
		LPKBDLLHOOKSTRUCT pKbhs = (LPKBDLLHOOKSTRUCT)lParam;
		if (pKbhs->vkCode == VK_F12) {
			MessageBox(NULL, _T("F12"), _T("F12"), 0);
		}
	}
	return CallNextHookEx(g_hHook, code, wParam, lParam);
}


BOOL APIENTRY DllMain(HMODULE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
                MessageBox(NULL, _T("DLL注入成功"), _T("消息"), 0);
		if (g_hHook == NULL) {
			g_hHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hModule, 0);
		}
	case DLL_THREAD_ATTACH:
	case DLL_THREAD_DETACH:
	case DLL_PROCESS_DETACH:
		break;
	}
	return TRUE;
}



[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 9626
活跃值: (1838)
能力值: ( LV5,RANK:73 )
在线值:
发帖
回帖
粉丝
2
创建一条线程调用 SetWindowsHookEx,不要直接在 DllMain 里直接调用。
最后于 2019-11-14 19:22 被Sprite雪碧编辑 ,原因:
2019-11-14 19:21
0
雪    币: 405
活跃值: (1071)
能力值: ( LV7,RANK:105 )
在线值:
发帖
回帖
粉丝
3

因为CreateRemoteThread LoadLibrary的那个线程并没有消息循环。

This hook is called in the context of the thread that installed it. The call is made by sending a message to the thread that installed the hook. Therefore, the thread that installed the hook must have a message loop.

(摘自 https://docs.microsoft.com/zh-cn/previous-versions/windows/desktop/legacy/ms644985(v=vs.85))
PS:
1、WH_KEYBOARD_LL钩子其实不用注入到目标进程里也能工作。
2、既然你都用了SetWindowsHookEx,注入用CreateRemoteThread就没什么必要,兼容性没有Windows自带的注入好,当然写**无所谓了
3、如果你不需要拦截的话用WH_GETMESSAGE、WH_KEYBOARD就够了,如果需要拦截消息级别的按键用SetWindowsLong劫持窗口处理过程,如果需要拦截GetRawInputData级别的才用LL钩子
4、以上可能有错误。。

最后于 2019-11-14 21:17 被练习生编辑 ,原因:
2019-11-14 21:08
0
雪    币: 169
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
非常感谢回答,明白什么原因了
2019-11-14 22:44
0
雪    币: 169
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
其实我想实现的就是将dll注入到另外一个进程去截取消息,就算关闭注入的这个程序也不影响dll正常运行,不知道有什么好办法呢
2019-11-14 23:03
0
雪    币: 405
活跃值: (1071)
能力值: ( LV7,RANK:105 )
在线值:
发帖
回帖
粉丝
6
dusksoft 其实我想实现的就是将dll注入到另外一个进程去截取消息,就算关闭注入的这个程序也不影响dll正常运行,不知道有什么好办法呢
消息的类型有很多种,鼠标键盘都要获取,并且有时候需要修改消息内容的话建议用SetWindowsLong,“关闭注入的这个程序也不影响dll正常运行”这种情况的话还是使用远程线程注入
2019-11-15 00:58
0
游客
登录 | 注册 方可回帖
返回
//