首页
论坛
专栏
课程

[调试逆向] [系统底层] [商业保护] [求助][求助]请大佬教一下win10 64 1709 SSDT表地址如何获取

2018-3-1 15:43 1774

[调试逆向] [系统底层] [商业保护] [求助][求助]请大佬教一下win10 64 1709 SSDT表地址如何获取

2018-3-1 15:43
1774

 ULONGLONG GetKeServiceDescriptorTable64()
 {
     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 + 2))
         {
             b1 = *i;
             b2 = *(i + 1);
             b3 = *(i + 2);
             if (b1 == 0x4c && b2 == 0x8d && b3 == 0x15) 
                 // 4c8d15 KeServiceDescriptorTable
                 // 4c8d1d KeServiceDescriptorTableShadow
             {
                 memcpy(&templong, i + 3, 4);
                 addr = (ULONGLONG)templong + (ULONGLONG)i + 7;
                 return addr;
             }
         }
     }
     return 0;
 }
这个方法对于WIN10并没有卵用 不知道是怎么回事


[公告]安全服务和外包项目请将项目需求发到看雪企服平台:https://qifu.kanxue.com

最新回复 (3)
小光前辈 2018-9-25 01:36
2
0
我看了下特征码没变,还可以用win10  1709。可以正常SSDT HOOK。
//1709
//fffff802`655160be         4c8d15bb071800  lea    r10, [nt!KeServiceDescriptorTable(fffff802`65696880)]
//fffff802`655160c5         4c8d1df4951600  lea     r11, [nt!KeServiceDescriptorTableShadow(fffff802`6567f6c0)]
MICROT 2018-9-25 09:01
3
0
楼主,你代码是怎么发的?
hzqst 3 2018-9-25 09:21
4
0
PSYSTEM_SERVICE_DESCRIPTOR_TABLE GetSSDTBase(void)
{
#ifdef AMD64
	PIMAGE_NT_HEADERS pHdr;
	PIMAGE_SECTION_HEADER pFirstSec;
	PIMAGE_SECTION_HEADER pSec;
	PUCHAR ntosBase;

	ntosBase = (PUCHAR)g_ntosbase;

	// Already found
	if (g_SSDT != NULL)
		return g_SSDT;

	if (!ntosBase)
		return NULL;

	pHdr = RtlImageNtHeader(ntosBase);
	pFirstSec = (PIMAGE_SECTION_HEADER)(pHdr + 1);
	for (pSec = pFirstSec; pSec < pFirstSec + pHdr->FileHeader.NumberOfSections; pSec++)
	{
		// Non-paged, non-discardable, readable sections
		// Probably still not fool-proof enough...
		if (pSec->Characteristics & IMAGE_SCN_MEM_NOT_PAGED &&
			pSec->Characteristics & IMAGE_SCN_MEM_EXECUTE &&
			!(pSec->Characteristics & IMAGE_SCN_MEM_DISCARDABLE) &&
			(*(PULONG)pSec->Name != 'TINI') &&
			(*(PULONG)pSec->Name != 'EGAP'))
		{
			PVOID pFound = NULL;

			// KiSystemServiceRepeat pattern
			UCHAR pattern[] = "\x4c\x8d\x15\xcc\xcc\xcc\xcc\x4c\x8d\x1d\xcc\xcc\xcc\xcc\xf7";
			NTSTATUS status = BBSearchPattern(pattern, 0xCC, sizeof(pattern) - 1, ntosBase + pSec->VirtualAddress, pSec->Misc.VirtualSize, &pFound);
			if (NT_SUCCESS(status))
			{
				g_SSDT = (PSYSTEM_SERVICE_DESCRIPTOR_TABLE)((PUCHAR)pFound + *(PULONG)((PUCHAR)pFound + 3) + 7);
				return g_SSDT;
			}
		}
	}
	return NULL;
#else
	return KeServiceDescriptorTable;
#endif
}

from https://github.com/DarthTon/Blackbone/
still work for 1803
最后于 2018-9-25 09:22 被hzqst编辑 ,原因:
游客
登录 | 注册 方可回帖
返回