首页
社区
课程
招聘
[求助]win2k3 x64 SSDT函数地址?求内核大牛解惑
发表于: 2016-2-5 18:00 3889

[求助]win2k3 x64 SSDT函数地址?求内核大牛解惑

2016-2-5 18:00
3889
win7 x64 SSDT 偏移计算公式是
SSDT基址+表项值>>4

2003 x64呢?
在网上看说2003上偏移的计算是
SSDT基址+表项值&0xFFFFFFF0

win7 x64下我的计算方法如下
typedef struct _SSDTStruct
{
	LONG* pServiceTable;
	PVOID pCounterTable;
#ifdef _WIN64
	ULONGLONG NumberOfServices;
#else
	ULONG NumberOfServices;
#endif
	PCHAR pArgumentTable;
}SSDTStruct,pSSDTStruct;

PVOID SSDT::GetFunctionAddress(const char* apiname,int SsdtIndex)
{
	//read address from SSDT
	pSSDTStruct SSDT = (pSSDTStruct)GetKeServiceDescriptorTable64();
	if (!SSDT)
	{
		return 0;
	}
	ULONG_PTR SSDTbase = (ULONG_PTR)SSDT->pServiceTable;
	if (!SSDTbase)
	{
		return 0;
	}
#ifdef _WIN64
	return [COLOR="Red"](PVOID)(((SSDT->pServiceTable[SsdtIndex] >> 4) + SSDTbase);[/COLOR]

#else
	return (PVOID)SSDT->pServiceTable[SsdtIndex];
#endif
}

win7 x64的计算结果没问题,但是2003 64位结果怎么都不对
求大牛指点?

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 78
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
调试了下
还是Nt函数和Zw函数地址的理解问题,汗了
ln nt!KiServiceTable+(poi(nt!KiServiceTable+4*<syscall nbr>)&0x00000000`ffffffff)
这是2003 x64的公式
2016-2-5 18:32
0
游客
登录 | 注册 方可回帖
返回
//