首页
社区
课程
招聘
[旧帖] [求助]win7中奇怪的_OBJECT_HEADER 0.00雪花
发表于: 2009-9-24 12:25 9376

[旧帖] [求助]win7中奇怪的_OBJECT_HEADER 0.00雪花

2009-9-24 12:25
9376
在win7中,根据_OBJECT_HEADER获得对象类型失败,经过检查,发现win7中的_OBJECT_HEADER结构和xp下有所不同
kd> !object 8525cd48
Object: 8525cd48  Type: (851af660) Thread
    ObjectHeader: 8525cd30 (new version)
    HandleCount: 0  PointerCount: 1

kd> dt _OBJECT_HEADER 8525cd30
ntdll!_OBJECT_HEADER
   +0x000 PointerCount     : 1
   +0x004 HandleCount      : 0
   +0x004 NextToFree       : (null)
   +0x008 Type             : (null)
   +0x00c NameInfoOffset   : 0x8 ''
   +0x00d HandleInfoOffset : 0 ''
   +0x00e QuotaInfoOffset  : 0 ''
   +0x00f Flags            : 0x2 ''
   +0x010 ObjectCreateInfo : 0x00000001 _OBJECT_CREATE_INFORMATION
   +0x010 QuotaBlockCharged : 0x00000001
   +0x014 SecurityDescriptor : 0x88a05c3e
   +0x018 Body             : _QUAD

kd> dt _OBJECT_HEADER 8525cd30
ntdll!_OBJECT_HEADER
   +0x000 PointerCount     : 1
   +0x004 HandleCount      : 0
   +0x004 NextToFree       : (null)
   +0x008 Type             : (null)
   +0x00c NameInfoOffset   : 0x8 ''
   +0x00d HandleInfoOffset : 0 ''
   +0x00e QuotaInfoOffset  : 0 ''
   +0x00f Flags            : 0x2 ''
   +0x010 ObjectCreateInfo : 0x00000001 _OBJECT_CREATE_INFORMATION
   +0x010 QuotaBlockCharged : 0x00000001
   +0x014 SecurityDescriptor : 0x88a05c3e
   +0x018 Body             : _QUAD

可以看到win7中的Type为null,而非xp中的_OBJECT_TYPE
但通过!object命令可获取类型为851af660
于是我查看了一下
kd> dd 851af660
851af660  851af660 851af660 000e000c 88a012c8
851af670  00000000 00000008 00000228 000003b1
851af680  0000023d 00000414 004a0050 00000004
851af690  000000b0 00020048 00020437 00120800
851af6a0  001fffff 001fffff 00100800 00000000
851af6b0  00000000 000002e8 00000000 83e6c891
851af6c0  00000000 83e53d8c 00000000 83e7ed13
851af6d0  00000000 00000000 00000000 65726854

kd> dt _OBJECT_TYPE 851af660
ntdll!_OBJECT_TYPE
   +0x000 Mutex            : _ERESOURCE
   +0x038 TypeList         : _LIST_ENTRY [ 0x20437 - 0x120800 ]
   +0x040 Name             : _UNICODE_STRING "--- memory read error at address 0x001fffff ---"
   +0x048 DefaultObject    : 0x00100800
   +0x04c Index            : 0
   +0x050 TotalNumberOfObjects : 0
   +0x054 TotalNumberOfHandles : 0x2e8
   +0x058 HighWaterNumberOfObjects : 0
   +0x05c HighWaterNumberOfHandles : 0x83e6c891
   +0x060 TypeInfo         : _OBJECT_TYPE_INITIALIZER
   +0x0ac Key              : 0
   +0x0b0 ObjectLocks      : [32] _EX_PUSH_LOCK

发现通过Type获取类型已经不能用了,但不知道windbg的!object命令如何获取对象类型的?有人研究过这个吗?

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 522
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
WIN7下的TYPE 偏移量好象 加了4
2009-9-24 13:00
0
雪    币: 203
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
加4好像仍然不对,能详细说说吗?
2009-9-24 13:08
0
雪    币: 212
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
在Windows7中_object_header、_object_type及其其它与这些相关的结构,这块变化应该算比较大的,Vista及其以下版本都是在_object_header结构中保存object_type指针,在Windows7中Object_header只保存Object_type的索引。但Windows7中添加了一个函数,ObGetObjectType,返回Object_type对象指针,所以操作Object_type不需要硬编码了。

NTKERNELAPI
PVOID
NTAPI
ObGetObjectType(
IN PVOID pObject
);

在Win7下操作ObjectType反而方便了
2009-9-24 13:20
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
5
同上,正是如此,win7下保留的是typeindex,然后让你用obget来获取。
2009-9-24 13:52
0
雪    币: 251
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
的确不太一样了
0:000> dt ntkrnlmp!_OBJECT_HEADER
+0x000 PointerCount : Int4B
+0x004 HandleCount : Int4B
+0x004 NextToFree : Ptr32 Void
+0x008 Lock : _EX_PUSH_LOCK
+0x00c TypeIndex : UChar
+0x00d TraceFlags : UChar
+0x00e InfoMask : UChar
+0x00f Flags : UChar
+0x010 ObjectCreateInfo : Ptr32 _OBJECT_CREATE_INFORMATION
+0x010 QuotaBlockCharged : Ptr32 Void
+0x014 SecurityDescriptor : Ptr32 Void
+0x018 Body : _QUAD
0:000> dt ntkrnlmp!_OBJECT_TYPE
+0x000 TypeList : _LIST_ENTRY
+0x008 Name : _UNICODE_STRING
+0x010 DefaultObject : Ptr32 Void
+0x014 Index : UChar
+0x018 TotalNumberOfObjects : Uint4B
+0x01c TotalNumberOfHandles : Uint4B
+0x020 HighWaterNumberOfObjects : Uint4B
+0x024 HighWaterNumberOfHandles : Uint4B
+0x028 TypeInfo : _OBJECT_TYPE_INITIALIZER
+0x078 TypeLock : _EX_PUSH_LOCK
+0x07c Key : Uint4B
+0x080 CallbackList : _LIST_ENTRY
2009-9-24 14:19
0
雪    币: 203
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
受益匪浅,多谢各位相助
2009-9-24 17:03
0
雪    币: 248
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
问LZ,WINDOWS7下怎么进行本地内核调试?
2009-10-14 19:49
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
9
nt!ObGetObjectType
直接从中取出 nt!ObTypeIndexTable 数组,操作即可, +0x008处即是 ObpTypeObjectType

etc...
2009-10-14 22:39
0
游客
登录 | 注册 方可回帖
返回
//