介绍
之前的病毒在每份感染文件中都复制了一份病毒拷贝,而链式病毒只保留一份病毒拷贝,其利用文件目录项,将受感染文件的头簇指向病毒
复习
回顾一下文件的查找过程
工作原理
感染过程:
- 如首次感染,将病毒保存在某个空闲扇区
- 将被感染文件(com文件)首簇存目录项保留段
- 修改首簇指向病毒的首簇
执行过程:
- 执行被感染文件则启动病毒,加载的是病毒的首簇,并执行
- 病毒获取当前执行程序的名字,获取对应目录项。从其中保留字段获取原文件首簇号,并遍历FAT簇链加载它们
- 跳到原文件加载的内存中执行
病毒设计
感染部分
- 被感染文件的真实起始扇区号写到目录表项的保留区(目录项的保留区从目录项头第13个字节即偏移0ch开始,共10字节)
- 修改被感染文件的目录项的起始扇区字段指向病毒文件的首簇
- 目录项中的文件大小字段也要修改成病毒的真实大小,这样才能保证病毒能被完整加载
- 将原来病毒文件的目录项全部32字节改为0,这样从外部看就不存在这个病毒文件,也没有对应的目录项了
执行部分
- 先获取被感染程序的名字
- 然后从根目录寻找被感染程序的目录项
- 找到后从该文件目录项的保留区获取被感染程序的首簇号
- 找到被感染程序所在簇(即扇区),加载该扇区到内存
重点
获取执行文件名
- 从com文件的ds:2c处获得环境块首址的段地址
- 环境块就在段地址:0000处
- 环境块内容PATH=……COMSPEC=C:\COMMAND.COM\0….0 0 xxxx
- 环境块开始是PATH等0字符结尾的串,最后是两个00字符。然后有两个字节可能是数目,之后就是执行程序的名字