首页
社区
课程
招聘
[求助]拦截进程启动的一点疑问
发表于: 2009-8-26 20:03 10481

[求助]拦截进程启动的一点疑问

2009-8-26 20:03
10481
大家好,
     我想知道通过NtCreateProcess()能否拦截进程启动?在网上看到一篇文章,貌似说它不行:(http://www.codeproject.com/KB/system/soviet_protector.aspx)
文章中有一段说到:
Which native API functions should we hook? Although NtCreateProcess() seems to be the most obvious answer to the question, this answer is wrong - it is possible to create a process without calling this function. For example, CreateProcess() sets up process-related kernel-mode structures without calling NtCreateProcess(). Therefore, hooking NtCreateProcess() is of no help to us.

{得挂哪个API呢? 尽管看似最明显应挂NtCreateProcess() ,但这不对------因为有可能不用此函数也能创建一个进程。例如,CreateProcess()函数可创建起一堆内核模式与进程相关的结构,而不用调用NtCreateProcess() 。所以,挂NtCreateProcess() 没用}------先这么翻,大义。

1.不知哪位大侠能解释一下为什么它拦不住?
2.特别是为什么CreateProcess()不经过NtCreateProcess() 也能创建相关结构?
3.怎么样才能拦截得住,通常用的什么方法?

谢谢啊!

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

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 159
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
http://bbs.pediy.com/showthread.php?t=65772
看看这个应该有所帮助
2009-8-26 20:38
0
雪    币: 245
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
你好,
看了您说的贴子,感觉跟我说的是一个贴子。NtCreateSection()这个函数,可以拦到,但它只能得到exe文件的相关信息和阻止进程继续形成。而无法得到进程id,因为在这个函数调用后,再由NtCreateProcess形成相关内核结构。谢谢你啊。但我的问题还是未解决完全。
2009-8-26 21:01
0
雪    币: 251
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
貌似是老外在说梦话
2009-8-26 21:54
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
5
2000:NtCreateProcess
xp:NtCreateProcessEx
vista/win7/2008:NtCreateUserProcess
2009-8-26 22:31
0
雪    币: 251
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
看来是我孤陋寡闻了
2009-8-26 23:44
0
雪    币: 0
活跃值: (954)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
这个老外貌似想的太简单了。
2009-8-27 12:07
0
雪    币: 245
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我也有类似感觉,但由于是新手不太肯定,也见过一些程序是用此函数拦的。
《深入解析windows操作系统第4版》潘爱民译,这本书第6章(P304)有讲进程创建,其中阶段2就是调用NtCreateProcess()来创建一个进程对像。P300页还第二段还提到了CreateProcess(还有CreateProcessAsUser,CreateProcessWithTokenW,CreateProcessWithLogon等)函数,加上304页提到的NtCreateProcess()很是疑惑。
《Windows NT 2000 Native API Reference》中有一句关于ZwCreateProcess()的:The process created does not contain any threads.说明此函数真只是创建了进程内核对象。 还有一句是:Related Win32 Functions:
CreateProcess, CreateProcessAsUser.说明,CreateProcess 函数确实跟
ZwCreateProcess()(NtCreateProcess())有关啊。如果,这两本书都是正确的话,那前面老外的话。。。

呵呵。。还请大家指教。。
2009-8-27 12:37
0
雪    币: 245
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
呵呵,多谢!!若是再多些汉字会更好
2009-8-27 12:38
0
雪    币: 245
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
-               
2009-8-27 12:39
0
雪    币: 245
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
呵呵,先谢谢支持。不过,能否再给些提示。。
2009-8-27 12:40
0
雪    币: 245
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
MJ大大,请问一下:
假设NtCreateProcess成功返回,但若在挂钩(MyNtcreateProcess)中向上层返回失败,此时内核中的相关结构已经建成,这些结构怎么处理啊?谢谢!
2010-7-20 17:04
0
游客
登录 | 注册 方可回帖
返回
//