Вирусы на командном языке DOS
ВАТ.Combat
Безобидный нерезидентный ВАТ-вирус. При запуске ищет .ВАТ-файлы в текущем и родительском каталогах, в каталогах С:\, C:\DOS, C:\WINDOWS и записывается в начало обнаруженных файлов.
Использует "бинарный" способ — код вируса исполняется и как batch-команды, и как СОМ-файл (см. вирус "Batman"). С помощью этого приема вирус получает доступ к DOS-функциям (INT 21h). Для того чтобы запустить себя как СОМ-файл, вирус копирует себя во временный файл С:\СОМВАТ.СОМ и вызывает его.
Содержит строки:
* ComBat * Rajaat / Genesis ComBat.TMP
BAT.HexVirus
Безобидный нерезидентный ВАТ-вирус. Ищет .ВАТ-файлы в текущем и родительском каталогах, затем записывается в их конец. Основной код вируса в зараженных файлах содержится в виде шестнадцатеричного дампа (результат работы какого-то паковщика HEX-to-ASCII). При запуске вирус создает на диске временный СОМ-файл, записывает туда распаковщик ASCII-to-BIN, распаковывает свой основной код и выполняет его.
Вирус содержит строку:
HexVirus! BAT.Highjaq
Неопасный вирус-червь. Записывает себя в .ВАТ-файлы в архивы формата ARJ и системные драйверы. Нерезидентен (т. е. не содержит резидентного кода, который заражает файлы), но если вирус загружен в память как системный драйвер, то перехватывает INT 8, 21h и остается резидентно в памяти.
Код вируса состоит из двух частей. Первая часть — текстовые строки, которые выполняются при запуске вируса как ВАТ-файла, вторая часть содержит двоичный код, выполняемый при запуске вируса как СОМ-файла или системного драйвера.
Текстовая часть вируса выглядит следующим образом (метки являются также командами передачи управления, если вирус запущен как двоичный выполняемый файл):
::pFqD
@cttynul
copy/b %0.bat+%0 c:\q.com
dir \*.arj/s/b¦c:\q.com/i
:qlp)
if errorievel 1 goto qWpU
ren c:\q.com UMKQYGWK.5KA
echolNSTAliHIGH=C:\UMKQYGWK.5KA»c:\config.sys
:qWpU
for %%a in (%0 %0.bat) do if exist %%a set q=%%a
del c:\q.com
cttycon
@del %q%
При запуске такого кода из ВАТ-файла вирус копирует себя в файл C:\Q.COM (третья строка). Этот файл является "дроппером" (dropper) вируса, используемым для заражения других файлов.
Затем вирус запускает команду DIR, которая ищет в каталогах текущего диска ARJ-архивы и передает их имена файлу Q.COM (4-я строка). Файл Q.COM заражает обнаруженные архивы, затем находит резидентную копию вируса и возвращает Errorievel 1, если таковой код обнаружен. Если память не заражена (т. е. вирус не был запущен как системный драйвер), то вирус переименовывает файл Q.COM в UMKQYGWK.5KA и добавляет к файлу CONFIG.SYS строку:
INSTAIimGH=C:\UMKQYGWK.5KA
В результате вирус добавляет себя к списку системных драйверов и код вируса будет получать управление при загрузке DOS. Затем вирус уничтожает файл Q.COM и свой файл-носитель (ВАТ-файл, из которого был запущен вирус).
При запуске в виде СОМ-файла (см. третью строку) вирус получает имя ARJ-ap-хива из STDIN, проверяет архив и дописывает к архиву блок данных в формате ARJ. Этот блок является неупакованным (метод "store") файлом /WINSTART.BAT, который содержит код вируса.
При запуске в виде двоичного исполняемого файла текстовые строки выполняются как обычные команды ассемблера и вирус передает управление на свой код несколькими командами JMP:
0100 ЗА ЗА СМР BH,[BP+SI] ; text: ::pFqD 0102 70 46 JO Jmp_a 0104 71 44 JNO Jmp_a
0149 ЗА DB 3Ah
014А Jmp_a:
014А 71 6С JNO JBlp_b
014C 70 6A JO Jl)lp_b
text: :qlpj
0187 ЗА DB 3Ah
01B8 JmpJ):
01B8 71 57 JNO Maln_Code
01BA 70 55 JO Main.Code
0211 Main_Code:
text: :qWpU
Получив управление, двоичный код вируса определяет, был ли запущен вирус как СОМ-файл (в командной строке есть аргумент /i) или как системный драйвер (аргументы отсутствуют). Если вирус запущен как системный драйвер, то он перехватывает INT 8, 21h и остается резидентно в памяти при помощи DOS-вызова Keep (INT 21h,AH°31h).
Если компьютер работает не под Windows З.х, то обработчик INT 8 через некоторое время перезагружает компьютер. Обработчик INT 21h перехватывает два вызова. Первый является командой "AreYouHere?" (AX-FEFEh), по которой вирус определяет свою резидентную копию. Второй вызов — команда GetFileAttribute. Вирус блокирует ее, если обращение идет к файлу с именем, начинающимся на /W. Не очень понятно, зачем это нужно, видимо, вирус таким образом блокирует какие-то действия ARJ.EXE при распаковке файлов /WINSTART.BAT (дроппера вируса).
При запуске в виде двоичного файла без агрументов вирус также ставит у своего файла атрибуты Hidden и Readonly.
Вирус проверяет СОМ-порты и в некоторых случаях инициализирует порт модема и выводит туда строки:
АШ)МОА<сг> HIGHJAQ on COMx:38400,N,8,Kcr>
где СОМх — номер порта модема. Затем вирус перехватывает INT 8 и запускает файл C:\COMMAND.COM с параметрами:
C:\COM1/E:1024/P/F
Перехватчик INT 8 в данном случае перезагружает компьютер, если обнаруживает, что бит Carrier Detect в соответствующем порте равен единице.
BAT.Hot2Trot
Опасный нерезидентный ВАТ-вирус. При запуске ищет .ВАТ-файлы в текущем и родительском каталогах и записывается в их конец. Заражает файлы способом, напоминающим стандартный способ заражения СОМ-файлов: записывает себя в конец файла, а в его начало помещает команду перехода на код вируса. В результате зараженные файлы выглядят примерно так, как показано на рис. 4.4.
При заражении файлов вирус использует DOS-функции (INT 21h). Для этого вирус создает и запускает два временных СОМ-файла: записывает на диск шестнадцате-ричный код этих СОМ-файлов и конвертирует его в двоичный код утилитой DEBUG. Если DEBUG отсутствует в PATH, вирус портит файлы.
Bat.Naive.4894
Неопасный резидентный ВАТ-вирус. Перехватывает INT 21h и записывается в начало .ВАТ-файлов. Зараженные файлы выглядят следующим образом (строки, заключенные в квадратные скобки [ и ] являются комментариями):
@rem NAIVE
@if exist naive.* goto naive
@if •%range_check%=="yes goto naive
@ecno>naive.com [ HEX data1 ]
@naive.com
@if not errorievel 33 goto superwork
@del>nul naive.com
©goto naive
:superwork
@echo>naive.com [ HEX data2 ] @echo>naive.dat [ ASCII text ] @echo»naive.dat [ ASCII text ] @echo»naive.dat [ ASCII text ] [ повтор... ] @echo»naive.dat @naive.com<naive.dat >naive.exe @del>nul naive.com @del>nul naive.dat @naive.exe>nul @del>nul naive.exe @set range_check=yes : naive [ первоначальный .ВАТ-файл ]
HEX datal содержит код вызова проверки своей TSR-копии ("Ты здесь?"), HEX data2 — декодер ASCII->BIN, ASCII text содержит код вируса, преобразованный в ASCII-строки.
При запуске такого ВАТ-файла вирус проверяет ENVIRONMENT на наличие строки RANGE_CHECK и, если она равна YES, передает управление первоначальному файлу. В противном случае вирус создает файл NAIVE.COM, записывает туда код вызова "Ты здесь?", выполняет этот файл и проверяет код возврата (ERRORLEVEL).
Файл NAIVE.COM содержит только вызов INT 21h с AH-F6h. Если в памяти уже присутствует копия вируса, она возвращает 12345678 в регистрах CX:DX и NAIVE.COM отдает управление ВАТ-файлу с кодом ERRORLEVEL=33. Если TSR-копии нет, то NAIVE.COM возвращает ERRORLEVEL^.
Вирус (в ВАТ-файле) проверяет значение ERRORLEVEL и, если оно равно 32, удаляет файл NAIVE.COM и передает управление первоначальному ВАТ-коду. Иначе вирус создает два файла: NAIVE.DAT и NAIVE.COM (при этом уничтожается предыдущий файл NAIVE.COM). В файл NAIVE.COM вирус записывает декодер ASCII->BIN, в файл NAIVE.DAT — ASCII-строки. Затем вирус выполняет команду
@naive.com<naive.dat >naive.exe
которая создает файл NAIVE.EXE, считывает ASCII-данные из NAIVE.DAT, декодирует их в шестнадцатеричный код, записывает результат в NAIVE.EXE и затем запускает NAIVE.EXE на выполнение. NAIVE.EXE устанавливает резидентную копию вируса и возвращает управление ВАТ-файлу, который затем уничтожает NAIVE.EXE, определяет строку ENVIRONMENT "RANGE_CHECK-YES" и передает управление первоначальным командам ВАТ-файла.
При запуске код файла NAIVE.EXE вызывает ту же самую функцию "Ты здесь?", как описано выше. Если вируса нет в памяти, NAIVE.EXE проверяет номер своего "поколения" и в зависимости от его значения пытается вывести на экран текст, содержащий крик души индивидуума, наконец-то достигшего половой зрелости. Однако вирус содержит две ошибки, благодаря которым текст не выводится на экран: первая ошибка — вирус никогда не увеличивает свой счетчик, вторая — все сообщения перенаправлены в NUL командой
@naive.exe>nul
Затем вирус перехватывает INT 21h и остается резидентным при помощи INT 27h.