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

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

2019-11-14 18:46
3915
通过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;
}



[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 9626
活跃值: (1848)
能力值: ( LV5,RANK:73 )
在线值:
发帖
回帖
粉丝
2
创建一条线程调用 SetWindowsHookEx,不要直接在 DllMain 里直接调用。
最后于 2019-11-14 19:22 被Sprite雪碧编辑 ,原因:
2019-11-14 19:21
0
雪    币: 402
活跃值: (1126)
能力值: ( 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.

(摘自 dc5K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1L8$3y4K6i4K6u0W2L8h3W2U0M7X3!0K6L8$3k6@1i4K6u0W2j5$3!0E0i4K6u0r3P5X3S2Q4x3X3c8U0L8W2)9J5c8Y4m8J5k6i4k6A6L8%4g2K6i4K6u0V1N6X3g2J5M7$3W2G2L8Y4y4Q4x3V1k6%4K9h3&6V1L8%4N6K6i4K6u0r3k6r3g2K6K9%4c8G2M7q4)9J5c8X3I4W2k6$3q4U0P5g2)9J5c8X3#2K6y4U0b7@1z5e0R3#2i4K6t1^5N6W2)9K6c8s2k6K6i4K6u0W2z5o6g2Q4x3U0W2Q4x3U0V1`.
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
雪    币: 402
活跃值: (1126)
能力值: ( LV7,RANK:105 )
在线值:
发帖
回帖
粉丝
6
dusksoft 其实我想实现的就是将dll注入到另外一个进程去截取消息,就算关闭注入的这个程序也不影响dll正常运行,不知道有什么好办法呢
消息的类型有很多种,鼠标键盘都要获取,并且有时候需要修改消息内容的话建议用SetWindowsLong,“关闭注入的这个程序也不影响dll正常运行”这种情况的话还是使用远程线程注入
2019-11-15 00:58
0
游客
登录 | 注册 方可回帖
返回