阅读:2014回复:19
如何判断一个文件要执行?(2000+sp4)
各位大虾:
如何判断一个文件要执行?irpsp->parameters.create.securitycontext->desiredaccess这个值足够吗?如何与一个读文件属性的irp区分?要在完成例程中作吗?请大哥们指教! |
|
最新喜欢:tmx21 |
沙发#
发布于:2005-04-13 16:31
郁闷。。。。。。。。
自己顶 |
|
板凳#
发布于:2005-04-14 09:13
什么叫要执行?
被任何程序打开?读写?? |
|
地板#
发布于:2005-04-14 10:10
举个例子:我双击一个exe文件,这时候我的驱动收到了几个irp.
其中最关键的是一个由createprocessw操作引起的。但对文件读属性也会在驱动中收到一模一样的irp,我想问的是,有没有办法在irp中区分他们? |
|
地下室#
发布于:2005-04-15 03:35
I don\'t think you can get it by simply intercepting MJ_CREATE.
Double-click in Explorer means nothing to Kernel. It\'s simply explorer\'s feature. |
|
5楼#
发布于:2005-04-15 09:24
你在www.codeproject.com上搜索一下,有篇文章就是关于这些的,关键词hook api,我前几天还看到过,很可惜,我没有记录URL,祝你好运
|
|
6楼#
发布于:2005-04-15 09:55
可以用psxxx函数,知道系统创建进程。然后你再想办法得到该进程的对应文件地址,剩下的就好办了
psNotifyxxx |
|
|
7楼#
发布于:2005-04-15 16:32
楼上说的是注册一个回呼函数?我试过,当系统创建成功才会调用这个函数。唉,晚了。你们可以试一下,用filemon跟踪,创建一个文件都会收到那些irp,观察堆栈可以知道哪个irp是真正要执行的irp.
可我就是找不到他们之间在传入的irp上有什么区别? |
|
8楼#
发布于:2005-04-15 22:51
可以HOOK ZwCreateSection实现,函数原型如下:
NTSYSAPI NTSTATUS NTAPI ZwCreateSection( OUT PHANDLE SectionHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN PLARGE_INTEGER SectionSize OPTIONAL, IN ULONG Protect, IN ULONG Attributes, IN HANDLE FileHandle ); 判断参数Protect,如果参数中有PAGE_EXECUTE_XXX代表要执行一个文件。 |
|
9楼#
发布于:2005-04-18 13:48
这种方法我试过,但老板不同意。而且据我所知,2003 64位的os不支持hook方法,这样只能解决一时的问题,到最后还是要头疼。我只想通过filter driver 的方式,在irp中判断,不只各位大虾有什么主意没有?
|
|
10楼#
发布于:2005-04-20 13:15
大虾们给想想办法啊!逼得我都快要撞显示器了!
有什么思路也行啊! |
|
11楼#
发布于:2005-04-22 10:56
等待中。。。。。。。。。。。。
|
|
12楼#
发布于:2005-04-24 10:56
先判断irpsp->parameters.create.securitycontext->desiredaccess&FILE_EXECUTE,然后溯栈,如果发起者是CreateProcessW,就肯定是执行打开了,非常麻烦
|
|
13楼#
发布于:2005-04-25 13:47
楼上这位大侠,溯栈怎么做?能详细一点给出算法吗?
|
|
14楼#
发布于:2005-04-25 17:11
只是一个想法,根据EBP就能溯回去,问题在于从USER到KERNEL的跳转(INT 2E),不知道该怎么溯回去
|
|
15楼#
发布于:2005-04-25 19:18
楼上的大哥,据我跟踪,createprocessw在堆栈,而且irpsp->parameters.create.securitycontext->desiredaccess&FILE_EXECUTE为真也不能肯定是一个程序要执行啊。只是说一个程序要执行,堆栈里肯定有他,但反过来就不一定对了
|
|
16楼#
发布于:2005-04-26 09:40
createprocessw肯定会调用ZwCreateFile ,调用的地址在同一个操作系统中地址范围是固定,如果回溯到IRP_MJ_CREATE是ZwCreateFile 发起的,且ZwCreateFile 被调用的地址落在createprocessw地址范围内,基本就能确定是执行了.
这是我的想法 |
|
17楼#
发布于:2005-04-26 11:42
不是吧?举个例子,双击执行桌面上的一个可执行程序,softice断不到zwcreatefile,而是ntopenfile和iocreatefile在堆栈中出现?
到底执行一个文件时,都发生了什么事? |
|
18楼#
发布于:2005-04-26 13:53
我搞错了,应该是CreateProcessW调用 ZwOpenFile,ZwOpenFile通过系统功能调用进去内核,调用NtOpenFile,NtOpenFile调用IoCreateFile
如果做一个文件系统filter,在IRP_MJ_CREATE处,如果 irpsp->parameters.create.securitycontext->desiredaccess&FILE_EXECUTE,进行溯栈,如果发现有RetEIP落在 CreateProcessW范围内,基本就能认为是执行打开了,这只是我一个不成熟的想法,有空研究一下 |
|
19楼#
发布于:2005-04-27 14:18
谢谢众家哥哥。虽然问题还时没解决。
|
|