-
-
[旧帖]
[原创]枚举内核对象目录信息
0.00雪花
-
发表于:
2012-3-22 18:33
3295
-
[旧帖] [原创]枚举内核对象目录信息
0.00雪花
Programming Windows Driver Model这本书中提供了一个工具叫DevView,
通过它可以很方便的查看设备对象的相关信息
不过在我的机器上使用却有问题,当我点击Device这个目录是DevView crash,于是就有了山寨的想法。
目前实现的比较简单,只是单纯的实现了枚举对象目录的功能,也没有实现应用层的交互,
虽然实现简单,功能单一,但是可以作为一个独立的模块知识与大家分享。由于没有实现应用层,就用debugview工具凑合看看把,为了体现对象目录是个树形结构,我稍微用了点分隔符号,表达个意思,下面看个截图(winXP sp2 虚拟机测试)
主要的知识点提一下
定义了两个结构
typedef struct _OBJECT_DIRECTORY_INFORMATION {
UNICODE_STRING Name;
UNICODE_STRING TypeName;
} OBJECT_DIRECTORY_INFORMATION, *POBJECT_DIRECTORY_INFORMATION;
参考了wrk-v1.2\public\sdk\inc\ntobapi.h中的定义
typedef struct _OBJECT_NODE
{
_OBJECT_NODE *NextNode;
_OBJECT_NODE *ChildNode;
WCHAR wsObjName[MAX_OBJ_NAME_LEN];
WCHAR wsTypeName[MAX_OBJ_TYPE_LEN];
}OBJECT_NODE, *POBJECT_NODE;
自定义的结构,用于保存树形结构对象的信息
两个枚举对象目录的API
extern "C"
NTSYSCALLAPI
NTSTATUS
NTAPI
ZwOpenDirectoryObject ( __out PHANDLE DirectoryHandle,
__in ACCESS_MASK DesiredAccess,
__in POBJECT_ATTRIBUTES ObjectAttributes
);
extern "C"
NTSYSAPI
NTSTATUS
NTAPI
ZwQueryDirectoryObject ( __in HANDLE DirectoryHandle, __out_bcount_opt(Length) PVOID Buffer,
__in ULONG Length,
__in BOOLEAN ReturnSingleEntry,
__in BOOLEAN RestartScan,
__inout PULONG Context,
__out_opt PULONG ReturnLength
);
由于DDK的头文件没有定义,那就手动导出函数声明。
描述以下代码流程:
在DriverEntry函数中直接实现递归枚举对象->保存对象信息->打印->卸载清除对象信息,
额外保存对象信息是为了接下来和应用层交互,在这个例子中可能还没体现出来。
整体结构比较简单,直接上代码
myobj.rar
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)