Windows对象管理 - 图1

使用提升权限运行Winobj,并转换到ObjectType目录,然后就可以看到完整的对象类型列表。

Windows对象管理 - 图2

Windows NT 暴露的执行对象包括及操作的API见Windows对象管理。 # 对象结构 Windows对象管理 - 图3 每个对象有它的类型,由头中指针决定,指针指向一张表,表内是所有类型。每种类型由对应的各类操作方法,内核漏洞利用的手法中经常可以看到把该指针指向0x0或者修改类型对象方法的指针等。 # 类型对象 Windows对象管理 - 图4 ## 对象方法 每种类型有对应的各类操作方法,内核漏洞利用的手法中经常可以看到把该指针指向0x0或者修改类型对象方法的指针等。 Windows对象管理 - 图5 Windows对象管理 - 图6 Windows对象管理 - 图7 # 对象句柄 + 当一个进程根据名称来创建或者打开一个对象时,它接收到一个句柄,代表了对此对象的访问,同时对象的句柄计数和引用计数都会加1。通过句柄访问来访问一个对象,要比直接使用名称来访问对象快得多,因为对象管理器可以跳过名称查找过程而直接找到目标对象。 + 内核模式代码可直接通过对象指针来使用对象,此时对象的引用计数会加1。当句柄计数减到0的时候,对象管理器从它的全局名字空间中删除该对象的名称,这样删除以后,可以防止再有进程打开指向该对象的句柄。当引用计数减到0的时候,对象管理器就会将它从内存中删除。 + 当一个进程创建一个对象或者打开一个指向已有对象的句柄时,该进程必须要指定一组期望的访问权限。当一个进程打开一个对象句柄时,对象管理器调用安全引用监视器。安全引用监视器检查该对象的安全描述符是否允许该进程所请求的访问类型,如果允许的话,引用监视器返回一组准许的访问权限,同时对象管理器将这些权限存放在它所创建的对象句柄中。此后,该进程要使用此句柄时,对象管理器快速地检查这一组存储于句柄中的准许的访问权限。 句柄表 Windows对象管理 - 图8 Windows对象管理 - 图9 ** 查看句柄** Windows对象管理 - 图10 Windows对象管理 - 图11 # 对象名称 对象名(Object name)是一个对象的描述性标识。对象管理子系统保持一个已经用于表示对象的名字列表,映射每个名字到对象实例。实际上大多数访问对象的行为是通过句柄;通过对象名来查找对象实例仅发生在创建对象时、跨进程共享一个对象时。

Windows对象管理 - 图12

对象属于名字空间(Namespace). 每个用户会话(user session)是一个名字空间。这使得多个客户同时运行一个应用程序而不会发生干扰。在所有名字空间共享的对象属于GLOBAL命名空间。全局命名空间使得多个客户会话间的进程可以通信。例如,一个客户/服务器使用互斥锁来同步,服务器模块在全局命名空间创建一个互斥锁对象,然后客户进程使用”Global\”前缀来打开这个互斥锁对象。
  1. // 在全局命名空间创建一个event对象CSAPP:
  2. CreateEvent( NULL, FALSE, FALSE, "Global\\CSAPP" );

Windows对象管理 - 图13

Windows对象管理 - 图14

原文

Windows对象管理