系统启动引导概述

上传人:ldj****22 文档编号:51514076 上传时间:2018-08-14 格式:PPT 页数:19 大小:396.50KB
返回 下载 相关 举报
系统启动引导概述_第1页
第1页 / 共19页
系统启动引导概述_第2页
第2页 / 共19页
系统启动引导概述_第3页
第3页 / 共19页
系统启动引导概述_第4页
第4页 / 共19页
系统启动引导概述_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《系统启动引导概述》由会员分享,可在线阅读,更多相关《系统启动引导概述(19页珍藏版)》请在金锄头文库上搜索。

1、第二章第二章系统启动引导概述系统启动引导概述系统初始化v2.1内核对象 vv2.1.12.1.1 什么是内核对象什么是内核对象Windows操作系统仅能在内核态运行的对象称为内核对 象,如信号量对象、文件对象和进程对象等。每个内核对象是内核分配的内存块,是一种数据结构, 负责维护该对象的各种信息,而且只能由内核访问。如何操作这些内核对象呢?系统调用如何识别这些内核对象呢?句柄概述部分概述部分系统初始化2.1.22.1.2如何管理内核对象如何管理内核对象v 为了使操作系统变得更加健壮,内核对象必须拥有一些 用户对象所没有的安全和访问方面的特性(如何管理)内核对象使用计数-每个对象都包含一个使用计

2、数,当有一个进程访问时,则增加 计数加1安全性-系统通过安全描述符对内核对象进行保护。系统初始化2.2 2.2 中断和异常中断和异常v 中断是指CPU不按照正常的处理执行模式,而是对系统发生的某个事件做出的一种反应Windows系统把中断分为两类进行响应:第一类是由CPU外部引起,称为外部中断-不可屏蔽中断-可屏蔽中断CPU的内部事件或程序执行中的事件引起的称作异常-微处理器内部操作发生异常引起-“陷入”(trap)系统初始化2.3 2.3 系统调用系统调用v CPU特权级 v 在windows系统中,系统调用像普通C函数调用一样出现在C 程序中。当程序通过执行系统调用而陷入系统中时,就使用

3、户级3变为特权级0,这样就可以执行系统操作,如对内核对 象的创建,删除和修改等。 v SSDT的全称是System Services Descriptor Table,系统服务描 述符表。该表的作用是把Ring3的Win32 API和Ring0的内核 API联系起来。系统初始化2.4 2.4 动态链接库动态链接库DLLDLLv动态链接:就是把一些经常会共享的程序码(静态 链接的OBJ程序库)制作成DLL文件,当执行调用 到DLL内的函数时,windows操作系统才会把DLL 文件加载到内存。通过动态链接方式,内存浪费 的情形将可大幅降低。 v特征:-内存管理-符号解析-运行时显示链接系统初始化

4、2.52.5系统初始化系统初始化启动过程分为引导、内核初始化和系统登陆三大阶段。vv 2.5.1 2.5.1 引导阶段引导阶段引导过程,即把系统从磁盘加载进内存,从自检开始进 行启动的最初准备工作。vv 2.5.22.5.2内核初始化内核初始化主要的初始化过程,将完成各个子模块、服务的加载vv 2.5.32.5.3系统登陆系统登陆加载用户设置,开始登陆系统系统初始化实验部分实验部分vv 2.12.1实验概述实验概述本章做了两个与系统初始化相关的实验。一个是对系统 自举初始化的验证实验。实验中,对概述部分没有详细 分析的内核初始化的两个部分进行了全面的、完整的代 码级分析,并作正确性验证,最后得

5、出函数调用序列图 。另一个是关于系统调用,通过API HOOK实现系统调用 控制权的转移。系统初始化2.12.1验证实验验证实验内核初始化流程大致分为两个阶段:phase0和phase1。具体所处的阶段是由一个全局变量 InitializationPhase标识要求:验证实验主要就是验证这两个初始化阶段的过程。要求:验证实验主要就是验证这两个初始化阶段的过程。 最后得出流程图,并且能够分析其中的机制,从而掌握最后得出流程图,并且能够分析其中的机制,从而掌握 设计大型软件的方法。设计大型软件的方法。系统初始化Phase 0 Phase 0 分析分析关键点: v(1)当初始化0号CPU时调用KiI

6、nitSystem用于初 始化内核数据结构; v(2)调用执行体初始化例程 ExpInitializeExecutive,进入Phase0; v(3)在调用ExpInitializeExecutive返回后,首先 设置IRQL为DISPATCH_LEVEL级别,以允许线 程派发,然后设置当前线程优先级为0系统初始化Phase 0 Phase 0 分析分析调用ExpInitializeExecutive函数后, phase 0 的初始化工作。调用HalInitSystem,初始化HAL调用MmInitSystem,初始化内存管理器;调用ObInitSystem,初始化对象管理器;调用SeInit

7、System,初始化安全引用监视器;调用PsInitSystem,初始化进程管理器;调用PpInitSystem,初始化即插即用管理器。系统初始化Phase 1 Phase 1 分析分析vExpInitializeExecutive返回后,首先设置IRQL为 DISPATCH_LEVEL级别,以允许线程派发, Phase1进入多线程环境,开始初始化。v结束之后,全局变量InitializationPhase的值为2系统初始化Phase 1 Phase 1 分析分析vPhase1Initialization: 0% - 25% 创建各内核对象类型创建各全局变量创建系统工作线程设置时区各子模块和服

8、务的二次初始化系统初始化Phase 1 Phase 1 分析分析vPhase1Initialization: 25% - 75% IO管理器初始化并枚举设备加载设备驱动IOInitSystem -这个过程比较耗时(50%) vPhase1Initialization: 75% - 100% 释放初始化占用的资源启动smss.exe进入登陆阶段系统初始化内核初始化流程图内核初始化流程图系统初始化2.2 API HOOK2.2 API HOOKvv实验的出发点:实验的出发点:在调用过程中会有一个从用户态陷入到核心 态的控制权跳转。由于这个原因,修改对应 的查找表结构或函数地址,来间接接管系统 调用

9、。vv要求:要求:掌握系统调用的机制,理解为什么需要从用 户态陷入核心态。实现用户态下的HOOK API。系统初始化API HOOKAPI HOOKv实现Hook 的多种方式)1( 使用Windows钩子函数实现HOOK。可截获用户或者系统消息)2( 直接替换函数入口地址代码实现HOOK)3( 替换IAT(PE结构中的输入表)中的函数 地址入口实现HOOK;)4( 替换Windows消息处理函数实现HOOK系统初始化Hook Hook 原理原理v首先获取目标API地址:可以从内联汇编中提取出目标转移代码指令,如 _asm JMP Label v如何计算Label的值? Label = LPNewFUNC (LPHOOKFUNC + 5);系统初始化HookHookv思考:为什么Hook代码要写入DLL?如何将Hook代码植入到其它进程?能否实现其它方式的Hook?

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号