Алгоритм работы вирусаДля разработки нашего антивируса изучать машинные коды не понадобится — алгоритм работы вируса HLLP. Light.4859 прост, прозрачен и легко познается в результате несложных экспериментов.

Разработаем две функции: int infected и int cure. Первая из них предназначена для проверки программы, имя которой передается ей в текстовом массиве, на зараженность. Функция должна возвращать ненулевой код, если файл заражен. Вторая будет выполнять удаление вирусного кода из зараженной программы. Однозначно распознать вирус HLLP. Light.4859 нам поможет рассмотренный ранее принцип байтовых сигнатур. Для HLL-вирусов необходимо выбирать длинные сигнатуры, располагающиеся где-то в середине вируса. Дело в том, что компиляторы с языков высокого уровня склонны генерировать очень похожие и даже идентичные фрагменты кода для абсолютно разных программ, а значительную часть программного модуля всегда занимает стандартный код RTL. Соответственно, вероятность ложного срабатывания при использовании коротких сигнатур весьма высока. Для нашего учебного примера вполне достаточной будет сигнатура длиной 16 байтов. Пусть она располагается в вирусе, начиная с позиции 1000h=4096, тогда ее образуют следующие значения: «88h 42h 0E0h 46h 0EBh 27h 00h 0Edh 3Fh 8Bh 0CEh 0E3h 12h 8Dh 7Eh 0E0h». Будем считать, что если в проверяемом файле по адресу 4096 располагаются именно эти байты, то программа заражена вирусом HLLP. Light.4859. Функция infected может выглядеть примерно так:

Вирус из программы удаляется тоже очень просто: 1) из зараженного файла считывается фрагмент, начинающийся с байта 4859 и простирающийся вплоть до конца файла; 2) этот фрагмент записывается в начало файла; 3) если оригинальная программа была короче вируса, то в конце файла образуется «лишний хвост», его рекомендуется отсечь. Вот примерный вариант функции cure:

Еще интересные статьи :