最近在研究ObOpenObjectByPointer这个调用非常频繁的函数..
最方便的办法自然就是去HOOK他啦
ObOpenObjectByPointer这个函数声明如下:
NTSTATUS ObOpenObjectByPointer(
_In_ PVOID Object,
_In_ ULONG HandleAttributes,
_In_opt_ PACCESS_STATE PassedAccessState,
_In_ ACCESS_MASK DesiredAccess,
_In_opt_ POBJECT_TYPE ObjectType,
_In_ KPROCESSOR_MODE AccessMode,
_Out_ PHANDLE Handle
);
其中的ObjectType指定了Object的类型
其定义在wdm.h中
extern POBJECT_TYPE *CmKeyObjectType;
extern POBJECT_TYPE *IoFileObjectType;
extern POBJECT_TYPE *ExEventObjectType;
extern POBJECT_TYPE *ExSemaphoreObjectType;
extern POBJECT_TYPE *TmTransactionManagerObjectType;
extern POBJECT_TYPE *TmResourceManagerObjectType;
extern POBJECT_TYPE *TmEnlistmentObjectType;
extern POBJECT_TYPE *TmTransactionObjectType;
extern POBJECT_TYPE *PsProcessType;
extern POBJECT_TYPE *PsThreadType;
extern POBJECT_TYPE *SeTokenObjectType;
仔细看看这些定义
一直以来大家都是通过PsProcessType或PsThreadType来保护自己的进程.现在看来有别的东西可以一起保护了..
IoFileObjectType -> 对文件保护
CmKeyObjectType -> 对注册表保护
SeTokenObjectType -> 权限审核
其中标红的,是CmKeyObjectType
从名字可以看出来.通过注册表键句柄获取注册表对象.
至于在做什么.通过DesiredAccess想来可以做下过滤
还没仔细看..但是突然发现..使用xp的编译器去编译.会提示找不到这个类型的...
那就明白了 这部分代码只有在是WIN7下才有~
还不知道原因.但是这说明这个函数被调用的将更频繁了.谁能看看该怎么获取object的内容呢...
来源:
皓皓的地盘 -> ObOpenObjectByPointer在win7下似乎可以监控注册表了
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!