首页
论坛
课程
招聘
[分享]一种获取内核模块信息的方式
2021-9-28 11:18 2471

[分享]一种获取内核模块信息的方式

2021-9-28 11:18
2471
BOOL GetNtInformation(
	ULONG_PTR* ntBase,
	ULONG_PTR* ntSize
)
{
	if (!ntBase || !ntSize) return false;

	LARGE_INTEGER     ntTemp = { 0 };
	PIMAGE_NT_HEADERS pNt    = nullptr;
	PIMAGE_DOS_HEADER pDos   = nullptr;
	auto pFind0 = (ULONG_PTR)MmGetSystemRoutineAddress;
	auto pFind  = (PUCHAR)pFind0;

	for (unsigned int i = 0; i < 0x30; i++)
	{
		if (pFind[i] == 0x48 && pFind[i + 1] == 0x8B && pFind[i + 2] == 0x0D) {
			ntTemp.QuadPart = (ULONG_PTR)&pFind[i + 7];
			ntTemp.LowPart += *(LONG*)&pFind[i + 3];
			break;
		}
	}

	if (!ntTemp.QuadPart) return false;

	pDos = (PIMAGE_DOS_HEADER)(*(ULONG_PTR*)ntTemp.QuadPart);
	if (!pDos) return false;

	pNt = (PIMAGE_NT_HEADERS)((ULONG_PTR)pDos + pDos->e_lfanew);
	if (!pNt || pNt->Signature != IMAGE_NT_SIGNATURE)
		return false;

	__try {
		*ntBase = (ULONG_PTR)pDos;
		*ntSize = pNt->OptionalHeader.SizeOfImage;
	}
	__except (EXCEPTION_EXECUTE_HANDLER) {
		return false;
	}

	return true;
}



[公告] 欢迎大家踊跃尝试高研班11月试题,挑战自己的极限!

收藏
点赞0
打赏
分享
最新回复 (1)
雪    币: 218
活跃值: 活跃值 (928)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
はつゆき 活跃值 2021-9-28 12:09
2
1
这么做,似乎没什么意义
游客
登录 | 注册 方可回帖
返回