首页
论坛
课程
招聘
雪    币: 237
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝

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

2018-3-1 15:43 2369

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

2018-3-1 15:43
2369

 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并没有卵用 不知道是怎么回事
最新回复 (3)
雪    币: 1250
活跃值: 活跃值 (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
小光前辈 活跃值 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)]
雪    币: 11
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
MICROT 活跃值 2018-9-25 09:01
3
0
楼主,你代码是怎么发的?
雪    币: 8578
活跃值: 活跃值 (488)
能力值: ( LV5,RANK:250 )
在线值:
发帖
回帖
粉丝
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编辑 ,原因:
游客
登录 | 注册 方可回帖
返回