首页
社区
课程
招聘
[讨论]看某大侠的代码疑惑不解。见注释
发表于: 2012-3-23 21:19 2038

[讨论]看某大侠的代码疑惑不解。见注释

2012-3-23 21:19
2038
extern "C"
__declspec(dllimport) _stdcall KeAddSystemServiceTable(PVOID, PVOID, PVOID, PVOID, PVOID);

PServiceDescriptorTableEntry_t GetKeServiceDescriptorTableShadow(VOID)   
{   
        PServiceDescriptorTableEntry_t ShadowTable = NULL;   
        ULONG   ServiceTableAddress = 0;   
        PUCHAR  cPtr = NULL;   

        for (cPtr = (PUCHAR)KeAddSystemServiceTable;cPtr < (PUCHAR)KeAddSystemServiceTable + PAGE_SIZE;cPtr += 1 )   
        {   
                if (!MmIsAddressValid(cPtr))  continue;   

                ServiceTableAddress = *(PULONG)cPtr;   
                if (!MmIsAddressValid((PVOID)ServiceTableAddress)) continue;   

                if (memcmp((PVOID)ServiceTableAddress, (PVOID)&KeServiceDescriptorTable, 16) == 0)   
                {   
                        if ((PVOID)ServiceTableAddress == &KeServiceDescriptorTable) continue;   
                        ShadowTable = (PServiceDescriptorTableEntry_t)ServiceTableAddress;   
                        ShadowTable ++;  //就是这一句:我觉得可能有问题?? 应该不要这一句??求大侠们指点。
                        return ShadowTable;   
                }   
        }   
        return NULL;   
}

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

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 585
活跃值: (583)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
2
代码没错

如图


ShadowTable = (PServiceDescriptorTableEntry_t)ServiceTableAddress;   // 此时ShadowTable指向MainSSDT
ShadowTable ++;  // 此时ShadowTable指向KeServiceDescriptorTableShadow[1],也就是Win32kSSDT

建议把 Windows内核情景分析、ReactOS都看下
上传的附件:
2012-3-23 22:04
0
游客
登录 | 注册 方可回帖
返回