首页
论坛
课程
招聘
雪    币: 325
活跃值: 活跃值 (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝

[系统底层] [求助]请教keyhandle 获得注册表全路径的问题

2008-10-11 14:48 4373

[系统底层] [求助]请教keyhandle 获得注册表全路径的问题

2008-10-11 14:48
4373
网上说通过_CM_KEY_CONTROL_BLOCK就可以得到全路径。

我在网上搜索很久,也自己试验了一下。通过

ObReferenceObjectByHandle(hKey,....)
得到
_CM_KEY_BODY
得到
_CM_KEY_CONTROL_BLOCK
下的_CM_NAME_CONTROL_BLOCK 然后再得到Name的地址但是传出的结果是null

请教大侠 我的方法是否正确?全路径是在那个位置么?谢谢

附:
typedef struct _CM_KEY_BODY {//KEY BODY
        ULONG Type;                // "ky02"
        PVOID KeyControlBlock;
        PVOID NotifyBlock;
        PEPROCESS Process;         // the owner process
        LIST_ENTRY KeyBodyList; // key_nodes using the same kcb
} CM_KEY_BODY, *PCM_KEY_BODY;
kd> dt nt!_CM_KEY_CONTROL_BLOCK 0xe1033008
+0x000 RefCount : 3
+0x002 Flags : 0x2c
+0x004 ExtFlags : 0y00000000 (0)
+0x004 PrivateAlloc : 0y1
+0x004 Delete : 0y0
+0x004 DelayedCloseIndex : 0y100000000000 (0x800)
+0x004 TotalLevels : 0y0000000001 (0x1)
+0x008 KeyHash : _CM_KEY_HASH
+0x008 ConvKey : 0xd936a631
+0x00c NextHash : (null)
>> +0x010 KeyHive : 0xe102d008 _HHIVE
+0x014 KeyCell : 0x20
+0x018 ParentKcb : (null)
>> +0x01c NameBlock : 0xe100b4f8 _CM_NAME_CONTROL_BLOCK
+0x020 CachedSecurity : 0xe1010438 _CM_KEY_SECURITY_CACHE
+0x024 ValueCache : _CACHED_CHILD_LIST
+0x02c IndexHint : 0x00000002 _CM_INDEX_HINT_BLOCK
+0x02c HashKey : 2
+0x02c SubKeyCount : 2
+0x030 KeyBodyListHead : _LIST_ENTRY [ 0xe1000734 - 0xe1000734 ]
+0x030 FreeListEntry : _LIST_ENTRY [ 0xe1000734 - 0xe1000734 ]
+0x038 KcbLastWriteTime : _LARGE_INTEGER 0x1c8468f`fafe8af4
+0x040 KcbMaxNameLen : 0xe
+0x042 KcbMaxValueNameLen : 0
+0x044 KcbMaxValueDataLen : 0

kd> dt nt!_CM_NAME_CONTROL_BLOCK 0xe100b4f8
+0x000 Compressed : 0x1 ''
+0x002 RefCount : 1
+0x004 NameHash : _CM_NAME_HASH
+0x004 ConvKey : 0xd936a631
+0x008 NextHash : (null)
+0x00c NameLength : 8
>> +0x00e Name : [1] 0x4552

HWS计划·2020安全精英夏令营来了!我们在华为松山湖欧洲小镇等你

最新回复 (1)
雪    币: 441
活跃值: 活跃值 (20)
能力值: ( LV12,RANK:600 )
在线值:
发帖
回帖
粉丝
Sysnap 活跃值 14 2008-10-11 15:16
2
0
status = ObReferenceObjectByHandle(KeyHandle, KEY_READ, NULL, KernelMode, &KeyBody, NULL);
        if (!NT_SUCCESS(status))
                goto end;
               
        status_queryName = ObQueryNameString(KeyBody,KeyPath,0x256,&RetSize);
        if (!NT_SUCCESS(status_queryName))
                goto end;
游客
登录 | 注册 方可回帖
返回