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

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


    Прохождения игр    
Demon's Souls |#13| Storm King
Demon's Souls |#11| Мaneater part 2
Demon's Souls |#10| Мaneater (part 1)
Demon's Souls |#9| Heart of surprises

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


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

Большой справочник по компьютерным вирусам

Предыдущая страница Следующая страница
1 ... 39 40 41 42 43 44 45  46 47 48 49 50 51 52 53

                       100 move "ITE"    ,132
                       110 move "WR"     ,130
                       120 jmp 130
                       130 WRITE

   Посредством автомодификации команда END в ячейке 130 превращается в
команду WRITE. Разумеется, подобная автомодификация может быть многократно
вложенной. Это означает, что автомодифицируемый код в свою очередь
генерирует новый автомодифицируемый код и т.д.
   Таким образом анализ программных кодов не имеет смысла, поскольку
вирус уходит на более глубокие уровни, чем тот, на котором работает
тестирующая программа. Конечно, при необходимости можно осуществить
проверку с помощью интерпретирующей обработки программы, поскольку в этом
случае выполняются все шаги автомодификации. Большим недостатком интерпрети-
рующего метода тестирования является значительное время, необходимое для
того, чтобы выполнить, к примеру 40 Кб машинных кодов с помощью программы
DEBUG в режиме трассировки. Кроме того, может оказаться, что
вирулентная часть программы вообще не выполняется, поскольку она узнает
о тестировании или поскольку не выполняются условия внешней среды: дата,
время и т.д.
   Известным примером является система защиты копирования Prolok. Программа,
защищенная с помощью этой системы, располагается на диске в
зашифрованном виде. Декодирование происходит поблочно после загрузки.
Для того, чтобы устранить нежелательные манипуляции, принимают всевозможные
меры, в том числе изменение вектора прерывания, призванное осложнить по-шаговый
режим.
   Если первое препятствие удается обойти, декодируется следующая
программа и т.д.

                           - 278 -
   Таким образом приходится отказаться от надежды распознать вирус до
его активации. Однако есть определенный шанс, что удастся определить
его идентификатор вируса. Если он состоит из простой
последовательности символов, то можно посредством такой, например,
программы, как TextSrch (поиск текста) просмотреть всю массовую память и
обнаружить в ней аналогичные последовательности. Все программы
содержащие такую же последовательность должны быть тщательно обследованы.
Сложнее, если идентификатор состоит из различных символов, например,
Х является вирусом, если сумма первых 10 байт равна 99. С помощью
обычной программы поиска этот идентификатор можно и не обнаружить. В
таком случае необходимо разработать специальную программу поиска,
которая из каждой программы читает первые 10 байт, образует сумму и, в
случае, если результат равен 99, выводит на экран имя исследуемой программы.
Вирус может быть обнаружен не только по идентификатору, но и по какой-либо
его характеристике. Конечно, разработчик вируса вряд ли отважится зафиксировать
в нем свое авторское право. Однако, если определенная комбинация команд
распространяется как центральная составляющая часть вируса, то она может
помочь обнаружению самого вируса. Подобный подход эффективен лишь для виру-
сов, которые при распространении не изменяют своего облика, т.е. не авто-
модифицируются.
   Несмотря на указанные трудности ниже приводятся листинги двух возможных
решений тестирующих программ, которые в состоянии проверить все файлы в
каталоге на существование признака вируса 909090h в начале файла или
признака 31/30 минут в каталоге. Это позволяет обнаружить вирус,
рассмотренный в [10.], а также "венский" вирус.

       Name   VD1
;************************************************************
;      VD1 проверяет стоит ли в начале файла признак 909090h
;      Версия: 1.0  Copyright by R. Burger 1988
;************************************************************
Code   Segment
       Assume CS:Code
       Assume DS:Nothing
       Assume es:Nothing

       ORG    100h

Start:

                           - 279 -
;*************************************
;      Сообщение о старте
;*************************************
       lea dx,mes_sta
       mov ah,9
       int 21h
;*************************************
;      Считать имя
;*************************************
       lea dx,charcount
       mov bx,dx
       mov ah,10
       int 21h
;*************************************
;      Окончить с нулем
;*************************************
       mov ah,0
       mov al,cs:[bx+1]
       add bx,ax
       add bx,2
       mov byte ptr cs:[bx],0
;*************************************
;      Открыть файл
;*************************************
       mov ah,3dh
       mov al,0
       lea dx,kbdbuf
       int 21h
       jc err_ope
;*************************************
;      Обеспечить манипуляцию
;*************************************
       mov bx,ax

;**************************************
;   Прочитать 3 символа
;**************************************
       mov ah,3fh
       mov cx,3

                           - 280 -
       int 21h
       jc err_red
;***************************************
;   Длина файла достаточна ?
;***************************************
       cmh ax,3
       jb shj1     ;файл слишком мал
;***************************************
;   Существует ли признак ?
;***************************************
       mov si,dx
       cmp word hnu cs:[si],9090h
       jnz ok1
       inc dx
       cmp word hnu cs:[si],9090h
       jnz ok1
;***************************************
;   Признак обнаружен ?
;***************************************
vir:   lea dx,mes_vir
       mov ah,9
       int 21h
       jmp close
