首页
社区
课程
招聘
[求助]win10 64位的SSDT地址计算公式?
发表于: 2018-3-1 17:10 4182

[求助]win10 64位的SSDT地址计算公式?

2018-3-1 17:10
4182

typedef struct _SYSTEM_SERVICE_TABLE{  
    PVOID          ServiceTableBase;  
    PVOID          ServiceCounterTableBase;  
    ULONGLONG      NumberOfServices;  
    PVOID          ParamTableBase;  
} SYSTEM_SERVICE_TABLE, *PSYSTEM_SERVICE_TABLE;  
PSYSTEM_SERVICE_TABLE KeServiceDescriptorTable;  
  
ULONGLONG MyGetKeServiceDescriptorTable()  
{  
    PUCHAR StartSearchAddress = (PUCHAR)__readmsr(0xC0000082);  
    PUCHAR EndSearchAddress = StartSearchAddress + 0x500;  
    PUCHAR i = NULL;  
    UCHAR b1 = 0, b2 = 0, b3 = 0;  
    ULONG templong = 0;  
    ULONGLONG addr = 0;  
  
    for (i = StartSearchAddress; i < EndSearchAddress; i++)  
    {  
        if (MmIsAddressValid(i) && MmIsAddressValid(i + 1) && MmIsAddressValid(i + 1))  
        {  
            b1 = *i;  
            b2 = *(i + 1);  
            b3 = *(i + 2);  
            if (b1 == 0x4c && b2 == 0x8d && b3 == 0x15) //4c8d15  
            {  
                memcpy(&templong, i + 3, 4);  
                addr = (ULONGLONG)templong + (ULONGLONG)i + 7;  
                return addr;  
            }  
        }  
    }  
    return 0;  
}  
  
ULONGLONG GetSSDTFuncCurAddr(ULONG id)  
{  
    LONG dwtmp = 0;  
    PULONG ServiceTableBase = NULL;  
    ServiceTableBase = (PULONG)KeServiceDescriptorTable->ServiceTableBase;  
    dwtmp = ServiceTableBase[id];  
    dwtmp = dwtmp >> 4;  
    return (LONGLONG)dwtmp + (ULONGLONG)ServiceTableBase;  
}  这个方法

这个方法并没有卵用 偏差太大了


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

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 1480
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
ULONGLONG  GetSSDTFunctionAddress(ULONG  id)
{
       LONG  dwtmp  =  0;
       PULONG  ServiceTableBase  =  NULL;
       PSYSTEM_SERVICE_TABLE  ssdt  =  (PSYSTEM_SERVICE_TABLE)GetKeServiceDescriptorTable64();
       ServiceTableBase  =  (PULONG)ssdt->ServiceTableBase;
       dwtmp  =  ServiceTableBase[id];
       dwtmp  =  dwtmp  >>  4;
       return  dwtmp  +  (ULONGLONG)ServiceTableBase;
}
代码不全,大概就这逻辑,你自己在想想
2018-4-1 11:01
0
游客
登录 | 注册 方可回帖
返回
//