首页
社区
课程
招聘
[求助]调用ObReferecsObjectByHandle问题
发表于: 2011-8-31 23:51 4772

[求助]调用ObReferecsObjectByHandle问题

2011-8-31 23:51
4772
在一本RootKit书里有一段例子;下面是代码片段:

        if(ObReferenceObjectByHandle(SectionHandle,
                         SECTION_MAP_EXECUTE,
                         *MmSectionObjectType,
                                             ,KernelMode,
                         &PsProcess,NULL) == STATUS_SUCCESS)
        {

            __asm
            {    
                pushad
                mov eax,PsProcess      ;函数返回的PVOID 指针
                mov eax,[eax+14h]
                add eax,uImageOffset   ;一个结构偏移,如果在XP以前系统值0x18,XP下为0
                mov ebx,[eax]
                test byte ptr[ebx+20h],20h
                jz NO_IMAGE_SECTION
                mov bFlag,TRUE
                mov eax,[ebx+24h]
                mov ebx,[eax+4]
                mov hFile,ebx         ;一个句柄
                add eax,30h
                mov ObjectName,eax    ;一个PUNICODE_STRING 字符串
                popad

        NO_IMAGE_SECTION:
            }

这是在 HOOK ZwMapViewOfSection 函数里面调用的,我想问下ObReferencsObjectByHandle的第五个参数 PsProcess 函数返回的是什么数据结构?一直找不出来,卡在这了;只能照搬那个嵌入汇编代码,不知道其意思;

如果表达的不是很清楚,我会跟帖解答;望大牛帮帮忙...很纠结,网上查了很多ZwMapViewOfSection,跟 ObReferencsObjectByHandle 的资料,都没有好的解答

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

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 2331
活跃值: (2220)
能力值: (RANK:400 )
在线值:
发帖
回帖
粉丝
2
应该是FILE_OBJECT吧.
2011-9-1 00:08
0
雪    币: 54
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
可是我找了FILE_OBJECT的结构,也对不上那段汇编代码....
2011-9-1 01:24
0
雪    币: 544
活跃值: (264)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
4
看了下WRK,应该是:

typedef struct _SECTION {
    MMADDRESS_NODE Address;
    PSEGMENT Segment;
    LARGE_INTEGER SizeOfSection;
    union {
        ULONG LongFlags;
        MMSECTION_FLAGS Flags;
    } u;
    MM_PROTECTION_MASK InitialPageProtection;
} SECTION, *PSECTION;

if(ObReferenceObjectByHandle(SectionHandle,
                         SECTION_MAP_EXECUTE,
                         *MmSectionObjectType,
                                             ,KernelMode,
                         &PsProcess,NULL) == STATUS_SUCCESS)
        {

            __asm
            {   
                pushad
                mov eax,PsProcess      ;函数返回的PVOID 指针
                mov eax,[eax+14h]      ;MMADDRESS_NODE 5个DWORD,所以这里+14h取的是PSEGMENT Segment;
                add eax,uImageOffset   ;一个结构偏移,如果在XP以前系统值0x18,XP下为0
                mov ebx,[eax]          ;nt!_SEGMENT: +0x000 ControlArea      : Ptr32 _CONTROL_AREA
                test byte ptr[ebx+20h],20h
                jz NO_IMAGE_SECTION
                mov bFlag,TRUE
                mov eax,[ebx+24h]      ;EBX指向一个_CONTROL_AREA,+0x024 FilePointer      : Ptr32 _FILE_OBJECT,所以EAX指向一个_FILE_OBJECT
                mov ebx,[eax+4]        ;EAX指向一个_FILE_OBJECT, +0x004 DeviceObject     : Ptr32 _DEVICE_OBJECT,所以EBX指向一个DeviceObject
                mov hFile,ebx         ;一个句柄,上面的DeviceObject
                add eax,30h
                mov ObjectName,eax    ;一个PUNICODE_STRING 字符串,nt!_FILE_OBJECT  +0x030 FileName         : _UNICODE_STRING
                popad

        NO_IMAGE_SECTION:
            }
2011-9-1 02:37
0
雪    币: 54
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
谢谢!虽然昨天在MSDN的在线文档中找到的SECTION_OBJECT到FILE_OBJECT....但还是谢谢你这么详细的解说!
2011-9-2 03:04
0
游客
登录 | 注册 方可回帖
返回
//