第三章计算机病毒结构分析_第1页
第三章计算机病毒结构分析_第2页
第三章计算机病毒结构分析_第3页
第三章计算机病毒结构分析_第4页
第三章计算机病毒结构分析_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

1、第三章 计算机病毒结构分析本章学习目标 掌握计算机病毒的结构 掌握计算机病毒的工作机制 了解引导型病毒原理 了解com、exe、ne、pe可执行文件格式 掌握com文件病毒原理及实验 掌握pe文件型病毒及实验总体概念 dos是vxer的乐园(aver) 9x病毒 ring3, ring0 2k病毒 主要是ring3 windows文件格式变迁: com exe:mz-ne-pe vxd: le(16bit, 32bit)一、计算机病毒的结构和工作机制计算机病毒的结构和工作机制 四大模块: 感染模块 触发模块 破坏模块(表现模块) 引导模块(主控模块) 两个状态: 静态 动态工作机制引导模块 引

2、导前寄生 寄生位置: 引导区 可执行文件 寄生手段: 替代法(寄生在引导区中的病毒常用该法) 链接法(寄生在文件中的病毒常用该法) 引导过程 驻留内存 窃取系统控制权 恢复系统功能 引导区病毒引导过程 搬迁系统引导程序-替代为病毒引导程序 启动时-病毒引导模块-加载传染、破坏和触发模块到内存-使用常驻技术 最后,转向系统引导程序-引导系统 文件型病毒引导过程 修改入口指令-替代为跳转到病毒模块的指令 执行时-跳转到病毒引导模块-病毒引导模块-加载传染、破坏和触发模块到内存-使用常驻技术 最后,转向程序的正常执行指令-执行程序感染模块感染模块 病毒传染的条件 被动传染(静态时) 用户在进行拷贝磁

3、盘或文件时,把一个病毒由一个载体复制到另一个载体上。或者是通过网络上的信息传递,把一个病毒程序从一方传递到另一方。这种传染方式叫做计算机病毒的被动传染。 主动传染(动态时) 以计算机系统的运行以及病毒程序处于激活状态为先决条件。在病毒处于激活的状态下,只要传染条件满足,病毒程序能主动地把病毒自身传染给另一个载体或另一个系统。这种传染方式叫做计算机病毒的主动传染。 传染过程 系统(程序)运行-各种模块进入内存-按多种传染方式传染 传染方式 立即传染,即病毒在被执行的瞬间,抢在宿主程序开始执行前,立即感染磁盘上的其他程序,然后再执行宿主程序。 驻留内存并伺机传染,内存中的病毒检查当前系统环境,在执

4、行一个程序、浏览一个网页时传染磁盘上的程序,驻留在系统内存中的病毒程序在宿主程序运行结束后,仍可活动,直至关闭计算机。 文件型病毒传染机理 首先根据病毒自己的特定标识来判断该文件是否已感染了该病毒; 当条件满足时,将病毒链接到文件的特定部位,并存入磁盘中; 完成传染后,继续监视系统的运行,试图寻找新的攻击目标。 文件型病毒传染途径 加载执行文件 浏览目录过程 创建文件过程 破坏模块破坏模块 破坏是vxer的追求,病毒魅力的体现 破坏模块的功能 破坏、破坏、还是破坏 破坏对象 系统数据区、文件、内存、系统运行速度、磁盘、cmos、主板和网络等。 破坏的程度触发模块触发模块 触发条件 计算机病毒在

5、传染和发作之前,往往要判断某些特定条件是否满足,满足则传染或发作,否则不传染或不发作或只传染不发作,这个条件就是计算机病毒的触发条件。 触发模块的目的是调节病毒的攻击性和潜伏性之间的平衡 大范围的感染行为、频繁的破坏行为可能给用户以重创,但是,它们总是使系统或多或少地出现异常,容易使病毒暴露。 而不破坏、不感染又会使病毒失去其特性。 可触发性是病毒的攻击性和潜伏性之间的调整杠杆,可以控制病毒感染和破坏的频度,兼顾杀伤力和潜伏性。病毒常用的触发条件 日期触发 时间触发 键盘触发 感染触发 例如,运行感染文件个数触发、感染序数触发、感染磁盘数触发、感染失败触发等。 启动触发 访问磁盘次数触发 cp

