精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>电脑技术>>● 电脑病毒>>★毒者文摘★>>1575病毒演示程序(欢迎来看看)

主题:1575病毒演示程序(欢迎来看看)
发信人: solarlight()
整理人: emil(2000-06-24 14:32:30), 站内信件
1575病毒演示程序

概述:
   该程序是1575病毒演示程序,它主要通过修改硬件定时中断(中断类型号8)将其
设置到本程序的
地址在运行忘本程序之后在运行原中断服务程序来达到程序执行的效果.


源程序:

;**************************************************************
;This structure is for compiling ".com" file

;**************************************************************
code_seg segment
        org 100h
assume cs:code_seg,ds:code_seg,es:code_seg,ss:code_seg
;------------------------------------------------------
main proc far
mov ah,35h
mov al,8
int 21h
lea si,bios_int8
mov word ptr[si],bx
mov word ptr[si+2],es       ;save bios_int8

mov ah,25h
mov al,8
lea dx,run     ;the current ds is psp segment address
int 21h                     ;set new bios_int8 

mov ah,31h
mov al,0                    ;return code 
        mov dx,((prg_len+15)/16)+10h;resident memory paragraphs length

        int 21h                     ;exit & stay resident
       
main endp
;-------------------------------------------------
run proc far
push ax
push bx
push cx
push dx
push si
push di
push bp
push ds
push es
        
mov ah,3
mov bh,0
int 10h
push dx                        ;save original cursor position

mov ch,00010000b
mov cl,0
mov ah,1
int 10h                        ;close cursor display function        
        

        call display1
        call save_old
        call modify_new
        call delay
        call erase
        
        mov ah,2
        mov bh,0
        pop dx
        int 10h                        ;restore original cursor positi
on
        
        mov ch,00000111b
        mov cl,00001000b
        mov ah,1
        int 10h                        ;enable cursor display function

        
        pop es
        pop ds
        pop bp
        pop di
        pop si
        pop dx
        pop cx
        pop bx
        pop ax
        jmp cs:bios_int8
run endp 
;------------------------------------------------------
display1 proc near
push ax
push bx
push cx
push dx
push si
push di                       ;save register

mov ax,cs
mov ds,ax

mov cx,2                      ;display twice
display_head:
        mov dh,new_row                ;set raw
mov dl,new_col                ;set column
mov bh,0                      ;set display page
mov ah,2 
int 10h                       ;set new cursor position

mov si,offset char_buf
add si,flag                   ;select character
xor flag,0001h                ;prepare flag for next time
mov bh,0
mov al,byte ptr[si]           ;set character
        mov bl,0001100b               ;set color
push cx                       ;save cx
mov cx,1                      ;set display times
mov ah,9
int 10h                       ;display 1st character

        mov si,offset new_row         ;set raw
inc si
mov dh,[si]
mov di,offset new_col         ;set column
        inc di
        mov dl,[di] 
mov bh,0                      ;set display page
mov ah,2
int 10h                       ;set new cursor position
mov al,neck                   ;set character
mov bh,0                      ;set display page
mov cx,1
mov bl,00001110b              ;set color
mov ah,9             
int 10h                       ;display neck

mov cx,7
mov si,offset new_row
add si,2
mov di,offset new_col
add di,2
display_tail:
        mov dh,byte ptr[si]           ;set row
        mov dl,byte ptr[di]           ;set column
        mov bh,0                      ;set display page
        mov ah,2
        int 10h                       ;set new cursor position
        
        mov bh,0                      ;set display page
        mov al,15                     ;set character
        mov bl,00001010b              ;set color
        push cx                       ;save cx register
        mov cx,1
        mov ah,9            
        int 10h                       ;display one tail element
        pop cx
        inc si
        inc di
        dec cx
        jnz display_tail
       
        pop cx                        ;fetch display times
dec cx
        call delay                    ;delay a while
jnz display_head
         
        pop di
        pop si
        pop dx
        pop cx
        pop bx
        pop ax
        ret
display1 endp
;--------------------------------------------------
erase proc near
push ax
push bx
push cx
push dx
push si
push di                       ;save registers

mov ax,cs
mov ds,ax

mov si,offset old_row
mov di,offset old_col
mov cx,9
set_cur_erase:
        mov bh,0                      ;set display page
        mov dh,byte ptr[si]       ;set row
        mov dl,byte ptr[di]       ;set column
        mov ah,2
        int 10h               ;set new cursor position
        
        mov bh,0          ;set display page
        mov al,' '          ;set character
        mov bl,0                ;set display color=black:black
        push cx                 ;set cx register
        mov cx,1          ;set display times
        mov ah,9
        int 10h                  ;erase one character
        pop cx
        inc si                   ;next row  
        inc di                  ;next column
        dec cx
        jnz set_cur_erase
        pop di
        pop si
        pop dx
        pop cx
        pop bx
        pop ax
        ret 
erase endp
;-----------------------------------------------
;This procedure generates a one_quarter second delay
delay proc near
push cx
push dx
        ;mov dx,25
mov dx,400
d1:
        mov cx,2801
d2:
        loop d2
        dec dx
        jnz d1
        pop cx
        pop dx
        ret
delay endp
;----------------------------------------------------  
;This procedure modifys new_row & new_col
modify_new proc near     
        push cx   
        push si
        push di                      ;save register
        
        mov ax,cs
mov ds,ax
        
        mov si,offset new_row        ;si=address of new_row
        mov di,offset new_col        ;di=address of new_col
        mov cx,9
modify_again:
        cmp byte ptr[di],79
        je mod1
        inc byte ptr[di]
        jmp mod3
mod1:
        mov byte ptr[di],0
        cmp byte ptr[si],24
        je mod2 
        inc byte ptr[si]
        jmp mod3
mod2:
mov byte ptr[si],0
mod3:
        inc si
        inc di
        dec cx
        jnz modify_again         
       
pop di
pop si
pop cx
ret
modify_new endp
;---------------------------------------------------
;This procedure copys (new_row,new_col) to (old_row,old_col)
save_old proc near
push ax
push si
push di                     ;save registers

mov ax,cs
mov ds,ax

mov si,offset new_row
mov di,offset old_row
mov cx,9
copy_row:
        mov al,byte ptr[si]
        mov byte ptr[di],al
        inc si
        inc di
        dec cx 
        jnz copy_row                ;copy row

mov si,offset new_col
mov di,offset old_col
mov cx,9
copy_col:
mov al,byte ptr[si]
mov byte ptr[di],al
inc si
inc di
dec cx
jnz copy_col                ;copy column

pop di
pop si
pop ax
ret
save_old endp
;------------------------------------------------             
        char_buf  db 238,240           ;two head character
        neck      db 247               ;neck charcter
        flag      dw 0                 ;a flag to specify head charact
er 
old_row   db 9 dup(0)          ;9 old character position
old_col   db 9 dup(0)          ;(old_row[i],old_col[i])
        new_row   db 9 dup(0)          ;9 new character position
      ; new_col   db 9 dup(0)          ;(new_row[i],new_col[i])
        new_col   db 8,7,6,5,4,3,2,1,0 
        bios_int8 dd ?   
        counter   db 0
        prg_len   equ $-main
        ;--------------------------------------------------
code_seg ends
        end main        



作者:David Chu E-mail:[email protected] (http://solarlight.yeah.net)
欢迎来上述网站看看
 

 



--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.101.193.157]

[关闭][返回]