无硬编码获取所有对象类型地址

本文探讨了如何在不使用硬编码的情况下,通过ObGetObjectType函数获取内核对象的类型地址。文章指出该函数依赖TypeIndex从ObTypeIndexTable查找,并以Win7 x64为例展示了相关的反汇编代码。通过修改rcx寄存器的值,可以动态获取对象类型的地址。最后,作者提供了封装好的解决方案。
摘要由CSDN通过智能技术生成
NTKERNELAPI PVOID NTAPI
ObGetObjectType(
      IN PVOID pObject
      );


void GetObjectTypeWin7x86()
{
	BOOLEAN i = 2;
	ULONG	j= 2;
	ULONG64 ObjectType;
	//
	while (ObGetObjectType(&i+0xC))
	{
		ObjectType = ObGetObjectType(&i + 0xC);//C来自于ObGetObjectType反汇编处的eax-0xC  win7 x86
		KdPrint(("对象类型[%d]=%wZ\n", j, ObjectType+0x8));
		i++;
		j++;
	}
			/*获取TypeIndex的值,解释一下为什么是减去0Ch。正常的计算应该是:
			object地址-Object_header的大小+TypeIndex的偏移,所以有:
			eax-0x18h+0x0Ch 即为 eax – 0x0Ch
			82a8f3fe 0fb640f4        movzx   eax,byte ptr [eax-0Ch]
			根据索引值在ObTypeIndexTable数组中找到对应的ObjectType。
			url:http://www.blogfshare.com/win7-obtypeindextable.html
			*/
}

void GetObjectTypeWin7x64()//0x18来的原理同上
{
	BOOLEAN i = 2;
	ULONG	j = 2;
	ULONG64 ObjectType;
	UNICODE_STRING ObjectName;
	RtlInitUnicodeString(&Obj
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值