6、u型号/主板型号触发二、二、16位操作系统病毒编制技术位操作系统病毒编制技术 1 引导型病毒编制原理引导型病毒编制原理 2 com、exe、ne文件结构及运行原理文件结构及运行原理 3 com文件病毒原理文件病毒原理1 引导型病毒编制原理引导型病毒编制原理 pc引导流程加电cpubios初始化post自检引导区、分区表检查发现操作系统执行引导程序mbr和分区表装载dos引导区运行dos引导程序加载io.sysmsdos.sys加载引导型病毒从软盘加载到内存寻找dos引导区的位置将引导区移动到别的位置病毒将自己写入原引导区的位置mbr和分区表将病毒的引导程序加载入内存运行病毒引导程序病毒驻留内存

7、原引导程序执行并加载系统2comexene文件结构及运行原文件结构及运行原理理com格式最简单的可执行文件就是dos下的以com(copy of memory)文件。com格式文件最大64kb,内含16位程序的二进制代码映像,没有重定位信息。com文件包含程序二进制代码的一个绝对映像,也就是说,为了运行程序准确的处理器指令和内存中的数据,dos通过直接把该映像从文件拷贝到内存来加载com程序,系统不需要作重定位工作。 加载com程序 dos尝试分配内存。因为com程序必须位于一个64k的段中,所以com文件的大小不能超过65,024(64k减去用于psp的256字节和用于一个起始堆栈的至少25

8、6字节)。 如果dos不能为程序、一个psp、一个起始堆栈分配足够内存,则分配尝试失败。 否则,dos分配尽可能多的内存(直至所有保留内存),即使com程序本身不能大于64k。 在试图运行另一个程序或分配另外的内存之前,大部分com程序释放任何不需要的内存。 分配内存后,dos在该内存的头256字节建立一个psp(program segment prefix:程序段前缀)。 创建psp后,dos在psp后立即开始(偏移100h)加载com文件,它置ss、ds和es为psp的段地址,接着创建一个堆栈。 dos通过把控制传递偏移100h处的指令而启动程序。程序设计者必须保证com文件的第一条指令是

9、程序的入口点。 因为程序是在偏移100h处加载,因此所有代码和数据偏移也必须相对于100h。汇编语言程序设计者可通过置程序的初值为100h而保证这一点(例如,通过在源代码的开始使用语句org 100h)。 psp结构偏移大小 长度(byte) 说 明0000h 02 中断20h0002h 02 以节计算的内存大小(利用它可看出是否感染引导型病毒)0004h 01 保留0005h 05 至dos的长调用000ah 02 int 22h 入口 ip000ch 02 int 22h 入口 cs000eh 02 int 23h 入口 ip0010h 02 int 23h 入口 cs0012h 02 i

10、nt 24h 入口 ip0014h 02 int 24h 入口 cs0016h 02 父进程的psp段值(可测知是否被跟踪)0018h 14 存放20个soft号002ch 02 环境块段地址(从中可获知执行的程序名)002eh 04 存放用户栈地址指针0032h 1e 保留0050h 03 dos调用(int 21h / retf)0053h 02 保留0055h 07 扩展的fcb头005ch 10 格式化的fcb1006ch 10 格式化的fcb2007ch 04 保留0080h 80 命令行参数长度0081h 127 命令行参数mz格式 mz格式:com发展下去就是mz格式的可执行文件

11、,这是dos中具有重定位功能的可执行文件格式。mz可执行文件内含16位代码,在这些代码之前加了一个文件头,文件头中包括各种说明数据,例如,第一句可执行代码执行指令时所需要的文件入口点、堆栈的位置、重定位表等。 装载过程: 操作系统根据文件头的信息将代码部分装入内存, 然后根据重定位表修正代码, 最后在设置好堆栈后从文件头中指定的入口开始执行。 dos可以把mz格式的程序放在任何它想要的地方。mz标志mz文件头其它信息重定位表的字节偏移量重定位表重定位表可重定位程序映像二进制代码/ mz格式可执行程序文件头struct headexeword wtype; / 00h mz标志word wlas

12、tsecsize; / 02h 最后扇区被使用的大小word wfilesize; / 04h 文件大小word wrelocnum; / 06h 重定位项数word wheadsize; / 08h 文件头大小word wreqmin; / 0ah 最小所需内存word wreqmax; / 0ch 最大所需内存word winitss; / 0eh ss初值word winitsp; / 10h sp初值word wchksum; / 12h 校验和word winitip; / 14h ip初值word winitcs; / 16h cs初值word wfirstreloc; / 18h

