首页
社区
课程
招聘
[求助]想用hook OpenProcess 的方法,但是失败
发表于: 2009-7-25 22:03 14319

[求助]想用hook OpenProcess 的方法,但是失败

2009-7-25 22:03
14319
想用Hook OpenProcess的方法来防杀(例如task manager).
但是发现用Task Manager 来kill进程的时候,dummy OpenProcess并没有被调用到。
但是我hook其他函数的时候就可以(例如Sleep)
难道task manager在杀掉进程的时候不会调用OpenProcess
OS : winxp+sp3

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

收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
2
SSDT HOOK NtOpenProcess就可以拦截到不少来自任务管理器的调用。
2009-7-26 03:15
0
雪    币: 267
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
ring3层的用注入全局dll hook openprocess防止task manager杀掉,网上源码很多搜一下吧.
2009-7-26 08:43
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
是我自己弄错了!多谢!
现在可以了!
但是有一个问题就是我远程注入 的一个dll,如何能够正常Free掉呢?
我把DllMain传入进来的HMODULE hModule记录下来。在需要free的时候调用
FreeLibrary(hModule);
但是发现整个系统大部分应用程序都crash掉了。explorer也不能幸免
2009-7-26 10:48
0
雪    币: 100
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
可以在Ring3 HOOK OpenProcess成功,不过是用Delphi写的
2009-7-26 12:55
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
现在Hook是可以成功了!但是在卸载hookdll的时候宿主程序会崩溃。
我在hookdll中有一段代码,如果收到某个事件,就调用FreeLibrary来把自己卸载掉。
我估计就是这个代码有问题导致了宿主程序crash.
不知道各位有没有什么更好的办法来卸载hookdll.
非常感谢
2009-7-26 13:21
0
雪    币: 129
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
SSDT HOOK NtOpenProcess  拦截不到任务管理器结束进程的...

要InLine HOOK NtOpenProcess可以拦截到,SDT拦截不到..

我印象里是这样的

拦截NtOpenProcess函数的下层调用,那就可以拦截到大多任务管理器的调用了.
2009-7-26 14:23
0
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
8
你所谓“印象”,也不自己推敲一下就说出来了?!
任务管理器本来也就是个Ring3程序,通过调用Native API来获取系统信息,没有任何原理说明它对Native API的调用(更不用说对封装Native API的相应Win32 API的调用)能绕过SSDT HOOK。如果你找到了这个原理,不妨发出来和大家分享。

另外我没有说过“SSDT HOOK NtOpenProcess可以拦截任务管理器结束进程”,我认为如果只是为了拦截结束进程操作就进行OpenProcess的限制是不太合理的,因为任务管理器本来就有进程管理功能,这个功能不止包括结束进程,还包括获取进程的相关信息比如CPU及内存占用等等,单独从OpenProcess操作上禁止的话,难以判断这个操作是为了结束进程还是为了读取进程的相关信息(除非任务管理器每次结束进程的时候永远单独使用PROCESS_TERMINATE权限打开,而其他操作的时候永远不使用包含PROCESS_TERMINATE的权限打开,这倒是可以分开,但是我没有试过是不是。而且即使任务管理器是规范地这么做的,其他程序也未必,而楼主显然不只是想对付任务管理器)。因此如果要拦截结束进程,拦截对NtTerminateProcess的调用会好一点,只是这个时候在Ring3判断传入的句柄是否是需保护进程的需要费点劲。
2009-7-26 17:08
0
雪    币: 33
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
轩辕小聪的回复让我很感动啊~
2009-7-26 21:54
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
多谢各位的回复
多谢 轩辕小聪 的建议,看起来拦截NtTerminateProcess更好。还需要多试试!
谢谢
2009-7-28 12:41
0
雪    币: 129
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
我晕,我被批评了,其实我意思只是指出LZ为什么HOOK了OpenProcess为什么还是可以被任务管理器结束进程的问题,并没有说来hook OpenProcess来防止结束进程是一个好方法..

因为我记得SDT HOOKOpenProcess还是会被任务管理器结束的.

HOOK xxxxByPointer 任务管理器就结束不了了,或者xxByProcess..
2009-8-18 13:33
0
雪    币: 129
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
HOOK NtTerminateProcess来防止结束进程比OpenProcess好很多,但是记得在过滤函数里记得判断一下调用着是否自身。不然有问题!
2009-8-18 13:35
0
雪    币: 251
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
我认为如果Dll是用远程线程LoadLibrary注入的应该用FreeLibraryAndExitThread
如果是钩子应该把钩子Unhook掉

其实HookOpenProcess可能也可以,只要过滤dwDesiredAccess让它不显式或隐式包含PROCESS_TERMINATE
2009-8-18 15:50
0
雪    币: 251
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
我测试了下,OpenProcess是可以拦到的
除非它发了个WM_CLOSE 你自己乖乖退出了
这貌似也不对,Taskmgr在自动刷新时不停地在OpenProcess
2009-8-18 16:29
0
雪    币: 522
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
15
轩辕大牛很热心 乐于助人   
真是我们这群菜鸟的福音 哈哈

说到任务管理器 小弟也有个地方也不大明白 任务管理器在拿不到句柄的情况下还是可以正常显示某程序的内存占用等信息 类似空闲或处理过的进程 不解 请轩辕小聪帮忙解答  谢谢
2009-8-18 21:01
0
游客
登录 | 注册 方可回帖
返回
//