第2章预备知识_第1页
第2章预备知识_第2页
第2章预备知识_第3页
第2章预备知识_第4页
第2章预备知识_第5页
已阅读5页,还剩77页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

,计算机病毒与反病毒技术,主要内容,硬盘结构文件系统计算机的引导过程中断内存管理EXE文件的格式,第2章预备知识,2.1.1硬盘的物理结构,绝大多数硬盘在结构上都是温彻斯特(Winchester)盘,其核心就是:磁盘片被密封、固定并且不停高速旋转,磁头悬浮于盘片上方沿磁盘径向移动,并且不和盘片接触,2.1硬盘结构简介,2.1.1硬盘的物理结构,低级格式化与硬盘的基本参数对于一块新硬盘,低级格式化的过程已经由生产厂家在产品出厂前完成了低级格式化的主要目的是将盘面划分成磁道、扇区和柱面,2.1硬盘结构简介,2.1.1硬盘的物理结构,基本INT13H调用BIOSINT13H调用是BIOS提供的磁盘基本输入输出中断调用,它可以完成磁盘(包括硬盘和软盘)的复位、读写、校验、定位、诊断、格式化等功能,完全不用考虑被操作硬盘安装的是什么操作系统它使用的就是CHS寻址方式最大只能访问8GB左右的硬盘,2.1硬盘结构简介,2.1.1硬盘的物理结构,现代硬盘结构简介改用等密度结构生产硬盘,外圈磁道的扇区比内圈磁道多硬盘不再具有实际的3D参数寻址方式也改为线性寻址,即以扇区为单位进行寻址现代大容量硬盘一般采用LBA(LogicBlockAddress)线性地址来寻址,以替代CHS寻址。在LBA方式下,系统把所有的物理扇区都按某种方式或规则看做是一线性编号的扇区,即从0到某个最大值方式排列,这样,只用一个序数就能确定一个唯一的物理扇区。这就是线性地址扇区的由来,显然线性地址是物理扇区的逻辑地址,2.1硬盘结构简介,2.1.1硬盘的物理结构,扩展INT13H虽然现代硬盘都已经采用了线性寻址,但是由于基本INT13H的制约,使用BIOSINT13H接口的程序,如DOS等还只能访问8G以内的硬盘空间。为了打破这一限制,Microsoft等几家公司制定了扩展INT13H标准(ExtendedINT13H),采用线性寻址方式存取硬盘,所以突破了8G的限制,而且还加入了对可拆卸介质(如移动硬盘、优盘)的支持,2.1硬盘结构简介,2.1.1硬盘的物理结构,分区与高级格式化硬盘在使用时,是按照不同的区域存储数据的,硬盘分区就是划分区域的过程。划分好的每一个区域都称作一个分区,最多可以划分为四个主分区。这项工作由分区程序来完成,通常使用FDISK或磁盘管理工具软件在分区的过程中,分区程序向0柱面0磁头1扇区写入主引导记录MBR(MasterBootRecord)和分区记录表DPT(DiskPartitionTable),并建立一个分区表链,向所有的逻辑驱动器写入链表记录。硬盘的分区格式常用的分区格式有四种:FAT16、FAT32、NTFS和Linux,其中使用最多的是FAT16和FAT32硬盘分区后还不能直接使用,要在每个分区内建立完整的存储系统后才能正常使用。建立存储系统的工作一般由FORMAT程序来完成,这个过程称为高级格式化高级格式化的目的是在分区内建立分区引导记录DBR(DOSBootRecord)、文件分配表FAT(FileAllocationTable)、文件目录表FDT(FileDirectoryTable)和数据区DATA,2.1硬盘结构简介,2.1.2硬盘的数据结构,主引导扇区的组成主引导扇区(BootSector)也就是硬盘的第一个扇区(0柱面0磁头1扇区)主引导记录(MasterBootRecord,MBR)主分区表即磁盘分区表(DiskPartitionTable,DPT)引导扇区标记(BootRecordID/Signature)完成系统主板BIOS向操作系统交接的重要入口,2.1硬盘结构简介,主引导扇区结构图,2.1.2硬盘的数据结构,硬盘主分区表结构简介,2.1硬盘结构简介,2.1.3扩展分区与扩展MBR简介,通过主引导记录定义的硬盘分区表,最多只能描述4个分区微软采用虚拟MBR的技术用以描述分区的扇区形成一个“分区链”,通过这个分区链,就可以描述所有的分区,2.1硬盘结构简介,2.1.3扩展分区与扩展MBR简介,主分区、扩展分区、逻辑驱动器及其关系,2.1硬盘结构简介,2.1.3扩展分区与扩展MBR简介,扩展分区和逻辑盘,2.1硬盘结构简介,2.1.3扩展分区与扩展MBR简介,3主分区(其中一个用作扩展)的磁盘结构图,2.1硬盘结构简介,一个3主分区的磁盘结构,扩展分区表链接示意图,2.2.1文件系统简介,当磁盘被格式化之后,文件系统需要用到一些特殊的区域来组织它本身的数据:主引导记录(MasterBootRecord,MBR)磁盘分配表(DiskPartitionTable,DPT)操作系统引导记录(DOSBootRecord,DBR)文件分配表(FileAllocationTable,FAT)文件目录表(FileDirectoryTable,FDT)数据区,2.2文件系统,2.2.2FAT32DBR,DBR区(DOSBootRecord)引导扇区,2.2文件系统,2.2.3FAT16DBR,FAT12和FAT16中的DBR与FAT32中的DBR的基本含义类似,只是相关偏移量和参数意义有小的差异,2.2文件系统,2.2.4保留扇区,在FAT文件系统DBR的偏移0 x0E处,用2个字节存储保留扇区的数目。所谓保留扇区(有时候也称作系统扇区、隐藏扇区),是指从分区DBR扇区开始的仅为系统所有的扇区,包括DBR扇区。在FAT16文件系统中,保留扇区的数据通常设置为1,即仅仅DBR扇区。而在FAT32中,保留扇区的数据通常取为32FAT32中的保留扇区除了磁盘总第0扇区用作DBR,总第2扇区(Windows98系统)或总第0 xC扇区(Windows2000/XP)用作OS引导代码扩展部分外,其余扇区都不参与操作系统管理与磁盘数据管理,通常情况下是没作用的操作系统之所以在FAT32中设置保留扇区,是为了对DBR作备份或留待以后升级时用。FAT32中,DBR偏移0 x32占2字节的数据指明了DBR备份扇区所在,一般为0 x06,即第6扇区。当FAT32分区DBR扇区被破坏导致分区无法访问时,可以用第6扇区的原备份替换第0扇区来找回数据,2.2文件系统,2.2.5FAT16存储原理,当把一部分磁盘空间格式化为FAT文件系统时,FAT文件系统就将这个分区当成整块可分配的区域进行规划,以便于数据的存储FAT16是Microsoft较早推出的文件系统,具有高度兼容性,目前仍然广泛应用于PC机尤其是移动存储设备中,2.2文件系统,FAT16的组织形式,2.2.5FAT16存储原理,FAT表记录了磁盘数据文件的存储链表(簇号链表)FAT表以“F8FFFFFF”开头,此4字节为介质描述单元,并不参与FAT表簇链关系。小红字标出的是FAT扇区每2字节对应的簇号相对偏移0 x40 x5为第2簇(顺序上第1簇),为“FFFF”,表示存储在第2簇上的文件/目录是个小文件,只占用1个簇便结束了,2.2文件系统,2.2.6FAT32存储原理,FAT32是个非常有效的文件系统,FAT32依然占据着MicrosoftWindows文件系统中重要的地位FAT32最早是出于FAT16不支持大分区、单位簇容量大以至于空间急剧浪费等缺点设计的,2.2文件系统,FAT32分区的基本构成,2.2.7NTFS文件系统,NTFS是一个比FAT更复杂的系统。在NTFS中,磁盘上的任何事物都为文件NTFS的BPB参数NTFS的引导扇区也是完成引导和定义分区参数与FAT分区不同的是,FAT分区的BOOT记录正常,即使文件不正确,也显示分区没有错误,而NTFS分区的BOOT不是分区正常的充分条件,它要求必须主文件表MFT(MasterFileTable)中的系统记录如$MFT等正常该分区才能正常访问,2.2文件系统,2.2.7NTFS文件系统,主文件表MFT与文件记录在NTFS中,所有存储在卷上的数据都包含在文件中,包括用来定位和获取文件的数据结构、引导程序和记录这个卷的记录(NTFS元数据)的位图,这体现了NTFS的原则:磁盘上的任何事物都为文件在NTFS中,卷中所有存放的数据均记录在一个叫做MFT的文件记录数组中,称为主文件表(MasterFileTable),MFT是由高级格式化产生的。而MFT由文件记录(FileRecord)数组构成,2.2文件系统,2.2.7NTFS文件系统,文件记录的大小一般是固定的,不管簇的大小是多少,文件记录大小一般为1KB文件记录在MFT文件记录数组中物理上是连续的,且从0开始编号,所以,NTFS是预定义文件系统,2.2文件系统,2.2.7NTFS文件系统,元数据与元数据文件MFT仅供系统本身组织、架构文件系统使用,这在NTFS中称为元数据(Metadata,是存储在卷上支持文件系统格式管理的数据,不能被应用程序来访问,它只能为系统提供服务)。其中最基本的前16个记录是操作系统使用的非常重要的元数据文件元数据文件的名字都以“$”开始,所以是隐藏文件,2.2文件系统,2.2.7NTFS文件系统,2.2文件系统,NTFS对元数据文件的备份,2.2.7NTFS文件系统,文件和目录记录NTFS将文件作为“属性、属性值”的集合来处理文件数据就是未命名属性的值,其他文件属性包括文件名、文件拥有者、文件时间标记等每个属性由单个的流(Stream)组成,即简单的字符队列NTFS并不对文件进行操作,而只是对属性流进行读写NTFS提供对属性流的各种操作:创建、删除、读取(字节范围)以及写入(字节范围)读写操作一般是针对文件的未命名属性的,对于已命名的属性则可以通过已命名的数据流句法来进行操作文件属性列表在元数据文件$AttrDef中预定义(一般有一个未命名流,为缺省流,未命名流只能有一个,而命名流可以有多个,NTFS支持多流文件),2.2文件系统,2.2.7NTFS文件系统,一个文件通常占用一个文件记录。但当一个文件具有很多项属性值或很零碎的时候,就可能占用一个以上的文件记录。这种情况下,第一个文件记录是其基本的文件记录,存储有该文件需要的其他文件记录的位置。NTFS的文件夹只是一个简单的文件名和文件引用号的索引,如果目录列表小于一个记录的长度,那么该文件夹的所有信息都存储在主文件表的记录中。对于大于记录长度的文件夹则使用B+树进行管理,并用一个指针指向一个外部簇,该簇用来存储那些MFT内存储不了的文件夹的属性,2.2文件系统,2.2.7NTFS文件系统,常驻属性与非常驻属性当一个文件很小时,其所有属性和属性值都可以存放在MFT的文件记录中。当属性值能直接存放在MFT中时,该属性就称为常驻属性(ResidentAttribute)有些属性总是常驻的,这样NTFS才可以确定其他非常驻属性。例如,标准信息属性和根索引就总是常驻属性小文件和文件夹(典型的如1023字节或更少)将全部存储在文件的MFT记录里,2.2文件系统,2.2.7NTFS文件系统,如果属性值能直接存放在MFT中,那么NTFS对它的访问时间将大大缩短。NTFS只需访问磁盘一次,即可获得数据,而不必像FAT文件系统那样,先在FAT表中查找文件,再读出连续分配的单元,最后找到文件的数据小文件或小目录的所有属性,均可以在MFT中常驻,2.2文件系统,2.2.7NTFS文件系统,文件LittleFile.txtLittleFile.txt的属性用NFI查看文件,2.2文件系统,2.2.7NTFS文件系统,如果目录列表小于一个文件记录的长度,小目录的索引根属性包括其中所有文件和子目录的索引,那么,该文件夹的所有信息都存储在主文件表的记录中大文件或大目录的所有属性,就不可能都常驻在MFT中如果一个属性太大而不能存放在MFT文件记录中,NTFS将从MFT之外分配区域。这些区域通常称为一个运行(Run)或一个盘区(Extent),它们可用来存储属性值,如文件数据如果以后属性值又增加,那么NTFS将会再分配一个运行值存储在运行中而不是在MFT文件记录中的属性称为非常驻属性(NonresidentAttribute),2.2文件系统,大文件的非常驻属性,2.2.7NTFS文件系统,2.2文件系统,大目录的MFT记录,2.2.7NTFS文件系统,逻辑簇号、虚拟簇号与数据定位Windows以簇号来定位文件在磁盘上的存储位置,在FAT格式的文件系统中,有关簇号的指针包含在FAT表中,在NTFS中,有关簇号的指针则包含在$MFT及$MFTMirr文件中NTFS使用逻辑簇号(LogicalClusterNumber,LCN)和虚拟簇号(VirtualClusterNumber,VCN)来对簇进行定位,2.2文件系统,非常驻数据属性的VCN,2.2.7NTFS文件系统,当该文件含有超过2个运行时,则第三个运行从VCN7开始,数据属性头部含有前两个运行VCN的映射,这便于NTFS对磁盘文件分配的查询。为了便于NTFS快速查找,具有多个运行文件的常驻数据属性头中包含了VCN-LCN的映射关系,2.2文件系统,2.2.7NTFS文件系统,NTFS通过MFT访问卷的过程:(1)装载该卷;(2)从文件记录的数据属性中获得VCN到LCN的映射信息(3)打开几个元数据文件的MFT记录,并打开这些文件属性列表虽然数据属性常常因太大而存储在运行中,但是其他属性也可能因MFT文件记录没有足够空间而需要存储在运行中另外,如果一个文件有太多的属性而不能存放在MFT记录中,那么第二个MFT文件记录就可用来容纳这些额外的属性(或非常驻属性的头)在这种情况下,一个称作“属性列表”(AttributeList)的属性就加进来。属性列表包括文件属性的名称和类型代码以及属性所在MFT的文件引用属性列表通常用于太大或太零散的文件,这种文件因VCN-LCN映射关系太大而需要多个MFT文件记录。具有超过200个运行的文件通常需要属性列表,2.2文件系统,2.3.1系统启动过程简介,系统启动过程主要由以下步骤组成(以硬盘冷启动为例):开机,系统BIOS加电自检读主引导扇区MBR读取激活分区DBR操作系统引导代码引导系统并读取操作系统初始化文件,2.3计算机的启动过程,2.3.2DOS引导程序,DOS引导程序所作的检测、初始化动作如下:调整堆栈位置修改并用修改后的磁盘参数表来复位磁盘系统计算根目录表的首扇区的位置及IO.SYS的扇区位置读入根目录表的首扇区检查根目录表的起始两项是否为IO.SYS及MSDOS.SYS将IO.SYS文件起始三个扇区读入内存0000:0700H处跳到0000:0700H处执行IO.SYS,引导完毕上述任一步若出错,则显示“Nonsystemdiskordiskerror.”信息,等用户按任一键后试图重新启动,2.3计算机的启动过程,2.3.3Windows2000/XP启动过程简介,在基于Intel的计算机上,Windows2000/XP的启动过程大致可分为8个步骤预启动计算机加电自检,读取硬盘的MBR、执行NTLDR(操作系统加载器)文件进行初始化NTLDR将处理器从实模式转换为32位保护模式读取BOOT.INI文件BOOT.INI文件其作用是使系统在启动过程中出现选择菜单,由用户选择希望启动的操作系统,若只有一个操作系统则不显示加载NTDETECT.COM文件由NTDETECT.COM来检测计算机硬件,如并行端口、显示适配器等,并将收集到的硬件列表返回NTLDR用于以后在注册表中注册保存,2.3计算机的启动过程,2.3.3Windows2000/XP启动过程简介,选择硬件配置文件如果Windows2000/XP有多个硬件配置文件,此时会出现选择菜单,等待用户确定要使用的硬件配置文件,否则直接跳过此步,启用默认配置装载内核引导过程装载Windows2000/XP内核NtOsKrnl.EXE。随后,硬件抽象层(HAL)被引导进程加载,完成本步骤初始化内核内核完成初始化,NTLDR将控制权转交Windows2000/XP内核,后者开始装载并初始化设备驱动程序,并启动Win32子系统和Windows2000/XP服务用户登录由Win32子系统启动WinLogon.EXE,并由它启动LocalSecurityAuthority(LSASS.EXE)显示登录对话框。用户登录后,Windows2000/XP会继续配置网络设备、用户环境,并进行个性化设置。最后,伴随着微软之声和我们熟悉的个性化桌面,Windows2000/XP启动过程完成,2.3计算机的启动过程,2.4.1中断,中断(Interrupt),就是CPU暂停当前程序的执行,转而执行处理紧急事务的程序,并在该事务处理完成后能自动恢复执行原先程序的过程引起紧急事务的事件为中断源,处理紧急事务的程序为中断服务程序或中断处理程序计算机系统根据紧急事务的紧急程度,把中断分为不同的优先级,并规定:高优先级的中断能暂停低优先级的中断服务程序的执行在计算机系统中,引入中断的最初目的是为了提高系统的输入输出性能。随着计算机应用的发展,中断技术也应用到计算机系统的许多领域,如:多道程序、分时系统、实时处理、程序监视和跟踪等领域。中断的分类硬中断除以零、算术溢出、按下键盘等等,2.4中断,2.4.1中断,软中断因程序执行了计算机INT指令造成的例如:INT21H将执行21H中断。这里21H称作中断号,其中H代表十六进制(H前取值范围为0FF)。系统就是用中断号来找出相应的中断处理程序的软中断包括BIOS中断、DOS中断与用户自定义中断,2.4中断,2.4.2中断优先权,CPU为了处理并发的中断请求,规定了中断的优先权。中断优先权由高到低是:调试故障其它故障除法错,INT0(溢出中断),INTn(软件中断)NMI(不可屏蔽中断)INTR(可屏蔽中断)单步中断规定了中断优先权之后,当多个中断同时发出中断请求时,CPU的中断逻辑就按照中断的优先权顺序来排队处理,首先处理中断优先权较高的中断,然后再处理中断优先权较低的中断在处理某一中断的过程中,如果有更高的中断源请求中断,则CPU会响应更高级的中断,2.4中断,2.4.3中断向量表,中断向量表(InterruptVectors)是一个特殊的线性表,它保存着系统所有中断服务程序的入口地址(偏移量和段地址)中断向量表占用内存最低端0000H到03FEH的1K地址空间,存放256个元素即远指针(中断向量),编号从00到255(00FFH)每一中断向量的入口地址占4个字节,高2字节存放中断向量的段地址,低2字节存放中断向量的偏移地址一个中断向量指向一个子程序,该程序就称为中断处理程序,2.4中断,中断向量表,2.4.4中断处理过程,CPU在执行程序时,是否响应中断要取决于以下三个条件能否同时满足:有中断请求;允许CPU接受中断请求;一条指令执行完,下一条指令还没有开始执行。条件是响应中断的主体。除用指令INT所引起的软件中断之外,其它中断请求信号是随机产生的,程序员是无法预见的程序员可用程序部分地控制条件是否满足,即可用指令STI和CLI来允许或不允许CPU响应可屏蔽的外部中断。而对于不可屏蔽中断和内部中断,CPU一定会响应它们,程序员是无控制权的。CPU一定会执行这些中断的中断服务程序,2.4中断,2.4.4中断处理过程,出现中断请求之后,CPU的操作过程是:先完成当前指令的操作,然后按中断优先权逐个判断是哪一类型的中断。确定中断类型之后,CPU进行如下几方面的工作:将状态标志进栈保护0IF(清除标志IF,禁止跟踪),0TF(清除标志TF,禁止中断)根据中断类型号计算中断向量入口地址在向量表中的偏移:偏移=中断类型号4保护断点,把当前代码段寄存器的内容进栈保护,将中断向量的段地址送CS;把当前指令指针入栈保护,将中断向量的偏移地址送IP;于是,程序就转到了中断服务程序进入中断服务程序之后,一般要保护现场(寄存器压栈),然后进行中断服务。在中断服务返回前要恢复现场(寄存器弹栈),最后用STI开中断,并用IRET恢复断点处的标志寄存器、CS和IP的值,2.4中断,2.4.5扩展INT13H,设计扩展INT13H接口的目的是为了扩展BIOS的功能,使其支持多于1024柱面的硬盘,以及可移动介质的锁定、解锁及弹出等功能,2.4中断,2.4.6中断与计算机病毒,计算机提供很多中断,合理合法地修改中断,会给计算机增加非常有用的新功能计算机病毒则篡改中断为其达到传染、激发等目的服务与病毒有关的重要中断有:INT13H磁盘输入输出中断,引导型病毒用于传染病毒和格式化磁盘INT21HDOS功能调用中断INT24HDOS的严重错误处理中断INT25HDOS绝对磁盘读功能INT26HDOS绝对磁盘写功能,2.4中断,简介,内存是程序运行时的“场所”,是存储正在运行的程序及程序运行所需数据的地方。许多病毒常“躲”在内存中监视系统的运行、伺机传播或爆发一台计算机要正常工作必须有两种内存只读内存(只读存储器,ReadOnlyMemory,ROM)随机内存(随机存储器,RandomAccessMemory,RAM),这是我们通常所说的“内存”另外,Cache也是经常用到的,它位于CPU与内存之间,是一个读写速度比内存更快的存储器,称为高速缓冲存储器,简称高速缓存,2.5内存管理,2.5.1内存寻址技术的演变,20多年前,Intel推出了一款8位处理器8080,可访问到64K内的地址空间,还没有段的概念,访问内存都要通过绝对地址1978年,Intel开发出16位的处理器8086是内存寻址的第一次飞跃,引入了段概念,采用了“段地址:偏移量”的形式来描述内存地址,将内存分为数个64K大小的段Intel的80286处理器于1982年问世地址总线位数增加到24位,可以访问到16M的内存空间更重要的是从此开始引进了一个全新理念保护模式,访问内存时不能直接从段寄存器中获得段的起始地址,而需要经过额外转换和检查为了与旧处理器兼容,80286内存寻址可以以两种方式进行先进的保护模式(受保护的虚拟地址模式)老式的8086方式,即实地址模式(简称实模式),2.5内存管理,2.5.1内存寻址技术的演变,真正的第二次内存寻址飞跃发生在80386身上80386的地址总线扩展到了32位,可寻址空间扩充为4G在保护模式下,它的段范围不再局限于64K,可以达到4K4G在硬件上支持分页,确切的来说是:请求式分页的虚拟内存尽管目前已经在使用64位的处理器,但主流操作系统仍然基于I386体系结构在8088/8086汇编语言中,有16位寄存器AX、BX、CX、DX、SI、DI、SP和BP;在80386中,这些寄存器被扩展到了32位,即EAX、EBX、ECX、EDX、ESI、EDI、ESP和EBP,段寄存器增加了FS(附加数据段#1)和GS(附加数据段#2),2.5内存管理,2.5.2DOS内存布局,DOS操作系统运行于实模式中,2.5内存管理,2.5.3保护模式与虚拟内存,保护模式一般来说,80 x86(80386及其以后的各代CPU)可在实模式、保护模式和虚拟86模式三种模式下运行实模式就是古老的MSDOS的运行环境,只能利用32位寄存器的前16位,而后面的16位就浪费了当前流行的Windows操作系统运行在保护模式下在Windows9x下,如果开一个MSDOS窗口,即运行一个DOS应用程序,那么该程序就运行在虚拟86模式下保护模式和实模式采用了两种截然不同的思路保护模式带来的最大优点不是单纯的扩大了内存寻址范围,而是对内存寻址从机制上提供了保护,将系统的执行空间按权限进行了划分,防止应用程序非法访问其他应用程序的地址空间(任务间保护),防止应用程序非法访问操作系统地址空间(系统保护),2.5内存管理,2.5.3保护模式与虚拟内存,保护模式的权限级别在保护模式下,所有的应用程序都具有权限级别(PrivilegeLevel,PL)。PL按优先次序分为四等:0级、1级、2级、3级,其中0级权限最高,3级最低目前只用到Ring0和Ring3两个级别,2.5内存管理,特权级环,2.5.3保护模式与虚拟内存,应用程序如果拥有第0级的权限,则可以执行任何指令并访问任何数据如果运行在Ring3级,则只能执行有限指令,能访问的数据也有限操作系统核心层运行在Ring0级,而Win32子系统运行在Ring3级,为运行在Ring3级的应用程序提供接口计算机病毒总是想方设法窃取Ring0的权限(如CIH病毒),以实施更大范围的破坏,2.5内存管理,Windows2000/XP体系结构示意图,2.5.3保护模式与虚拟内存,虚拟内存在Windows系统中,任何一个进程都被赋予其自己的4GB虚拟地址空间,但并不意味着每一个进程实际拥有4GB的物理地址空间,该地址空间仅仅是一个虚拟地址空间。进程实际可以得到的物理内存要远小于其虚拟地址空间进程的虚拟地址空间是每个进程私有的,在进程内运行的线程对内存空间的访问都被限制在调用进程之内,而不能访问属于其他进程的内存空间在不同的进程中可以使用相同地址的指针来指向属于各自调用进程的内容而不会由此引起混乱,2.5内存管理,2.5.3保护模式与虚拟内存,2.5内存管理,Windows9x进程的地址空间,WindowsNT进程的地址空间,2.5.4Win32内存管理,Win32中的内存管理是分层次的,系统提供了几组层次不同的函数来管理内存,它们是标准内存管理函数、虚拟内存管理函数、堆管理函数和内存映射文件函数。所有的这些函数都是为了让用户能在比较高的层次上方便地管理内存,以便将程序和底层的内存分页机制隔离开来,2.5内存管理,简介,在DOS环境下有四种基本的可执行文件格式批处理文件,以.BAT结尾的文件设备驱动文件,是以.SYS结尾的文件,如CONFIG.SYSCOM文件,是以.COM结尾的纯代码文件没有文件头部分,缺省情况下总是从0 x100H处开始执行,没有重定位项,所有代码和数据必须控制在64K以内EXE文件,是以.EXE结尾的文件文件以英文字母“MZ”开头,通常称之为MZ文件MZ文件有一个文件头,用来指出每个段的定义,以及重定位表。.EXE文件摆脱了代码大小最多不能超过64K的限制,是DOS下最主要的文件格式在Windows3.0/3.1的可执行文件,在MZ文件头之后又有一个以“NE”开始的文件头,称之为NE文件在Win32位平台可执行文件格式:可移植的可执行文件(PortableExecutableFile)格式,即PE格式。MZ文件头之后是一个以“PE”开始的文件头,2.6EXE文件的格式,2.6.1MZ文件格式,.EXE文件由三部分构成:文件头、重定位表和二进制代码,2.6EXE文件的格式,2.6.2NE文件格式,NE是NewExcutable的缩写,是16位Windows可执行文件的标准格式,这种格式基本上没用了NE在MZ文件头之后添加了一个以“NE”开始的文件头,2.6EXE文件的格式,2.6.3PE文件格式,Win32可执行文件,如*.EXE、*.DLL、*.OCX等,都是PE格式PE的意思就是PortableExecutable(可移植、可执行),它是Win32可执行文件的标准格式由于大量的EXE文件被执行,且传播的可能性最大,因此,Win32病毒感染文件时,基本上都会将EXE文件作为目标,2.6EXE文件的格式,2.6.3PE文件格式,一般来说,病毒往往先于HOST程序获得控制权。运行Win32病毒的一般流程示意如下:用户点击或系统自动运行HOST程序;装载HOST程序到内存;通过PE文件中的AddressOfEntryPoint加ImageBase之和,定位第一条语句的位置(程序入口);从第一条语句开始执行(这时执行的其实是病毒代码);病毒主体代码执行完毕,将控制权交给HOST程序原来的入口代码;HOST程序继续执行。问题在于:计算机病毒怎会在HOST程序之前执行?,2.6EXE文件的格式,2.6.3PE文件格式,PE文件的总体层次结构,2.6EXE文件的格式,2.6.3PE文件格式,相对虚拟地址(RelativeVirtualAddresses,RVA)相对虚拟地址是一个相对于PE文件映射到内存的基地址的偏移量,2.6EXE文件的格式,2.6.3PE文件格式,DOS头与DOS插桩程序PE结构中紧随MZ文件头之后的DOS插桩程序(DOSStub)可以通过IMAGE_DOS_HEADER结构来识别一个合法的DOS头可以通过该结构的e_lfanew(偏移60,32bits)成员来找到PE开始的标志0 x00004550(“PE00”)病毒通过“MZ”、“PE”这两个标志,初步判断当前程序是否是目标文件PE文件。如果要精确校验指定文件是否为一有效PE文件,则可以检验PE文件格式里的各个数据结构,或者仅校验一些关键数据结构。大多数情况下,没有必要校验文件里的每一个数据结构,只要一些关键数据结构有效,就可以认为是有效的PE文件,2.6EXE文件的格式,2.6.3PE文件格式,2.6EXE文件的格式,2.6.3PE文件格式,PE文件头紧接着DOSStub的是PEheaderPEheader是IMAGE_NT_HEADERS的简称,即NT映像头(PE文件头),存放PE整个文件信息分布的重要字段,包含了许多PE装载器用到的重要域。执行体在支持PE文件结构的操作系统中执行时PE装载器将从DOSMZheader中找到PEheader的起始偏移量,从而跳过DOSStub直接定位到真正的文件头PEheader,2.6EXE文件的格式,2.6.3PE文件格式,PE文件头的结构字符串“PE00”(Signature)(4H字节)紧跟着“PE00”的是映像文件头,是NT映像头的主要部分,它包含有PE文件的基本信息,2.6EXE文件的格式,2.6.3PE文件格式,紧跟映像文件头后面的就是可选映像头,2.6EXE文件的格式,2.6.3PE文件格式,2.6EXE文件的格式,2.6.3PE文件格式,节表是紧挨着NT映像头的一结构数组,其成员的数目由映像文件头中NumberOfSections决定,2.6EXE文件的格式,2.6.3PE文件格式,代码节的属性一般是60000020H,即“可执行”、“可读”和“节中包含代码”数据节的属性一般是C0000040H,即“可读”、“可写”和“包含已初始化数据”病毒在添加新节时,都会将新添加的节的属性设置为可读、可写、可执行,2.6EXE文件的格式,2.6.3PE文件格式,节PE文件的真正内容划分成块,称之为Section(节),紧跟在节表之后每个节是一块拥有共同属性的数据,比如代码/数据、读/写等可以把PE文件想象成一逻辑磁盘,PEheader是磁盘的Boot扇区,节表就是根目录,而Section就是各种文件,每种文件自然就有不同属性如只读、系统、隐藏、文档等等节的划分是基于各组数据的共同属性而不是逻辑概念如果PE文件中的数据/代码拥有相同属性,它们就能被归入同一节中节名称仅仅是个区别不同节的符号而已,类似“data”、“code”的命名只为了便于识别,惟有节的属性设置决定了节的特性和功能,2.6EXE文件的格式,2.6.3PE文件格式,代码节.textWindowsNT默认的做法是将所有的可执行代码组成了一个单独的节,名为“.text”或“.code”.text节也包含了在数据目录表中提到过的入口点IAT亦存在于.text节之中的模块入口点之前。IAT是一系列的跳转指令。要在.text节之中查找IAT,装载器只用将模块的入口点定位,而IAT恰恰出现于入口点之前。既然每个入口拥有相同的尺寸,那么向后退查找这个表的起始位置就很容易引入函数节.idata包含有从其它DLL中引入的函数该节开始是一个成员为IMAGE_IMPORT_DESCRIPTOR结构的结构数组,也叫引入表,数据目录表表项结构成员VirtualAddress包含引入表地址引入函数节可能被病毒用来直接获取API函数地址,2.6EXE文件的格式,2.6.3PE文件格式,引出函数节.edata引出函数节是本文件向其他程序提供的可调用函数列表这个节一般用在DLL中,EXE文件中也可以有这个节,但通常很少使用当PE装载器执行一个程序,它将相关DLL都装入该进程的地址空间,然后根据主程序的引入函数信息,查找相关DLL中的真实函数地址来修正主程序DLL/EXE要引出一个函数给其他DLL/EXE使用,有两种实现方法通过函数名引出仅仅通过序数引出引出函数节对病毒来说,非常重要的,2.6EXE文件的格式,2.6.3PE文件格式,引出函数节的开始,是一个IMAGE_EXPORT_DIRECTORY结构,2.6EXE文件的格式,2.6.3PE文件格式,已知引出函数名,获取函数地址的一般步骤定位到

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论