首页
论坛
专栏
课程

[求助]新建调试对象类型 NtDebugActiveProcess中ObReferenceObjectByHandle返回错误

2017-7-28 19:53 2800

[求助]新建调试对象类型 NtDebugActiveProcess中ObReferenceObjectByHandle返回错误

2017-7-28 19:53
2800

下面代码

POBJECT_TYPE DbgkDebugObjectType;//自建的OBJECT对象
POBJECT_TYPE SysDebugObject;//系统的OBJECT对象

//PS:SysDebugObject这个是获取系统原始的

/////////////////////创建调试对象的代码片段//////////////////////////////////////
RtlInitUnicodeString(&Name, L"NewDebugObject");
			RtlMoveMemory(&oti,&SysDebugObject->TypeInfo,sizeof(OBJECT_TYPE_INITIALIZER ));
			oti.Length                    = sizeof (oti);
			oti.SecurityRequired          = TRUE;
			oti.InvalidAttributes         = 0;
			oti.PoolType                  = NonPagedPool;
			oti.DeleteProcedure           = SysDebugObject->TypeInfo.DeleteProcedure;
			oti.CloseProcedure            = SysDebugObject->TypeInfo.CloseProcedure;
			oti.ValidAccessMask           = DEBUG_ALL_ACCESS;
			oti.GenericMapping            = GenericMapping;
			oti.DefaultPagedPoolCharge    = 0;
			oti.DefaultNonPagedPoolCharge = 0;
			Status = ObCreateObjectType(&Name, &oti, 0, &DbgkDebugObjectType);//这里是创建成功的
///////////////////////////////////////////////////////////
			
			
			
///////////////////////////NtDebugActiveProcess的代码片段///////////////////////////////
	Status = ObReferenceObjectByHandle(DebugObjectHandle,
		DEBUG_PROCESS_ASSIGN,
		DbgkDebugObjectType,
		PreviousMode,
		&DebugObject,
		NULL);
		//就是这个ObReferenceObjectByHandle出错返回STATUS_OBJECT_TYPE_MISMATCH
		//想跟进去看哪里出错,但是好像系统下了异常,进去就改成NtReadfile访问的
		//参数什么的不懂看,感觉很乱
//下面是自建的DbgkDebugObjectType的结构体数据
lkd> dt _OBJECT_TYPE 88694270
ntdll!_OBJECT_TYPE
   +0x000 TypeList         : _LIST_ENTRY [ 0x88694270 - 0x88694270 ]
   +0x008 Name             : _UNICODE_STRING "NewDebugObject"
   +0x010 DefaultObject    : (null) 
   +0x014 Index            : 0x2c ','
   +0x018 TotalNumberOfObjects : 1
   +0x01c TotalNumberOfHandles : 1
   +0x020 HighWaterNumberOfObjects : 1
   +0x024 HighWaterNumberOfHandles : 1
   +0x028 TypeInfo         : _OBJECT_TYPE_INITIALIZER
   +0x078 TypeLock         : _EX_PUSH_LOCK
   +0x07c Key              : 0x69746e41
   +0x080 CallbackList     : _LIST_ENTRY [ 0x886942f0 - 0x886942f0 ]
lkd> DT _OBJECT_TYPE_INITIALIZER   88694270+28
ntdll!_OBJECT_TYPE_INITIALIZER
   +0x000 Length           : 0x50
   +0x002 ObjectTypeFlags  : 0x8 ''
   +0x002 CaseInsensitive  : 0y0
   +0x002 UnnamedObjectsOnly : 0y0
   +0x002 UseDefaultObject : 0y0
   +0x002 SecurityRequired : 0y1
   +0x002 MaintainHandleCount : 0y0
   +0x002 MaintainTypeList : 0y0
   +0x002 SupportsObjectCallbacks : 0y0
   +0x004 ObjectTypeCode   : 0
   +0x008 InvalidAttributes : 0
   +0x00c GenericMapping   : _GENERIC_MAPPING
   +0x01c ValidAccessMask  : 0x1f000f
   +0x020 RetainAccess     : 0
   +0x024 PoolType         : 0 ( NonPagedPool )
   +0x028 DefaultPagedPoolCharge : 0
   +0x02c DefaultNonPagedPoolCharge : 0x30
   +0x030 DumpProcedure    : (null) 
   +0x034 OpenProcedure    : (null) 
   +0x038 CloseProcedure   : 0x83ec4d37     void  nt!DbgkpCloseObject+0
   +0x03c DeleteProcedure  : 0x83e94c24     void  nt!FsRtlInitializeOplock+0
   +0x040 ParseProcedure   : (null) 
   +0x044 SecurityProcedure : 0x83e7c946     long  nt!SeDefaultObjectMethod+0
   +0x048 QueryNameProcedure : (null) 
   +0x04c OkayToCloseProcedure : (null)

系统是WIN7 SP1   

麻烦谁能告诉我下为什么会出错啊,网上搜索居然没人碰到这情况?



[公告]LV6级以上的看雪会员可以免费获得《2019安全开发者峰会》门票一张!!

最新回复 (6)
hzqst 3 2017-7-28 21:04
2
0
https://git.oschina.net/hzqst/FuckTP  自己对着看吧
林栩 2017-7-28 22:18
3
0
hzqst https://git.oschina.net/hzqst/FuckTP 自己对着看吧
看不出什么呢,不知道是不是我只HOOK  DebugActiveProcess而已,其他地方没HOOK,所以造成其他地方的访问对象不匹配?
hzqst 3 2017-7-28 22:35
4
0
林栩 看不出什么呢,不知道是不是我只HOOK DebugActiveProcess而已,其他地方没HOOK,所以造成其他地方的访问对象不匹配?
我那份代码里就是自建调试对象,实测xp~win10都能用,根本没有hook,也不需要过pg
林栩 2017-7-28 23:08
5
0
hzqst 我那份代码里就是自建调试对象,实测xp~win10都能用,根本没有hook,也不需要过pg
好吧,百度搜总是出现你这套代码,我还是用你的慢慢看看
gabpfiugdu 2018-8-14 00:47
6
0
hzqst https://git.oschina.net/hzqst/FuckTP 自己对着看吧
关键代码隐藏....
今天不吃面 2019-5-15 15:32
7
0
hzqst https://git.oschina.net/hzqst/FuckTP 自己对着看吧
老哥,请教个问题
DbgkDebugObjectType是个全局量吧,如果TP把这个的里面的GenericMapping的权限全部清零了,
是不是不仅无法调试受TP保护的进程,而是之后系统上所有新建调试都会失效
游客
登录 | 注册 方可回帖
返回