首页
社区
课程
招聘
[求助]主程序退出后,HOOK失效
发表于: 2008-12-11 16:47 9474

[求助]主程序退出后,HOOK失效

2008-12-11 16:47
9474
想编一个程序A,主要用来对程序B安装HOOK,消息回调处理在Dll中实现。但A程序退出后,HOOK就失效了。
有什么办法,除了创建远程进程,能使程序A退出后,DLL中的代码继续HOOK处理
Thanks!

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
2
先注入一个不会退出的进程C,再将自己注入到进程B
2008-12-11 16:58
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
3
进去后LoadLibraryA自己一次就不会退了
2008-12-11 17:00
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
4
两次LOAD就没法卸载了。。。
2008-12-11 18:03
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
RE::进去后LoadLibraryA自己一次就不会退了

这个试了,不行啊

        if (ul_reason_for_call == DLL_PROCESS_ATTACH)
        {
                LoadLibrary("Hook.dll");
                                。。。。。
2008-12-11 20:15
0
雪    币: 6
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
哇。。。还可以这样用啊!!学习了!
2008-12-12 05:06
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
7
这个肯定行。也许你的需求没描述清楚



本来他就不想卸载。。
2008-12-12 09:04
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
【问题描述】:
-----结构:
程序A,程序B,DLL
1. 程序A调用DLL中的EnHook(。。)对程序B设置HOOK。
2. DLL里有HOOK后的鼠标处理函数HookProc (。。)。
-----问题:
A退出后,鼠标处理函数HookProc (。。)就捕获不到程序B的消息,而不能进行处理。
-------------------------------------------------------------------------

楼上的不行啊。
我试了,尽管用了LoadLibrary("Hook.dll");
但程序A退出后,还是捕获不到。
2008-12-12 14:50
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
用完整路径Load

GetModuleFileName(hDll,DllName,....)

LoadLibrary(DllName)
2008-12-12 14:56
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
也不行。我自己再慢慢研究。
谢谢各位了啊
2008-12-12 15:15
0
雪    币: 200
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
本来他就不准备卸载。。。

哈哈哈哈。。。

牛牛们很幽默。。。
2008-12-12 17:21
0
雪    币: 252
活跃值: (13)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
我认为就算A退出来啦。B应该还可以HOOK 住消息啊,它的这个DLL使用计数不会减到0啊,它会谢载吗
2008-12-13 23:27
0
雪    币: 193
活跃值: (26)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
13
内存中加载DLL!
2008-12-14 06:47
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
14
主程序hHook的计数变为0,钩子已经不在了,Dll不卸载也挂不住新进程。
2008-12-14 07:31
0
雪    币: 2512
活跃值: (672)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
15
在dll加载到b进程后,dll自己判断若是b进程,则调用CreateThread创建一个新的线程,该新线程再调用SetWindowsHookEx创建一个键盘钩子,回调函数还是本dll的那个,然后那个新线程调用WaitForSingleObject(GetCurrentProcess(),INFINITE)阻塞线程的结束,否则线程已结束钩子就失效了,之后关闭A进程也可已勾住b了!!!!!!
2008-12-14 10:05
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
用楼上的方案成功了,特此登录来致谢。。。
2008-12-14 12:59
0
游客
登录 | 注册 方可回帖
返回
//