网上说通过_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
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)