провождению "улыбающейся рожицы" код ASCII 02 между двигающимися
препятствиями код ASCII 254. В процессе анализа вируса я даже поиграл в
данную игрушку. Дошел аж до 2 уровня... Вид игры выглядит, примерно,
так:
ю ю
ю ю ю ю ю ю
ю ю ю ю ю ю ю
ю ю ю ю ю ю
Ply.based (Ply.3360,3486,3759,3768,4224,4722,5133,5175)
Опасные нерезидентные пермутирующие (pemutating) вирусы. Данные вирусы
не являются, ни шифрованными, ни полиморфными вирусами. Но алгоритм
создания своих вирусных копий очень близок к полиморфным алгоритмам.
Каждая ассемблерная команда вируса занимает не более 3 байт, эти 3
байта в свою очередь составляют некую вирусную компоненту. Если
ассемблерная инструкция занимает менее 3 байт в компоненте, то вирус
"разбавляет" ее NOP-командами. Причем в случайный момент времени эти
NOP'ы могут изменять свое местоположение ("плавать") в компоненте.
Например:
FB STI -> 90 NOP -> 90 NOP
90 NOP FB STI 90 NOP
90 NOP 90 NOP FB STI
Вирусы состоят из 3 блоков: основной блок, блок данных и блок
тождественных вызовов. Также в случайный момент времени вирусы могут
переносить данные трехбайтовые компоненты из основного блока в блок
тождественных вызовов и заменять их на JUMP или CALL в основном блоке.
И наоборот из блока тождественных вызовов в основной блок в
первоначальном виде. Например:
FB STI -> E9 ?? ?? JMP LOC_1
90 NOP
90 NOP
RET_1: RET_1:
E8 ?? ?? CALL LOC_1 B8 00 01 MOV AX,100
.................... ....................
LOC_1: LOC_1:
B8 00 01 MOV AX,100 90 NOP
C3 RET FB STI
?? 90 NOP
?? E9 ?? ?? JMP RET_1
Таким образом, одинаковые инфицированные файлы могут не совпадать
ни в одном байте основного вирусного блока. Различные модификации
вируса могут не заражать следующие файлы: AVP,AVPLITE,AVPVE,BAIT,EICAR,
EMM386, F-PROT, FV386, FV86, MSAV, MVTOOL10, SCAN, TBSCAN,TBAV,TBCHECK,
TBCLEAN, TBDISK, TBDRIVER, TBFILE, TBGENSIG, TBKEY,TBLOG,TBMEM,TBSETUP,
TBSCANX,TBUTIL,VALIDATE,VIRSTOP,VIRUS,VPIC,VSAFE. Ply.4722, 5133, 5175
удаляют файл \NCDTREE.
PM.Wanderer
Неопасный резидентный полиморфный вирус, использующий защищенный
(виртуальный) режим процессоров i80386-Pentium. Для установки своей
резидентной копии в память и переключения в защищенный режим процессора
(Protected Mode) использует документированный интерфейс VCPI (Virtual
Control Programm Interface) драйвера расширенной памяти EMS (EMM386).
Вирус заражает COM и EXE-файлы при их запуске или открытии (f.4b00h,
f.3dh Int 21h). При старте инфицированной программы, вирусный
полиморфный декриптор расшифровывает основное тело вируса и передает
ему управление. Далее основной вирусный код выделяет участок памяти в
верхних адресах, копирует в него собственный код и передает ему
управление. Затем он восстанавливает код инфицированного файла в
программном сегменте (для EXE-файлов также производит настройку адресов
перемещаемых элементов) и приступает к непосредственному внедрению
в память своей резидентной копии. Первым делом вирус пытается выяснить
установлен ли в системе драйвер EMS. Для этого он получает адрес
прерывания INT 67h и проверяет наличие строки EM* в заголовке драйвера.
Далее вирус проверяет не находится ли уже в памяти его резидентная
копия - вызывает функцию AX=0BABAh INT 21h и проверяет ответ AX=0FA00h.
Если драйвер EMS не установлен в системе или вирусная резидентная копия
уже находится в памяти, а также в дальнейшем -при отсутствии интерфейса
VCPI, вирус освобождает ранее выделенную память и отдает управление
программе-вирусоносителю, заканчивая тем самым свою "жизнедеятельность"
в системе. Если же "условия флоры" благоприятствуют, то вирус
"перехватывает" INT 01 и трассирует INT 21h с целью нахождения
определенной последовательности байт, присутствующих в оригинальном
обработчике INT 21h MS - DOS версий 5.00 - 7.00. Если данная
последовательность обнаружена, то вирус запоминает адрес ядра
обработчика INT 21h, обычно расположенного в области HMA. В дальнейшем
вирус будет использовать этот адрес для вызова INT 21h при заражении
файлов. Дальнейшие действия вируса - проверка наличия в системе
интерфейса VCPI и получение 4-ех адресов страниц памяти. Затем вирус
получает адрес интерфейса VCPI, таблицу страниц и адрес глобальной
дескрипторной таблицы GDT (Global Descriptor Table), состоящей из трех
элементов (первый - дескриптор сегмента кода, два другие - используются
драйвером VCPI). Вирус записывает в таблицу страниц ссылку на страницы,
выделенные им драйвером VCPI, получает физический адрес страницы памяти
сегмента, в котором вирус в данный момент находится. Потом получает
регистры глобальной дескрипторной таблицы GDT и дескрипторной таблицы
прерываний IDT (Interrupt Descriptor Table). Далее вирус создает три
собственных дескриптора (кода и данных) и дескриптор сегментов
состояния задачи TSS (Task State Segment) в глобальной дескрипторной
таблице GDT, подготавливает значения для регистров CR3, GDTR,IDTR,LDTR,
TR и адрес CS:EIP точки входа в защищенный режим и производит
переключение процессора в защищенный режим работы с наивысшим уровнем
привилегий - 0. В защищенном режиме вирус корректирует таблицу GDT,
создавая в ней два собственных дескриптора сегментов и производит поиск
дескриптора TSS. После чего вирус устанавливает две аппаратные
контрольные точки по командам (Breakpoints) на первый байт кода
обработчика INT 21h (адрес 0000:0084h) и на первый байт кода в BIOS по
адресу 0FE00:005Bh (линейный адрес 0FE05Bh). Обычно в BIOS по адресу
0FE00:005Bh находится команда перехода (Near Jump) на процедуру
перезапуска компьютера. Затем вирус корректирует дескрипторную таблицу
прерываний таким образом, чтобы установить на прерывания: 1 (особый
случай отладки) и 9 (клавиатура) собственные дескрипторы обработчиков
данных прерываний. После этих приготовлений вирус копирует свой код
в страницу памяти, полученную им еще до входа в защищенный режим и
производит переключение процессора в виртуальный режим работы.
Вирусный обработчик INT 09 производит контроль за наличием и (или)
восстановлением своих двух контрольных аппаратных точек. А также,
данный обработчик отслеживает нажатие на Ctrl-Alt-Del и в этом случае
"сбрасывает" все аппаратные контрольные точки. Вирусный обработчик
особого случая отладки проверяет произошло ли нарушение одной из двух
"вирусных" контрольных точек по адресу команды.Если управление в данный
обработчик попало из точки, находящейся "на процедуре" в BIOS -
перезагрузки компьютера, то вирус сбрасывает все аппаратные контрольные
точки, так же, как и обработчик INT 09 при нажатии на Ctrl-Alt-Del.
Если же нарушение вызвано контрольной точкой оригинального обработчика
INT 21h, то вирус анализирует значение регистра AX (или AH) с целью
определения функции прерывания INT 21h и в зависимости от этого
предпринимает различные действия. Если AX=0BABAh, то вирус считает, что
данный вызов исходит от его "собрата",записывает в AX значение 0FACCh и
возвращает управление оригинальному обработчику INT 21h. Если AX=3506h
(получить адрес прерывания INT 06;обычно такой вызов существует во всех
программах, написанных на языках высокого уровня: C, Pascal,...), то
вирус пытается найти в пространстве линейных адресов 0-90000h некоторую
последовательность байт, очевидно, принадлежащих программе ADinf
(Дмитрию Мостовому - автору ADinf, не удалось найти такую версию ADinf
от 10.00 до 11.01, в которой данная последовательность байт бы
присутствовала). Если данная последовательность будет вирусом найдена,
то он неким образом модифицирует найденный код, так, чтобы управление
не попадало на вызов какой-то межсегментной процедуры. Если AX=4B00h
(запуск программы) или AH=3dh и AL не равно ?Fh (открытие файла только
на чтение), то вирус копирует свой код по адресу 9000:0000h (линейный
адрес 90000h),переключает процессор в виртуальный режим работы и отдает
управление своему коду, находящемуся в пределах первого мегабайта в
сегменте 9000h. Вирус проверяет последние две буквы расширения имени
файла и производит создание своей полиморфной копии и заражение файлов
размером более 4K. Причем вирус внедряет свой код в начало COM или в
середину (сразу же за заголовком) EXE-файлов, запоминая оригинальный
программный код в конце файлов."Реальный рабочий код" вируса составляет
3684 байт, но на практике инфицированные файлы имеют приращение длины
более 3940 байт.При возникновении любой ошибки в процессе заражения или
при выходе из виртуального режима процессора вирус вызывает INT 21h с
AX=4B00h для вызова особого случая исключения и возвращения управления
оригинальному обработчику INT 21h. Вирус в своем теле содержит текст
"WANDERER,(c) P. Demenuk". По этой строке, видимо,можно сделать выводы,
что автором данного "шедевра" следует считать московского человека -
Петра Деменюка. Через три года Петя создал все-таки свой новый
"великолепный продукт, достойный восхищения...".
Из всего вышесказанного следует, что обнаружить резидентную копию
данного вируса, находящегося в нулевом кольце защищенного режима
процессора обычными способами невозможно. Для обнаружения вируса в
памяти необходимо переключаться в защищенный режим с наивысшими
привилегиями и по таблицам GDT или IDT производить его поиск. Но
попытаться обнаружить признаки вируса в системе можно и обычными
способами. Для этого необходимо прочитать линейные адреса двух первых
аппаратных контрольных точек (0 и 1) и сравнить их со значениями,
которые описаны выше. На основании наличия определенных адресов и
делается вывод о возможности нахождения вируса PM.Wanderer в памяти
компьютера.
Теперь немного о результатах тестирования. При заражении нескольких
тысяч файлов-жертв вирус проявил себя, как "жилец" - все зараженные
файлы оказались работоспособными. Здесь надо только сделать поправку -
файлы могут оказаться неработоспособными в том случае, если их стек