转载自

Windows系统机制之对象管理器

设计的几个目的:

  • 提供一种公共统一的机制来使用系统资源
  • 将对象保护隔离到OS中的一个地方,从而确保统一的一致的对象访问策略
  • 提供一种机制来管理进程对对象的使用
  • 支持各种OS环境需求,比如一个进程能够从父进程继承资源
  • 建立统一的规则来维护对象的保持力
  • 提供为特定的会话隔离对象的能力,以便在命名空间中允许局部和全局对象并存

对象接口 Windows 提供了执行以下任务的函数:

  • 创建对象
  • 获取对象句柄
  • 获取有关对象的信息
  • 设置有关对象的信息
  • 关闭对象句柄
  • 销毁对象

Windows内部对象分三种:

  • 执行体对象(进程管理器、内存管理器、I/O子系统)
  • 内核对象(最基本的对象,用户模式不可见,执行体内部使用)
  • GDI/User对象(Windows子系统对象,不与内核打交道)

执行体对象

耳熟能详的执行体对象:

类型 描述
Process 执行一组线程对象所必需的虚拟地址空间和控制信息
Thread 进程内部的一个可执行实体
Job 一组进程,通过作业机制,可以像单个实体那样来管理多个进程
Section 共享内存的一个区域(文件映射对象)
File 一个已打开的文件或I/O设备的实例
Token 一个进程或线程的安全轮廓(安全ID、用户权限等)
Event 具有持久状态(有信号或无信号)的对象,用于同步或通知
Semaphore 信号量是计数器,提供资源门控能力
Mutex 互斥量,用于顺序访问一个资源的一种同步机制
Timer 定时机制
IoCompletion I/O完成端口
Key 引用注册表数据的机制
Directory 对象管理器命名空间中的虚拟目录
TpWorkerFactory 执行一组特定任务的线程集合,线程池。
TmRm、TmTx、TmTm、TmEn 内核事务管理器KTM为各种事务登记而使用的对象
WindowStation 包含一个剪贴板、一组全局原子和一组桌面对象
Desktop 包含在窗口站内部的对象。
PowerRequest 关联一个线程,通过SetThreadExecutionState调用请求指定的电源改变。
EtwConsumer 代表一个已连接的ETW实时消费者已经通过StartTrace API进行了注册
EtwRegistration 代表一个注册对象,与某个用户模式或内核模式ETW提供者关联

后面的这些对象不知道都是些什么鬼。

对象结构

header+body。

对象管理器控制了对象头,执行体组件控制了它们创建的对象体。对象头有一个索引,指向一个类型对象,该对象包含的信息对每个实例都是公共的。

知识点:对象可选子头的条件、位置、用途

通用的对象服务:

服务 用途
关闭 关闭指向某个对象的句柄
复制 复制句柄,再将它交给另一个进程的方法来共享对象
使永久/临时 改变对象的保持力
查询对象 获得关于对象的标准属性信息
查询安全性 获取对象安全描述符
设置安全性 改变对象的保护设置
等待一个对象 用一个对象来同步线程的执行
给一个对象发信号,并等待另一个对象 给一个对象发信号,通过另一个对象来同步线程执行
等待多个对象 多个对象来同步线程执行

类型对象

每个对象有它的类型,由头中指针决定,指针指向一张表,表内是所有类型。每种类型由对应的各类操作方法,内核漏洞利用的手法中经常可以看到把该指针指向0x0或者修改类型对象方法的指针等。

对象方法 调用时机
Open 对象句柄被打开
Close 对象句柄被关闭
Delete 对象管理器删除对象前
Query name 线程请求在一个从属命名空间中查询一个对象的名称时
Parse 对象管理器在一个从属命名空间中搜索一个对象名称时
Dump 未用
Okay to close 对象管理器接到指令要关闭句柄时
Security 进程读取或改变一个对象在其从属命名空间中的保护属性时

对象句柄和进程句柄表

对象句柄是个索引值,最终通过句柄表的结构找到对应表项。EPROCESS有一个指向进程句柄表的域。第一个句柄索引为4,第二个是8。

句柄表是一个动态三层结构,类似虚拟地址到物理地址转译的三级结构。

具体跟WRK代码吧,代码已经写得非常清楚了。

【windows 操作系统】Windows系统机制之对象管理器的更多相关文章

  1. Windows操作系统及其安全机制

    kali视频学习请看 http://www.cnblogs.com/lidong20179210/p/8909569.html Windows操作系统及其安全机制 Windows文件系统 FAT (F ...

  2. [windows操作系统]windows管理

    1.磁盘管理: 1.1.使用DISKPART命令行工具创建扩展分区: windows自带有一个disk management(磁盘管理)工具,但在其中却找不到如何创建扩展分区(一般MBR分区格式需要扩 ...

  3. [windows操作系统]windows模块

    smss.exe csrss.exe    Client/Server Runtime Server Subsystem

  4. 深入解析Windows操作系统笔记——CH3系统机制

    3.系统机制 微软提供了一些基本组件让内核模式的组件使用: 1.陷阱分发,包括终端,延迟的过程调用(DPC),异步过程调用(APC),异常分发以及系统服务分发 2.执行体对象管理器 3.同步,包括自旋 ...

  5. 检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统

    /** * Author: laixiangran. * Created by laixiangran on 2015/12/02. * 检测访问网页的浏览器呈现引擎.平台.Windows操作系统.移 ...

  6. userAgent,JS这么屌的用户代理,你造吗?——判断浏览器内核、浏览器、浏览器平台、windows操作系统版本、移动设备、游戏系统

    1.识别浏览器呈现引擎 为了不在全局作用域中添加多余变量,这里使用单例模式(什么是单例模式?)来封装检测脚本.检测脚本的基本代码如下所示: var client = function() { var ...

  7. 常规操作系统Windows系统淋雨系统Unix系统netware等系统介绍分析

    服务器操作系统有有很多,比如说:Windows.Linux.Unix和Netware......但我们经常用过仅有Windows和Linux.下面简单为大家介绍一下常见服务器操作系统. 1.Windo ...

  8. windows内核初窥(二)-----系统机制

    系统机制: windows2000为执行体.内核.设备驱动程序等核心态部分提供了一些基础机制.先让我们看看都有哪些: (1)陷阱调度:包括中断.延迟过程调用(DPC).异步过程调用(APC).异常处理 ...

  9. 深入解析Windows操作系统笔记——CH2系统结构

    2.系统结构 本章主要介绍系统的总体结构,关键部件之间的交互,以及运行在什么环境. 2.系统结构 2.1 需求和设计目标 2.2 操作系统模型 2.3 总体结构 2.3.1 可移植性 2.3.2 对称 ...

随机推荐

  1. Cesium入门7 - Adding Terrain - 添加地形

    Cesium入门7 - Adding Terrain - 添加地形 Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com ...

  2. Typora下载安装教程(全面)

    Typora下载与安装 一:下载 1.1百度搜索 https://www.typora.io/ 点击链接进入后映入眼帘的就是一款简洁的Typora网页,然后下滑进入主页. 1.2点击Download( ...

  3. pyhon笔记入门

    人生苦短,我用Python 博客园精华区01-15 23:46 (一)认识Python Python背景介绍 Python的格言: Life is short,use python. (人生苦短,我用 ...

  4. maven项目 子父级工程。

    一 .什么是 maven 子父级工程? 建立一个maven项目,然后在该项目 下创建一个module,子级的maven,他继承于父级项目. 1.新建立 maven项目,file  ------new- ...

  5. SpringMVC 解析(二)DispatcherServlet

    在我的关于Tomcat容器介绍的文章中,介绍了Tomcat容器的工作原理,我们知道Tomcat容器在收到请求之后,会把请求处理为Request/Response对象,交给Servlet实例处理.对于S ...

  6. 新手应该如何学习 PHP 语言?

    其实php开发,不只是一个简单的php开发,而是整个一个行业,一般叫web开发,或者php后端开发,所以从html,css,js,jq,php,sql基本这些都要有了解.当然你有html,css基础, ...

  7. JS let, var, const的用法以及区别

    本文摘自多位前辈的博文,另外还有一些我的多余补充,摘自地址已补充.非常感谢各位前辈.仅以笔记学习为目的! 深入学习ES6的知识还请访问阮一峰老师的ES6教程 如果不使用let或者const,在JS只有 ...

  8. python开发: linux进程占用物理内存

    #!/usr/bin/env python #-*- coding:utf-8 -*- ''' 统计linux进程占用的物理内存 ''' import os import sys import sub ...

  9. java中Statement 对象

    1.创建Statement对象建立了到特定数据库的连接之后,就可用该连接发送 SQL 语句.Statement 对象用 Connection 的方法 createStatement 创建,如下列代码段 ...

  10. Loadrunner 11 中的Java Vuser

    Java vuser是自定义的java虚拟用户脚本,脚本中可以使用标准的java语言. 1.安装jdk 注意,lr11最高支持jdk1.6 2.配置环境变量 3.在lr中选择java vuser协议 ...