Читаем Создаем вирус и антивирус полностью

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

Разумеется, неправильно было бы использовать для детектирования файла такие ненадежные признаки, как, например, 60 секунд во времени создания файла. Во-первых, это может быть признаком случайного изменения (например, при упаковке/распаковке некоторыми архиваторами). Во-вторых, слишком многие вирусы используют для самоопознания одинаковые признаки. Наконец, эти признаки могут принадлежать совершенно здоровой программе (как в истории с антивирусом antitime и сигнатурой MsDos).

Вообще говоря, сигнатура – это множество N пар , i=1.N, где Pi – расположение i-го байта, Bi – значение i-го байта. Но на практике часто используют непрерывные сигнатуры, для которых важно определить только место расположения первого байта и длину сигнатуры.

Какой должна быть длина сигнатуры? Вообще говоря, чем больше – тем лучше, в идеале в сигнатуру должна входить вся неизменяемая часть вируса, что гарантирует однозначность распознавания. Но это невероятно увеличит объем антивируса (а известные программы лечат тысячи вирусов) и замедлит процесс распознавания. Таким образом, целесообразным следует считать количество от нескольких байт до нескольких десятков байт – не больше. Остановимся на цифре 6.

Итак, в качестве сигнатуры вируса SVC-1740 выберем 6 байт вируса, которые размещены начиная с 1724-го байта, если считать от конца зараженного файла (с 16-го байта вируса). Вполне возможно, что эти 6 байт совпадают для всех вирусов семейства SVC. Но вероятность того, что машина сразу заражена несколькими вирусами одного семейства, крайне мала. А вот выбор в качестве сигнатуры шести первых байт вируса был бы точно ошибочным, потому что, как уже говорилось выше, подобное начало характерно для очень большого числа вирусов.

Итак, сигнатура 0B4h 83h 0CDh 21h 5Eh 56h длиной 6 байт расположена начиная с 1724-го байта, если считать от конца зараженной программы.

Теперь рассмотрим вопрос лечения программы. Фрагменты зараженной программы, которые необходимо восстановить для излечения, определены ранее.

Напомним, что вирус SVC-1740, заражая программу, дописывается в ее конец, сохраняя в своем теле первые 24 байта оригинальной программы. Поэтому для излечения как ЕХЕ, так и СОМ-программ, вполне достаточно переписать сохраненные 24 байта в начало программы без учета того, что большая их часть не была изменена, и отсечь 1740 вирусных байт в конце зараженной программы.

Но с методической точки зрения, следуя стратегии заражения, необходимо в СОМ-программе восстановить только первые три байта, а в ЕХЕ-програмее – 6 ранее измененных слов заголовка.

Поэтому для функции cure() предусмотрен именно второй алгоритм лечения, хотя он более медленный и сложный.

Итак, для СОМ-файла считываем 3 байта, с 80-го по 78-й, если считать от конца файла, и переписываем их в начало файла, для ЕХЕ-файла – перемещаем 6 слов согласно таблице 6.1. и отсекаем последние 1740 байт.

Таблица 6.1. Таблица перемещений для EXE-файла

/********************************************

Демонстрационный антивирус−фаг

для вируса SVC−1740.

********************************************/

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define F_FOUND 0

#define PATH_LEN 128

#define DRIVE_LEN 4

#define BLANK_LEN 80

#define BAD 1

#define GOOD 0

#define DBG

char

/* Строка имени текущего подкаталога */

path[PATH_LEN],

/* Строка имени начального места расположения */

old_path[PATH_LEN],

/* Строка имени требуемого устройства */

drive[DRIVE_LEN],

/* Пустая строка */

blank[BLANK_LEN];

int

/* Количество отсканированных каталогов */

n_dir,

/* Количество исследованных файлов */

n_fil,

/* Количество больных и исцеленных файлов */

n_ill;

int

/* Длина имени файла */

l,

/* Временный индекс */

i;

#include ”antilib.c”

/* Рекурсивная процедура обхода дерева каталогов */

walk()

{

int found_d, found_f;

struct find_t buf;

/* Поиск каталогов */

found_d=_dos_findfirst(”*.*”,_A_SUBDIR ,&buf);

while (found_d == F_FOUND)

{

if ((buf.name[0] != ”.”) && (buf.attrib & _A_SUBDIR ))

{

chdir(buf.name);

walk();

chdir(”..”);

}

found_d=_dos_findnext( &buf );

}

/* К этому моменту не отсканированных нижележащих каталогов

больше не осталось – сканируем файлы */

n_dir++;

getcwd( path, PATH_LEN );

/* Поиск файлов */

found_f=_dos_findfirst(”*.*”,_A_NORMAL ,&buf);

while (found_f == F_FOUND)

{

l=strlen( buf.name );

if (((buf.name[l−3]==”C”)&&

(buf.name[l−2]==”O”)&&

(buf.name[l−1]==”M”))||

((buf.name[l−3]==”E”)&&

(buf.name[l−2]==”X”)&&

(buf.name[l−1]==”E”)))

{

n_fil++;

printf(”%c%s”,13,blank);

printf(”%c%s\\%s ”,13,path,buf.name);

/* Нашли новый файл – надо проверить, инфицирован ли он.

Если заражен, то лечим */

if (infected(buf.name)==BAD) cure(buf.name);

}

found_f=_dos_findnext( &buf );

}

}

Перейти на страницу:

Похожие книги

Тайны и секреты компьютера
Тайны и секреты компьютера

Эта книга предназначена для тех, кто самостоятельно осваивает мир информационных технологий. Программирование в среде Microsoft Office, устройство сетей Internet и Fidonet, работа системы электронной почты, структура системного реестра Windows и файловой системы, строение жидкокристаллических дисплеев и проблема наличия различных кодировок русского языка, — про все это рассказывается в ней. Многообразие тем и легкий стиль изложения сделают ее вашим спутником на долгое время, и вы всегда сможете найти в ней нужную именно в данный момент информацию.Если Вы интересуетесь компьютерными технологиями, желали бы расширить свои знания и умения в этой области, то она Вам наверняка понравится.http://comptain.nm.ru

Антон Александрович Орлов , Антон Орлов

Фантастика / Фэнтези / Прочая компьютерная литература / Книги по IT / Зарубежная компьютерная, околокомпьютерная литература
Справочник по параметрам BIOS
Справочник по параметрам BIOS

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

Адриан Вонг

Зарубежная компьютерная, околокомпьютерная литература