13、 第一个重定位项位置word woverlap; / 1ah覆盖word wreserved0 x20;/1ch 保留word wneoffset; / 3ch ne头位置; ne格式 为了保持对dos的兼容性并满足windows的需要,win3.x中出现的ne格式的可执行文件中保留了mz格式的头,同时ne文件又加了一个自己的头,之后才是可执行文件的可执行代码。ne类型包括了exe、dll、drv和fon四种类型的文件。ne格式的关键特性是:它把程序代码、数据、资源隔离在不同的可加载区中;藉由符号输入和输出,实现所谓的运行时动态链接。ne装载 16位的ne格式文件装载程序(ne loader)

14、读取部分磁盘文件,并生成一个完全不同的数据结构,在内存中建立模块。 当代码或数据需要装入时,装载程序必须从全局内存中分配出一块,查找原始数据在文件的位置,找到位置后再读取原始的数据,最后再进行一些修正。 每一个16位的模块(module)要负责记住现在使用的所有段选择符,该选择符表示该段是否已经被抛弃等信息。 ms-dos头dos文件头保留区域windows头偏移dos stub程序信息块ne文件头段表资源表驻留名表模块引用表引入名字表入口表非驻留名表代码段和数据段程序区重定位表3 com文件病毒原理文件病毒原理 感染过程: 将开始的3个字节保存在orgcode中 将这3个字节更改为0e9h和

15、com文件的实际大小的二进制编码。 将病毒写入原com文件的后边。 在病毒的返回部分,将3个字节改为0e9h和表达式(当前地址com文件的实际大小病毒代码大小)的二进制编码,以便在执行完病毒后转向执行原程序。e9:e9源代码:jump源代码示例讲解三、三、32位操作系统病毒示例分析位操作系统病毒示例分析 pe文件结构及其运行原理文件结构及其运行原理 win32文件型病毒编制技术文件型病毒编制技术 从从ring3到到ring0概述pe文件结构及其运行原理文件结构及其运行原理(1)pe文件格式总体结构文件格式总体结构 pe(portable executable:可移植的执行体) 是win32环境

16、自身所带的可执行文件格式。 它的一些特性继承自unix的coff(common object file format)文件格式。 可移植的执行体意味着此文件格式是跨win32平台的,即使windows运行在非intel的cpu上,任何win32平台的pe装载器都能识别和使用该文件格式。 当然,移植到不同的cpu上pe执行体必然得有一些改变。 除vxd和16位的dll外,所有 win32执行文件都使用pe文件格式。因此,研究pe文件格式是我们洞悉windows结构的良机。 pe文件结构总体层次分布dos mz headermz格式头dos stubdos桩程序pe headerpe文件头sect

17、ion table节表section 1第1个节section 2第2个节section n第n个节 所有 pe文件必须以一个简单的dos mz header开始。有了它,一旦程序在dos下执行,dos就能识别出这是有效的执行体。 dos stub实际上是个有效的exe,在不支持 pe文件格式的操作系统中,它将简单显示一个错误提示,类似于字符串 “该程序不能在dos模式下运行”或者程序员可根据自己的意图实现完整的dos代码。 pe header是pe相关结构image_nt_headers的简称,其中包含了许多pe装载器用到的重要域。 section table(节表) 是节的索引。 pe文件

18、的真正内容被划分成块,我们称之为sections(节)。 每节是一块拥有共同属性的数据,比如代码/数据、读/写等。 把pe文件想象成一逻辑磁盘,pe header是磁盘的boot扇区,而sections就是各种文件,每种文件自然就有不同属性如只读、系统、隐藏、文档等等。其中节表就像目录。 值得我们注意的是节的划分是基于各组数据的共同属性而不是逻辑概念。因此,我么不必关心节中类似于data, code或其他的逻辑概念。如果数据和代码拥有相同属性,它们就可以被归入同一个节中。 节名称仅仅是个区别不同节的符号而已,类似于data和code等的节名称只为了便于识别,惟有节的属性设置决定了节的特性和功能