;***************************************
;   Файл не читается
;***************************************
err_red:
       lea dx,mes_red
       mov ah,9
       int 21h
       jmp close
;**************************************
;   Файл не открывается
;**************************************
err_ope:
       lea dx,mes_ope
       mov ah,9
       int 21h
       jmp ende

                           - 281 -
;*************************************
;   Файл слишком короток
;*************************************
sho1:  lea dx,mes_sho
       mov ah,9
       int 21h
       jmp close
;*************************************
;   Все нормально
;*************************************
ok1:   lea dx,mes_ok1
       mov ah,9
       int 21h
;*************************************
;   Файл закрыть
;*************************************
close:
       mov ah,3eh
       int 21h
       jnc ende
       mov ah,9
       lea dx,mes_clo
       int 21h
;************************************
;   Конец программы
;************************************
ende:  mov ah,00
       int 21h

mes_ok1 db 10,13,"Признак вируса не обнаружен $"
mes_sho db 10,13,"Для признака вируса файл слишком короток $"
mes_red db 10,13,7,"Файл не может быть считан $"
mes_ope db 10,13,7,"Файл не может быть открыт $"
mes_vir db 10,13,7,"Признак вируса 909090h обнаружен $"
mes_clo db 10,13,7,"Файл не может быть закрыт $"

mes_sna db 10,13,"Программа обнаружения признака вируса 909090h Версия:1.0",
        db 10,13,"Copyright by R.Burger"
        db 10,13,"Имя файла: $"

                           - 282 -
;*************************************
;      Буфер для имени
;*************************************
charcount        db 65,0
kbdbuf db 65 dup (0)
code   ends
end start



       Name   VD2
;*********************************************************
;      VD2 проверяет, имеется ли признак 31/30 минут в DIR
;      Версия: 1.0  Copyright by R. Burger 1988
;*********************************************************
Code   Segment
       Assume CS:Code
       Assume DS:Nothing
       Assume es:Nothing

       ORG 100h

Start:
;*************************************
;      Сообщение о старте
;*************************************
       lea dx,mes_sta
       mov ax,90
       int 21h
;*************************************
;      Считать имя
;*************************************
       lea dx,charcount
       mov bx,dx
       mov ah,10
       int 21h
;*************************************
;      Окончить с нулем
;*************************************

                           - 283 -
       mov ah,0
       mov al,cs:[bx+1]
       add bx,ax
       add bx,2
       mov byte ptr cs:[bx],0
;*************************************
;      Открыть файл
;*************************************
       mov ah,3dh
       mov al,0
       lea dx,kbdbuf
       int 21h
       jc err_ope
;*************************************
;      Обеспечить манипуляцию
;*************************************
       mov bx,ax

;**************************************
;      Считать дату/время
;**************************************
       mov ah,57h
       mov al,0
       int 21h
       jc err_red
;***************************************
;      Дата верна ?
;***************************************
       and cx,1fh
       cmp cx,1fh
       jnz ok1
;***************************************
;      Признак найден ?
;***************************************
vir:   lea dx,mes_vir
       mov ah,9
       int 21h
       jmp close
;**************************************

                           - 284 -
;   Файл не открывается
;**************************************
err_ope:
       lea dx,mes_ope
       mov ah,9
       int 21h
       jmp ende
;***************************************
;   Файл не читается
;***************************************
err_red:
       lea dx,mes_red
       mov ah,9
       int 21h
       jmp close
;*************************************
;   Все нормально
;*************************************
ok1:   lea dx,mes_ok1
       mov ah,9
       int 21h
;*************************************
;   Файл закрыть
;*************************************
close:
       mov ah,3eh
       int 21h
       jnc ende
       mov ah,9
       lea dx,mes_clo
       int 21h
;************************************
;   Конец программы
;************************************
ende:  mov ah,00
       int 21h

mes_ok1 db 10,13,"Признак вируса не обнаружен $"
mes_red db 10,13,7,"Файл не может быть считан $"

                           - 285 -
mes_ope db 10,13,7,"Файл не может быть открыт $"
mes_vir db 10,13,7,"Признак вируса 31/30 min. обнаружен $"
mes_clo db 10,13,7,"Файл не может быть закрыт $"

mes_sna db 10,13,"Программа обнаружения признака вируса 31/30 min. Версия:1.0",
        db 10,13,"Copyright by R.Burger"
        db 10,13,"Имя файла: $"
;*************************************
;      Буфер для имени
;*************************************
charcount        db 65,0
kbdbuf db 65 dup (0)
code   ends
end start


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

15.4     Защищенные вирусы

      Все вышесказанное наводит на мысль поискать защиту от вирусов с помощью
самих же  вирусов. Возможности осуществить это достаточно широки.
 Если признак вируса известен, можно, например, разработать другой вирус,
который внешне имеет такой же признак, однако не предназначен для автомоди-
фикации. Этот вирус мог бы затем быть внедрен в систему. Программы, зараженные
этим  безвредным вирусом распознаются как опасные, но сами заражать они не в
состоянии. Однако, чтобы реализовать подобный подход, необходимо точное знание
структуры вируса. А если признак вируса дешифруется только единожды, инфициро-
Предыдущая страница Следующая страница
1 ... 39 40 41 42 43 44 45  46 47 48 49 50 51 52 53
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (1)

Реклама