第三讲病毒机理分析2本章概要本章内容主要是计算机病毒的基础知识,包括:计算机病毒结构分析计算机病毒传播技术计算机病毒触发机制计算机病毒隐藏机制计算机病毒破坏机制3本章目标通过本章学习,学员应该了解各种病毒的结构、传播技术、病毒的触发、隐藏、破坏机制等,为深入了解计算机病毒做好准备。计算机病毒结构分析Windows重要文件的结构•磁盘引导区结构;•COM文件结构;•EXE文件结构;•PE文件结构;5磁盘的基本概念•磁盘:一种磁介质的外部存储设备,在其盘片的每一面上,以转动轴为轴心、以一定的磁密度为间隔的若干同心圆就被划分成磁道(Track),每个磁道又被划分为若干个扇区(Sector),数据就按扇区存放在硬盘上。6磁盘引导区•磁盘引导区:记录着磁盘的一些最基本的信息,磁盘的第一个扇区被保留为主引导扇区,它位于整个硬盘的0磁道0柱面1扇区,包括硬盘主引导记录MBR(MainBootRecord)和分区表DPT(DiskPartitionTable)以及磁盘的有效标志。•主引导记录的作用就是检查分区表是否正确以及确定哪个分区为引导分区,并在程序结束时把该分区的启动程序(也就是操作系统引导扇区)调入内存加以执行。•在总共512字节的主引导扇区里MBR占446个字节(偏移0--偏移1BDH),DPT占64个字节(偏移1BEH--偏移1FDH),最后两个字节“55AA”(偏移1FEH--偏移1FFH)是硬盘有效标志7标准的主引导扇区的结构地址长度(字节)描述HEXDEC00000396-446代码区39436四个9byte的主分区表入口(选用IBM的延伸MBR分区表规划)01B84404选用磁盘标志01BC4442一般为空值:0x000001BE44664四个16byte的主分区表入口(标准MBR分区表规划)01FE5102MBR有效标志(0x550xAA)8分区表DPT(DiskPartitionTable)偏移地址字节数含义分析01BE1分区类型:00表示非活动分区:80表示活动分区;其他为无效分区01BF~13分区的起始地址(面/扇区/磁道)21分区的操作系统的类型3~53该分区的结束地址(面/扇/道)6~94该分区起始逻辑扇区01CA~01CD4该分区占用的总扇区数9被破坏的主引导区记录“Non-Systemdiskordiskerror,replacediskandpressakeytoreboot”(非系统盘或盘出错)“ErrorLoadingOperatingSystem”(装入DOS引导记录错误)“NoROMBasic,SystemHalted”(不能进入ROMBasic,系统停止响应)比较严重的情况下,无任何信息10引导病毒感染过程引导扇区11引导记录病毒代码内存引导扇区引导扇区系统启动读写软盘读写硬盘病毒代码病毒提供的引导扇区主引导记录病毒引导病毒在感染硬盘之后硬盘12Sector1Sector2Sector3Sector1Sector2Sector3病毒病毒代码被病毒感染后的硬盘主引导扇区病毒代码主引导扇区MBRMBR几种引导型病毒:“石头”病毒:把自己放在主引导记录和第一个引导扇区之间,这中间很多扇区是没有被使用的13“大脑”和“乒乓”病毒:可以分析文件分配表的结构,发现没有被使用的扇区之后,将扇区的标志设置为“坏”,然后将病毒代码放在这些所谓的坏扇区中其它病毒:将自己放在硬盘的最后一个扇区上(由于现代的硬盘是非常大,最后一个扇区被使用的可能性是非常小的,但是如果在硬盘上同时安装了OS/2操作系统,这些病毒会损坏OS/2操作系统的文件,因为OS/2操作系统会使用这个扇区存放一些系统数据)。现在这种病毒已经比较少。COM文件结构•COM文件结构–就是源代码的机器码的集合–COM文件包含程序的一个绝对映象–为了运行程序准确的处理器指令和内存中的数据,MS-DOS通过直接把该映象从文件拷贝到内存而加载.COM程序,它不作任何改变。–为加载一个.COM程序,MS-DOS首先试图分配内存,因为.COM程序必须位于一个64K的段中,所以.COM文件的大小不能超过65,024(64K减去用于PSP的256字节和用于一个起始堆栈的至少256字节)14exe文件结构•EXE文件结构:–属于一种多段的结构,是DOS最成功和复杂的设计之一。–一个文件头–一个可重定位程序的映像15.exe文件文件头程序映像文件头结构:包含MS-DOS用于加载程序的信息,例如程序的大小和寄存器的初始值。文件头还指向一个重定位表,该表包含指向程序映像中可重定位段地址的指针链表。exe文件头结构16偏移量含义00h~01hMZ,exe文件标记02h~03h文件长度除以512的余数04h~05h文件长度除以512的商06h~07h重定位项的个数08h~09h文件头除以16的商0ah~0bh程序运行所需最小段数0ch~0dh程序运行所需最大段数0eh~0fh堆栈段的段值(SS)10h~11h堆栈段的段值(SP)12h~13h文件校验和14h~15h装入模块入口时的IP值16h~17h装入模块代码相对段值(CS)18h~19h重定位表,开始位置,以位移地址表示1ah~1bh覆盖号(程序驻留为零)1ch重定位表,起点由偏移18h~19h给出,项数由06h~07h标明•程序映像–包含处理代码和程序的初始数据,紧接在文件头之后。–大小以字节为单位,等于exe文件的大小减去文件头的大小–也等于exHeaderSize的域的值乘以16–MS-DOS通过把该映像直接从文件复制到内存加载exe程序,然后调整定位表中说明的可重定位段地址17文件头程序映像=exHeaderSize域值*16(字节)=exHeaderSize域值(字节)•定位表–是一个重定位指针数组,每个指向程序映像中的可重定位段地址•重定位指针由两个16位值组成:–偏移量和段值18AL加载.exe程序19文件头.exe文件程序映像MS-DOS确定exe标志计算程序映像大小PSP大小exMinAlloc域说明的内存大小++内存大小MS-DOS分析申请内存段地址确定MS-DOS加载重定位表、调整段地址读取并调整可重定向位段地址起始段地址MS-DOS调整被加载程序的代码和数据段256BPSPAHMS-DOS加载com程序时所设置的值SSSPSS起始地址csIPCS映像PE文件结构•PE文件–PortableExecutable–是一种针对微软WindowsNT、Windows95和Win32s系统,由微软公司设计的可执行的二进制文件(DLLs和执行程序)格式,目标文件和库文件通常也是这种格式20认识PE文件结构查找某个结构信息的方法:•通过链表–数据在文件中存放的位置比较自由•采用紧凑或固定的位置存放要求数据结构大小固定,他在文件中的存放位置也相对固定。2122PE文件结构层次图PE文件简单感染方式1.判断目标文件开始的两个字节是否为“MZ”2.判断PE文件标记“PE”3.判断感染标记,如果已被感染过则跳出继续执行被感染程序,否则继续4.获得Directory(数据目录)的个数,每个数据目录信息占8个字节5.获得节表起始位置6.得到目前最后节表的末尾偏移(紧接其后用于写入一个新的病毒节)节表起始位置+节的个数×(每个节表占用的字节数28H)=目前最后节表的末尾偏移7.根据本身的修改修改节表的信息23系统的启动和加载WindowsXP的启动过程1.电源开启自检过程2.初始化启动过程3.引导程序载入过程4.检测和配置硬件过程5.内核加载过程6.用户登录过程7.即插即用设备的检测过程25Step1:电源开启自检过程1.进行硬件的初始化检查例如:检查内存的容量等2.验证用于启动操作系统的设备是否正常例如:检查硬盘是否存在等3.从CMOS中读取系统配置信息26在完成了电源启动的自检之后,每个带有固件的硬件设备,如显卡和磁盘控制器,都会根据需要完成内部的自检操作。CMOS•在计算机领域,CMOS常指保存计算机基本启动信息(如日期、时间、启动设置等)的芯片。有时人们会把CMOS和BIOS混称,其实CMOS是主板上的一块可读写的RAM芯片,是用来保存BIOS的硬件配置和用户对某些参数的设定。CMOS可由主板的电池供电,即使系统掉电,信息也不会丢失。27Step2:初始化启动过程(硬盘引导)1.系统首先检测打开电源的硬盘2.若该硬盘是启动盘,BIOS就将主引导记录(MainBootRecord――MBR)中的引导代码载入内存3.接着,BIOS会将启动过程的运行交给MBR来进行4.计算机搜索MBR中的分区表,找出活动分区(ActivePartition)5.计算机将活动分区的第一个扇区中的引导代码载入到内存6.引导代码检测当前使用的文件系统是否可用7.引导代码查找ntldr文件,找到之后启动它8.BIOS将控制权转交给ntldr,由ntldr完成操作系统的启动28Step3:引导程序载入过程1.在基于X86CPU的系统下,设置CPU的运行使用32位的Flat内存模式2.启动文件系统3.读取boot.ini文件4.根据需要提供启动菜单5.检测硬件和硬件配置29•本过程主要由ntldr文件完成•NTLDR全称是是一个隐藏的,只读的系统文件,位置在系统盘的根目录,用来装载操作系统。是winNT/win2000/WinXP的引导文件,当此文件丢失时启动系统会提示“NTLDRismissing...”并要求按任意键重新启动,不能正确进入系统,应该在系统正常的时候给予备份。Step4:检测和配置硬件过程1.ntldr会启动ntdetect.com程序2.ntdetect.com会通过调用系统固件程序收集安装的硬件信息3.ntdetect.com将这些信息传递送回ntldr4.ntldr将这些信息组织成为内部的断气结构形式5.由ntldr启动并发送信息给ntoskrnl.exe30完成信息的检测之后,WindowsXP会在屏幕上显示那个著名的WindowsXP商标,并显示一个滚动的,告诉用户Windows的启动进程Step4:检测和配置硬件过程--Ntdetect.comNtdetect.com会收集如下类型的硬件信息:1.系统固件信息,例如时间和日期等2.总线适配器的类型3.显卡适配器的类型4.键盘5.通信端口6.磁盘7.软盘8.输入设备,例如鼠标9.并口10.安装在ISA槽中的ISA设备31ISA•ISA插槽是基于ISA总线(IndustrialStandardArchitecture,工业标准结构总线)的扩展插槽,其颜色一般为黑色,比PCI接口插槽要长些,位于主板的最下端。其工作频率为8MHz左右,为16位插槽,最大传输率16MB/sec,可插接显卡,声卡,网卡以及所谓的多功能接口卡等扩展插卡。其缺点是CPU资源占用太高,数据传输带宽太小,是已经被淘汰的插槽接口。•在1988年,康柏、惠普等9个厂商协同把ISA扩展到32-bit,这就是著名的EISA(ExtendedISA,扩展ISA)总线。可惜的是,EISA仍旧由于速度有限,并且成本过高,在还没成为标准总线之前,在20世纪90年代初的时候,就给PCI总线给取代了。32Step5:内核加载过程1.将内核(ntoskrnl.exe)和硬件抽象层(hal.dll)载入到内存2.加载控制集信息ntldr从注册表中的HKEY_LOCAL-_MACHINE\SYSTEM位置加载相应的控制集(ControlSet)信息,并确定在启动过程中要加载的设备驱动3.加载设备驱动程序和服务系统会在BIOS的帮助下开始加载设备驱动程序、服务4.启动会话管理器5.内核会启动会话管理器(SessionManager),即smss.exe(1)创建系统环境变量(2)创建虚拟内存页面文件33Step6:用户登录过程•Windows子系统会启动winlogon.exe(服务)用于提供对Windows用户的登录和注销的支持•一个图形化的识别和认证组件收集用户的帐号和密码,然后传送给LSA以进行认证处理•通