19、。如果某块数据想作为只读属性,就可以将该块数据放入属性为只读的节中。装载pe文件的主要步骤 第一,当pe文件被执行,pe装载器检查dos mz header里的pe header偏移量。如果找到,则跳转到pe header。 第二,pe装载器检查pe header的有效性。如果有效,就跳转到pe header的尾部。 第三,紧跟pe header的是节表。pe装载器读取其中的节索引信息,并采用文件映射方法将这些节映射到内存,同时附上节表里指定的节属性。 第四,pe文件映射入内存后,pe装载器将处理pe文件中类似import table(引入表)逻辑部分。(2)检验pe文件的有效性 什么样的文件

20、是有效的? 只要一些关键数据结构有效,我们就认为是有效的pe文件了。 这个重要数据结构就是pe header。从编程角度看,pe header实际就是一个 image_nt_headers 结构。 image_nt_headers 结构的定义如下:image_nt_headers struct signature dd fileheader image_file_header optionalheader image_optional_header32image_nt_headers ends signature:该域为pe标记,值为50h, 45h, 00h, 00h(pe00)。 imag

21、e_dos_signature equ 5a4dh image_os2_signature equ 454eh image_os2_signature_le equ 454ch image_vxd_signature equ 454ch image_nt_signature equ 4550h fileheader:该结构域包含了关于pe文件物理分布的信息,比如节数目、文件执行机器等。optionalheader:该结构域包含了关于pe文件逻辑分布的信息。定位pe header dosmz header(image_dos_header )包含了指向pe header 的文件偏移量,即e_lf

22、anew。 定位步骤为: 第一,检验文件头部第一个字的值是否等于image_dos_signature,是则dos mz header有效。 第二,一旦证明文件的dos mz header有效后,就可用e_lfanew来定位pe header了。 第三,比较pe header的第一个字的值是否等于image_nt_ signature。如果前后两个值都匹配,那我们就认为该文件是一个有效的pe文件。(3)文件头(fileheader) 文件头(fileheader)是image_nt_headers的一个重要的域。文件头的表示结构为: image_file_header struct machi

23、ne word numberofsections word timedatestamp dd pointertosymboltable dd numberofsymbols dd sizeofoptionalheader word characteristics word image_file_header ends 域名含义machine该文件运行所要求的cpu。对于intel平台,该值是image_file_machine_i386 (14ch)。numberofsections文件的节数目。如果我们要在文件中增加或删除一个节,就需要修改这个值。timedatestamp文件创建日期和时间

24、。要让它保持原样,不要变pointertosymboltable用于调试。numberofsymbols用于调试。sizeofoptionalheader指示紧随本结构之后的optionalheader结构大小,必须为有效值。characteristics关于文件信息的标记,比如文件是exe还是dll。注:节、节表和numberofsections的关系节表数组边界确定numberofsections全标示(4) optional header optional header是pe header中最后,最大,也是最重要的成员,包含了pe文件的逻辑分布信息。该结构共有31个域。 虚拟地址(vav

25、irtual address) rva(relative virtual address,相对虚拟地址)域名含义addressofentrypointpe装载器准备运行的pe文件的第一个指令的rva。若您要改变整个执行的流程,可以将该值指定到新的rva,这样新rva处的指令首先被执行。imagebasepe文件的优先装载地址。比如,如果该值是400000h,pe装载器将尝试把文件装到虚拟地址空间的400000h处。若该地址区域已被其他模块占用,那pe装载器会选用其他空闲地址。sectionalignment内存中节对齐的粒度。例如,如果该值是4096 (1000h),那么每节的起始地址必须是4

26、096的倍数。若第一节从401000h开始且大小是10个字节,则下一节必定从402000h开始,即使401000h和402000h之间还有很多空间没被使用。filealignment文件中节对齐的粒度。含义类似sectionalignment。majorsubsystemversionminorsubsystemversion win32系统版本。sizeofimage内存中整个pe映像体的尺寸。它是所有头和节经过节对齐处理后的大小。 sizeofheaders所有头+节表的大小,也就等于文件尺寸减去文件中所有节的尺寸。可以以此值作为pe文件第一节的文件偏移量。subsystemnt用来识别pe文件属于哪个子系统。对于大多数win32程序,只有两类值: windows gui 和 windows cui (控制台)。(5)节表 (section table) section table是用来索引节的数组结构,其详细表示为: image_sizeof_short_name equ 8 image_section_header struct name db image_sizeof_short_name dup(?) union misc physicaladdress dd v

温馨提示

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

评论

0/150

提交评论