[an error occurred while processing this directive]
Лет 10 назад существовал вирус RDA.Fighter. Он именно лечил свой код от повреждений. Если интересно, напишите письмо Лозинскому в "Диалогнауку", пусть поделится исходником (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено vinogradov aleksei 18 мая 2006 г. 15:18
В ответ на: Можно придумать самопроверочный код ? отправлено whale 18 мая 2006 г. 14:08

RDA.Fighter.5871, 5969, 7408, 7802, 7868
RDA.Fighter.5871, 5969, 7802, 7868 -это резидентные сложнополиморфные
вирусы, заражающие файлы в формате COM и EXE. RDA.Fighter.7408 -
файлово-загрузочный полиморфный вирус (заражает COM, EXE-файлы и MBR
жесткого диска), скрывающий приращение свой длины в инфицированных
файлах. RDA.Fighter.7802 помимо полиморфных расшифровщиков имеет также
полиморфный механизм случайной расшифровки собственного кода. При
неаккуратной трассировке RDA.Fighter.5969, 7408 могут уничтожить
случайные сектора на жестком диске. Получив управление, основной
расшифрованный код вирусов получает из часов реального времени
случайное 32 разрядное значение, используемое вирусами для расшифровки
еще одного своего участка кода. После всевозможных умножений, делений,
сложений, вычитаний из 32хразрядного случайного числа получается
базовое 16 разрядное случайное число в регистре AX. Это число
умножается на 2 в регистре DI. Этот регистр DI будет указывать точку
входа в таблицы комбинаций вирусных расшифровывающих команд. Существует
2 таблицы по 16 комбинаций расшифровывающих команд, некоторые из
которых повторяются. Эти таблицы представлены ниже. Назовем эти
таблицы: "первая" и "зеркальная".

Первая таблица Зеркальная таблица

XOR [BX], DX NOT [BX] ;в данных таблицах регистр
ROR [BX], CL NEG [BX] ;BX указывает на код, для
............ .......... ;которого производится
NEG [BX] ROR [BX], DX ;расшифровка
NOT [BX] XOR [BX], DX

Далее, на основе установленных бит 16 разрядного числа в регистре AX,
выбирается расшифровывающая команда из первой таблицы, в зависимости от
регистра DI. Например, если нулевой бит установлен в 1, то берется
команда из таблицы (команду в таблице выбирает регистр DI), которая
копируется в тело расшифровщика с помощью антиотладочных команд
манипуляции стеком. В тело расшифровщика также заносится некоторая
первоначальная константа, с помощью которой могут производиться
операции расшифрования, и которая в цикле расшифровки будет динамически
изменяться по определенному закону. Данный закон направлен против
отладчиков. По окончании цикла данной расшифровки значение регистра DI
устанавливается на следующую команду в первой таблице. Потом данная
операция производится для всех установленных битов в 16 разрядном
значении AX. Если какой-либо бит не установлен, то цикл не проводится,
а значение DI передвигается на следующую команду. Если указатель DI
выходит за рамки последней 16 команды в таблице, то его значение
устанавливается на первую команду таблицы. Как только все биты в AX
исчерпаны, вирусы приступают к проверке того, что они всеми этими
хитроумными комбинациями расшифровали. Делают они это также хитроумным
способом. Они подсчитывают контрольную сумму расшифрованного участка
кода в зависимости от участка кода, который не был зашифрован. Подсчет
CRC производится "веером", от границы расшифровки и вверх, и вниз
подсчитывается 48 разрядное значение. При подсчете CRC используются
всевозможные команды пересылки, ADD, XOR,... Причем, вирусы
RDA.Fighter.5969, 7408 использует еще и дополнительную динамическую
корректировку CRC с помощью INT 01. А вирус RDA.Fighter.7408
дополнительно имеет 4 различных варианта подсчета CRC, меняющихся от
копии к копии. Полученное значение CRC хранится в регистрах AX, BP и
DX. Регистр BP складывается с числом, хранящимся в теле вируса,
корректируется относительно нахождения базовой точки вируса в памяти и
значение по смещению BP сравнивается с полученным значением DX. Причем,
в случае правильной расшифровки смещение хранения CRC должно находиться
в ранее зашифрованной области вируса. Если полученное значение CRC не
совпадает со значением DX, то вирусы повторяют описанную выше
комбинацию, только в качестве таблицы расшифровывающих команд теперь
будет использоваться зеркальная таблица. А делается это для того, чтобы
возвратить в исходное состояние ранее расшифрованную по "неправильному"
закону область вирусного кода. После того, как вирус возвратит все в
исходное состояние, попытка "правильной" расшифровки повторяется
сначала, начиная с получения случайного числа в регистре AX, и
использования в качестве базовой - первой таблицы расшифровывающих
команд. Вирусы будут "прокручивать" весь цикл с 16 разрядами регистра
AX, потом тот же вариант повторять с зеркальной таблицей и т.д., до тех
пор, пока, наконец, они не удостоверятся, что все расшифровалось
правильно. Но, так как, вирусы постоянно "следят" за отладчиком,
следует помнить, что в разрывах между попытками расшифровки вирусного
кода можно угодить в "опасный" код, уничтожающий информацию в секторах
жесткого диска, описанный выше. RDA.Fighter.7802, 7868 "разбавляют"
инструкции кода случайной расшифровки командами-"мусором" (такие
команды, которые не влияют на результат расшифровки). А также "первая",
и соответствующая ей "зеркальная" таблица, будут отличаться для каждого
экземпляра вирусов RDA.Fighter.7802, 7868.

Вирусы иногда выводят на экран тексты:

RDA.Fighter.7408:

"Stealth Fighter 2.0 : New Aggression."

RDA.Fighter.7802:

"Stealth Fighter DEMO Part (3.1) : Enemy Unknown"

RDA.Fighter.7868:

"Stealth Fighter,DEMO Part (3.2) : Next mutation 06/09/95"

RDA.Fighter.7408 заражает еще и Master Boot Record (главный загрузочный
сектор) жесткого диска.

Резидентные части вирусов контролируют функции запуска программ (
AX=4B00h) и открытия файлов (AH=3Dh). RDA.Fighter.5969 также
контролирует функцию переименования файлов (AH=56h). При вызове данных
функций вирусы пытаются заразить файлы, длина которых не меньше, чем
4096 байт. RDA.Fighter.7408, 7802, 7868 дополнительно контролируют
функции поиска файлов (AH=11h,12h,4Eh,4Fh) и скрывают приращение своей
длины у инфицированных файлов. В конце каждого зараженного файла
RDA.Fighter.7408, 7802, 7868 хранят 2 байта размера вирусного кода,
внедренного в данный файл. RDA.Fighter.7408, 7802, 7868 "перехватывают"
также INT 08 и несколько замедляют работу компьютера. Резидентная
активная копия вируса RDA.Fighter.7408 при вызове функции AX=0EEEEh
удаляет свой код из MBR жесткого диска. RDA.Fighter.7408, 7802, 7868
при вызове данной функции также и обезвреживает себя в памяти.
Резидентные копии вирусов используют очень мощный помехозащищенный
алгоритм восстановления собственного кода, позволяющий не допустить
отладку кодов вирусов с использованием отладочных точек останова.
Мало того, вирусы "ради шутки" пытаются ввести в заблуждение, внедряя
сразу в свои обработчики INT 21h инструкцию выхода из прерывания- IRET!
Но оригинальные байты обработчика вирусы сами же и исправляют с помощью
помехозащищенного алгоритма восстановления. Начальный код вирусных
обработчиков INT 21h выглядит следующим образом (ниже представлен
обработчик INT 21h вируса RDA.Fighter.5969):

PUSH AX
INC AH
CMP AX,4C00 ;запуск программы?
JE CHECK_FILES
CMP AH, 3E ;открытие файла?
JE CHECK_FILES
CMP AH, 57 ;переименование файла?
JE CHECK_FILES
DESTROY_HANDLER:
POP AX
JMP DWORD PTR CS:[ADR_INT21] ;выход в оригинальный INT 21h
CHECK_FILES:
CALL CHECK&RESTORE ;проверка и восстановление
MOV CS:DESTROY_HANDLER, 90CF ;вместо POP AX установить IRET?!
MOV CS:DESTROY_HANDLER+2, AX ;и регистр AX (4C00 или 3E??)
CALL CHECK&RESTORE ;проверка и восстановление
CALL CHECK_FILE_NAME ;а здесь уже никакой команды IRET
;не будет!
....................

Вирусы не заражают следующие файлы *ES?.* (AIDSTEST.EXE), *WE?.*
(WEB.EXE), *AN?.* (COMMAND.COM). RDA.Fighter.7408 при старте программы
CHKDSK "выключает" свой механизм скрытия истинной длины зараженных
файлов. После завершения ее работы - снова "включает". В процессе
инфицирования вирусы устанавливают свой обработчик критических ошибок
INT 24h, дисковый обработчик INT 13h, если в системе нет дискового кэша
и устанавливают обработчики INT 01 (пошаговое выполнение команд), INT
03 (точка останова) и INT 2Ah (Microsoft network) на свои обработчики,
содержащие единственную инструкцию - IRET. При заражении файла, вирусы
случайным образом выбирают (таким же, как и при определении регистра AX
при попытках расшифровки своего кода) смещение и размер области,
которая будет зашифрована в инфицируемом файле. Данная шифровка
предназначена, видимо, для невозможности восстановления файлов
специальными антивирусными утилитами (ADinfExt, TbClean,..).

Вирусы содержат следующие тексты:

RDA.Fighter.5871 -

RandomDecodingAlgoritm 1.0
"Stealth Fighter PART I" devoted MSU!

RDA.Fighter.5969 -

RandomDecodingAlgoritm 1.1
"Stealth Fighter PART I (1.1) for ALL."

RDA.Fighter.7408 -

"RandomDecodingAlgoritm 2.0"
"PhantomPolymorphicMultiLayerEngine 1.2"

RDA.Fighter.7802 -

"RandomDecodingAlgoritmEngine 1.0"
"PhantomPolymorphicMultiLayerEngine 1.2"

RDA.Fighter.7868 -

"RandomDecodingAlgorithmEngine 1.1"
"PhantomPolymorphicMultiLayerEngine 1.2"

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru