Чтение онлайн

на главную - закладки

Жанры

Создаем вирус и антивирус
Шрифт:

Вообще говоря, сигнатура – это множество N пар <Pi,Bi>, 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 <stdio.h>

#include <dos.h>

#include <dir.h>

#include <str.h>

#include <process.h>

#include <errno.h>

#include <bios.h>

#include <io.h>

#include <fcntl.h>

#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 );

}

}

main( int argc, char *argv[] )

{

puts(”ANTISVC – демонстрационный антивирус−фаг”);

if (argc < 2)

{ puts(”Введите имя диска в качестве параметра”); exit(2); }

if (((toupper(argv[1][0]))>”Z”)||((toupper(argv[1][0]))<”A”))

{ puts(”Неверно задано имя диска”); exit(3); }

drive[0]=argv[1][0]; drive[1]=”:”; drive[3]=”\0’;

for (i=0;i<BLANK_LEN;i++) blank[i]=” ”;blank[BLANK_LEN−1]=”\0”;

Поделиться:
Популярные книги

Аргумент барона Бронина 2

Ковальчук Олег Валентинович
2. Аргумент барона Бронина
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Аргумент барона Бронина 2

Академия

Кондакова Анна
2. Клан Волка
Фантастика:
боевая фантастика
5.40
рейтинг книги
Академия

Пышка и Герцог

Ордина Ирина
Фантастика:
юмористическое фэнтези
историческое фэнтези
фэнтези
5.00
рейтинг книги
Пышка и Герцог

Эволюционер из трущоб. Том 4

Панарин Антон
4. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб. Том 4

Сама себе хозяйка

Красовская Марианна
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Сама себе хозяйка

Кодекс Крови. Книга II

Борзых М.
2. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга II

Имя нам Легион. Том 3

Дорничев Дмитрий
3. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 3

Барин-Шабарин 2

Гуров Валерий Александрович
2. Барин-Шабарин
Фантастика:
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Барин-Шабарин 2

Испытание Огня

Гаврилова Анна Сергеевна
3. Академия Стихий
Фантастика:
фэнтези
9.43
рейтинг книги
Испытание Огня

Отвергнутая невеста генерала драконов

Лунёва Мария
5. Генералы драконов
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Отвергнутая невеста генерала драконов

Эволюционер из трущоб. Том 9

Панарин Антон
9. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб. Том 9

Правильный попаданец

Дашко Дмитрий Николаевич
1. Мент
Фантастика:
альтернативная история
5.75
рейтинг книги
Правильный попаданец

Черный дембель. Часть 1

Федин Андрей Анатольевич
1. Черный дембель
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Черный дембель. Часть 1

Матабар III

Клеванский Кирилл Сергеевич
3. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар III