-
-
[分享]关于ObOpenObjectByPointer对某些对象的引用失败问题
-
发表于: 2011-9-21 11:48 4323
-
现象:返回参数无效。
我需要对一个端口对象进行Object -> Handle。最开始这样处理:
__try
{
Status = ObOpenObjectByPointer(Object,
OBJ_KERNEL_HANDLE,
(PACCESS_STATE) NULL,
(ObjectType == 0) ? PORT_ALL_ACCESS : THREAD_ALL_ACCESS,
NULL,
KernelMode,
&NewHandle
);
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
Status = GetExceptionCode();
}
返回参数无效,对照WRK中该函数的实现逻辑,发现任何参数逻辑上应该正确了
通过跟踪ObOpenObjectByPointer函数,发现如下:
805bccce 8b450c mov eax,dword ptr [ebp+0Ch] ----> 我的句柄属性 (OBJ_KERNEL_HANDLE,0x200)
805bccd1 854164 test dword ptr [ecx+64h],eax ----> 检查指定的属性有效么? (ECX+64)
805bccd4 7421 je nt!ObOpenObjectByPointer+0x8b (805bccf7) ----> 不满足,跳转
805bccd6 8d856cffffff lea eax,[ebp-94h] ----> AccessState释放判断
805bccdc 3945fc cmp dword ptr [ebp-4],eax
805bccdf 7508 jne nt!ObOpenObjectByPointer+0x7d (805bcce9)
805bcce1 ff75fc push dword ptr [ebp-4]
805bcce4 e8914e0300 call nt!SeDeleteAccessState (805f1b7a)
805bcce9 be0d0000c0 mov esi,0C000000Dh ----> 报参数无效
805bccee 8bcb mov ecx,ebx
805bccf0 e889a9f6ff call nt!ObfDereferenceObject (8052767e)
以下为ECX+64:
+0x060 TypeInfo : _OBJECT_TYPE_INITIALIZER
+0x000 Length : 0x4c
+0x002 UseDefaultObject : 0x1 ''
+0x003 CaseInsensitive : 0 ''
+0x004 InvalidAttributes : 0x7b2 ----> OBJ_VALID_ATTRIBUTES
解决办法:
将OBJ_KERNEL_HANDLE修改为0
原因,部分对象的对象无效属性为全部的属性。该为0绕过这个检查
我需要对一个端口对象进行Object -> Handle。最开始这样处理:
__try
{
Status = ObOpenObjectByPointer(Object,
OBJ_KERNEL_HANDLE,
(PACCESS_STATE) NULL,
(ObjectType == 0) ? PORT_ALL_ACCESS : THREAD_ALL_ACCESS,
NULL,
KernelMode,
&NewHandle
);
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
Status = GetExceptionCode();
}
返回参数无效,对照WRK中该函数的实现逻辑,发现任何参数逻辑上应该正确了
通过跟踪ObOpenObjectByPointer函数,发现如下:
805bccce 8b450c mov eax,dword ptr [ebp+0Ch] ----> 我的句柄属性 (OBJ_KERNEL_HANDLE,0x200)
805bccd1 854164 test dword ptr [ecx+64h],eax ----> 检查指定的属性有效么? (ECX+64)
805bccd4 7421 je nt!ObOpenObjectByPointer+0x8b (805bccf7) ----> 不满足,跳转
805bccd6 8d856cffffff lea eax,[ebp-94h] ----> AccessState释放判断
805bccdc 3945fc cmp dword ptr [ebp-4],eax
805bccdf 7508 jne nt!ObOpenObjectByPointer+0x7d (805bcce9)
805bcce1 ff75fc push dword ptr [ebp-4]
805bcce4 e8914e0300 call nt!SeDeleteAccessState (805f1b7a)
805bcce9 be0d0000c0 mov esi,0C000000Dh ----> 报参数无效
805bccee 8bcb mov ecx,ebx
805bccf0 e889a9f6ff call nt!ObfDereferenceObject (8052767e)
以下为ECX+64:
+0x060 TypeInfo : _OBJECT_TYPE_INITIALIZER
+0x000 Length : 0x4c
+0x002 UseDefaultObject : 0x1 ''
+0x003 CaseInsensitive : 0 ''
+0x004 InvalidAttributes : 0x7b2 ----> OBJ_VALID_ATTRIBUTES
解决办法:
将OBJ_KERNEL_HANDLE修改为0
原因,部分对象的对象无效属性为全部的属性。该为0绕过这个检查
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
他的文章
看原图
赞赏
雪币:
留言: