首页
社区
课程
招聘
[求助]请问ring0 HOOK了ntCreateProcessEx 怎么获取被创建的进程名
发表于: 2009-11-29 21:56 7373

[求助]请问ring0 HOOK了ntCreateProcessEx 怎么获取被创建的进程名

2009-11-29 21:56
7373
请问ring0 HOOK了ntCreateProcessEx 怎么获取被创建的进程名

NTSTATUS NewNtCreateProcessEx(
OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
IN HANDLE ParentProcess,
IN BOOLEAN InheritObjectTable,
IN HANDLE SectionHandle OPTIONAL,
IN HANDLE DebugPort OPTIONAL,
IN HANDLE ExceptionPort OPTIONAL,
IN HANDLE Unknown OPTIONAL)
{
。。。。。。。。
}

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

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
2
拜托我不是在原帖回你了吗,用得着再发新帖吗?再说了论坛里搜索一下这个问题就有答案了……
2009-11-29 22:02
0
雪    币: 211
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
下面的代码可以在应该可以在lz的程序中稳定运行

PFILE_OBJECT    FileObject;
POBJECT_NAME_INFORMATION wcFilePath;
if (NT_SUCCESS(ObReferenceObjectByHandle(FileHandle,0,NULL,KernelMode,&FileObject,NULL)))//获取文件对象
{
        if (IoQueryFileDosDeviceName(FileObject,&wcFilePath)==STATUS_SUCCESS)//获取文件对象所对应的文件Dos设备名称,即是全路径
        {
                DbgPrint("%ws\r\n",wcFilePath->Name.Buffer);
                ExFreePool(wcFilePath);
        }
        ObDereferenceObject(FileObject);                       
}

上面的代码证明是不对的。十分对不住lz
}
2009-11-29 22:49
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
4
IoQueryFileDosDeviceName

哇,我很怕怕,我看到了好多蓝屏和死机。
2009-11-30 01:51
0
雪    币: 211
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
回楼上:的确IoQueryFileDosDeviceName任意BSOD,但是我在自己的inlinehookntCreateProcessEx和ntcreatesection中调用还是比较稳定的。不过在hook tcpip.sys的派遣函数时,必蓝屏(PsReferenceProcessFilePointer+IoQueryFileDosDeviceName还是很稳定的)。
我也是小菜,回复的内容不当,请高手见谅
2009-11-30 08:45
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
谢谢 ejoyc 我去试试哈
2009-11-30 12:36
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
哎 菜就是菜啊 RING0学习东西太多了 请问如何得到PFILE_OBJECT    FileObject;这个文件的句柄啊
2009-11-30 13:30
0
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
8
http://bbs.pediy.com/showthread.php?t=102087第10楼……看来你是个绝对不回头看的人,我明明说了在你的原帖回过了。
2009-11-30 17:17
0
雪    币: 211
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
http://bbs.pediy.com/showthread.php?p=432627这是sudami曾经的帖子

惭愧!轩辕小聪解释得很到位!是我看错了lz的帖子!的确我的方法无法工作。向lz和轩辕小聪道歉。
2009-11-30 18:03
0
雪    币: 211
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
lz,下面的代码可以工作了。至少在win2003sp2ent上稳定运行。

        PFILE_OBJECT FileObject;
        PVOID SectionObject;
        POBJECT_NAME_INFORMATION wcFilePath;

        if (NT_SUCCESS(ObReferenceObjectByHandle(SectionHandle,0,NULL,KernelMode,&SectionObject,NULL)))//获取文件对象
        {
                _try
                {
                        FileObject = (PFILE_OBJECT)(*((ULONG *)SectionObject + 5)); // PSEGMENT
                        FileObject = *(PFILE_OBJECT *)FileObject; // CONTROL_AREA
                        FileObject = *(PFILE_OBJECT *)((ULONG)FileObject + 36); // FILE_OBJECT

                        ObReferenceObjectByPointer((PVOID)FileObject, 0, NULL, KernelMode);

                        if (IoQueryFileDosDeviceName(FileObject,&wcFilePath)==STATUS_SUCCESS)//获取文件对象所对应的文件Dos设备名称,即是全路径
                        {
                                DbgPrint("%ws \r\n",wcFilePath->Name.Buffer);
                                ExFreePool(wcFilePath);//IoQueryFileDosDeviceName获取的OBJECT_NAME_INFORMATION 需要手动释放
                        }
                        else
                        {
                                KdPrint(("[ScanFunc] MmCreatePeb is called by [Path=%ws]\r\n",FileObject->FileName.Buffer));
                        }       
                        ObDereferenceObject(FileObject);
                }
                _except(EXCEPTION_EXECUTE_HANDLER)
                {
                        DbgPrint("catch error\r\n");
                }
                ObDereferenceObject(SectionObject);
        }
2009-11-30 22:44
0
游客
登录 | 注册 方可回帖
返回
//