Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metod_vkaz_KR_4.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
699.9 Кб
Скачать

2. Вихідні дані та варіанти завдань.

Варіанти завдань вибираються з таблиці 1, де В і А, відповідно, номери останньої та передостанньої цифр залікової книжки.

Таблиця 1

А

Метод захисту програм від копіювання

В

Метод захисту програми від динамічних та статичних методів дослідження

0

Неформатовані доріжки і сектори

0

Перевірка вільної пам’яті та її доступних областей

1

Зміна кількості доріжок і секторів

1

Дозвіл та заборона переривань

2

Зміна нумерації доріжок і секторів

2

Контроль програми в пам'яті

3

Неформатовані доріжки і зміна кількості секторів

3

Контроль часу виконання

4

Неформатовані доріжки і зміна нумерації секторів

4

Перевизначення та відновлення векторів переривань

5

Неформатовані сектори і зміна кількості доріжок

5

Блокування консолі

6

Неформатовані сектори і зміна нумерації доріжок

6

Неявний перехід

7

Зміна кількості доріжок і зміна нумерації секторів

7

Динамічний перехід

8

Зміна кількості сектори і зміна нумерації доріжок

8

Перевизначення кодів через стек

9

Зміна розміру секторів

9

Самогенерація виконуючих кодів

3. Приклади виконання курсової роботи та фрагменти програм що демонструють окремі методи захисту.

В прикладі 1 подається програма що перешкоджає визначенню дизасемблером команди, на яку здійснюється перехід. У даному випадку застосовуються стекові операції і шифрування з допомогою логічної операції XOR для приховання переходу до команди за певною адресою.

Приклад 1

code segment

assume

cs:code, ds:code

org 100h

begin:

а=100h+len_b

;

Визначаємо адреси команди

а=а xor 5427h

;

Виконуємо логічну операцію "XOR"

mov ax, а

;

Заносимо в регістр ах значення а

xor ax, 5427h

;

Виконуємо логічну операцію "XOR"

push ax

;

Заносимо значення регістра ах в стек

ret

;

Переходимо на певну команду

db 09ah

;

Відволікаючий код

len_b equ $-begin

_1:

mov ah, 4ch

;

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

int 21h

code ends

end begin

Після дизасемблювання за допомогою пакету Sourcer v6.09 бінарного модуля попередньої програми, отримуємо наступне значення коду.

88DC:0100 B8 552E

mov

ax, offset loc_1

88DC:0100 B8 2E 55

db

0B8h, 2Eh, 55h

88DC:0103 35 5427

xor

ax, 5427h

88DC:0106 50

push

ax

88DC:0107 C3

retn

88DC:0108 9A 21CD4CB4

call

far ptr sub_1

88DC:0108 9A

db

9Ah

88DC:0109 4CB4 21CD

dw

4CB4h, 21CDh

end

В прикладі 2 наведена програма, що перешкоджає дизасемблеру визначити команду, на яку здійснюється перехід. У прикладі застосовується динамічна зміна адреси команди безумовного переходу.

Приклад 2

code segment

assume

cs:code, ds:code

org 100h

begin:

mov ax, 3456h

;

Заносимо в регістр АХ будь-яке значення

org $-2

;

Зменшуємо значення адресного лічильника, перевизначивши таким чином адресу наступної команди безумовного переходу

;

;

jmp _

;

Переходимо на мітку "_2"

jmp $-2

;

;

Переходимо на 2 байти назад, тобто на команду "jmp _2"

db 09Ah

;

Відволікаючий код

_2:

mov h, 4ch

;

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

int 21h

code ends

end begin

Після дизасемблювання за допомогою пакету Sourcer v6.09 бінарного модуля попередньої програми, отримуємо наступне значення коду.

8DF2:0100 B8 03EB

mov

ax, 3EBh

8DF2:0103 EB FC

;*

jmp

short loc_1

8DF2:0103 EB FC

db

0EBh, 0FCh

8DF2:0105 9A 21CD4CB4

;*

call

far ptr sub_1

8DF2:0105 9A

db

9Ah

8DF2:0106 4CB4 21CD

dw

4CB4h, 21CDh

У прикладі 3 наведена програма здійснює за допомогою стека і логічної операції XOR "розшифрування вперед", що перешкоджає дизасемблеру розпізнавати подальші команди. Вказаний спосіб може також використовуватися для захисту від трасування.

Приклад 3

code segment

assume

cs:code, ds:code

org 100h

begin:

cli

;

Забороняємо переривання

mov sss, sp

;

Запам'ятовуємо значення регістра SP

lea sp, sme

;

Заносимо нове значення

pop ax

;

Заносимо в регістр АХ код, який розташований за адресою SS:SP

;

mov bh, 4 xor 67h

;

Розшифровуємо його

xor bh, 67h

sub ah, bh

;

Вміщуємо розшифрований код

push ax

;

на місце, зашифрованого

mov sp, sss

;

Відновлюємо попереднє

;

значення SP

jmp $+3

;

Обходимо відволікаючий код

db 09ah

;

Відволікаючий код

mov ah, 4ch xor 23h

;

"Прихована" функція DOS - 4Сh

xor ah, 23h

;

sme label word

int 25h

;

Зашифрована команда

sss dw?

code ends

end begin

Після дизасемблювання за допомогою пакету Sourcer v6.09 бінарного модуля попередньої програми, отримуємо наступне значення коду.

88DC:0100 FA

cli

88DC:0101 89 26 011F

mov

ds:data_1e, sp

88DC:0105 BC 011D

mov

sp, 11Dh

88DC:0108 58

pop

ax

88DC:0109 B7 63

mov

bh, 63h

88DC:010B 80 F7 67

xor

bh, 67h

88DC:010E 2A E7

sub

ah, bh

88DC:0110 50

push

ax

88DC:0111 8B 26 011F

mov

sp, ds:data_1e

88DC:0115 EB 01

jmp

short loc_1

88DC:0115 EB 01

db

0EBh, 01h

88DC:0117 9A F4806FB4

call

far ptr sub_1

88DC:0117 9A

db

9Ah

88DC:0118 6FB4 F480

dw

6FB4h, 0F480h

88DC:011C 23 CD

and

cx, bp

88DC:011E 25 0000

and

ax, 0

end

У прикладі 4 демонструється ряд способів захисту програм від налагоджувачів.

Приклад 4

code segment

assume cs:code, ds:code

org 100h

begin:

mov ax, 351ch

;

Перехоплюємо переривання 1Ch

int 21h

push es bx

push cs

pop es

mov ax, 251ch lea dx, rez

int 21h

mov cx, cs

;

Перевіряємо на наявність вільної

cmp cx, 1583h

;

пам'яті

jbe ok2

ok1:

jmp short ok1

db 09ah

ok2:

mov byte ptr ds:prv, 1

;

Відновлюємо переривання 1Ch

pop dx

int 1ch

pop ds

int 1ch

mov ax, 251ch

mov byte ptr cs:prv, 2

int 1ch

int 21h

rtt label byte

jmp short $+5+2bh-25h

;

Якщо програма виконується без

db 09ch

;

Налагоджувача, то на екран буде

push cs

;

виведено повідомлення "OK"

pop ds

lea dx, ki1

mov ah, 9

int 21h

mov ah, 4ch

int 21h

rez:

;

Далі слідує обробник

pushf

;

переривання 1Ch.

push ax cx si

;

Здійснюємо підрахунок часу

xor ax, ax

;

виконання програми і

lea si, begin

;

;

;

контрольної суми для

виключення модифікування і можливості роботи під налагоджувачем

cvb:

add al, cs:[si]

.

inc si

;

На основі цієї інформації

cmp si, offset ok1

;

;

за адресою "rtt" змінюється команда "jmp"

jne cvb

pop si cx

cmp byte ptr cs:prv, 1

je rez2

cmp byte ptr cs:prv, 2

je rez4

rez3:

pop ax

popf

iret

rez2:

inc cs:[sum]

jmp short rez3

rez4:

push bx

mov bl, cs:sum

add bl, al

sub bl, 025h

sub byte ptr cs:[rtt+1], bl

pop bx

jmp short rez3

"ki1 db OK!$"

prv db 0

sum db 0

code ends

end begin

У прикладі 5 демонструється комплексний захист від спільного використання статичних і динамічних методів дослідження.

Приклад 5

code segment

assume cs:code, ds:code

org 100h

begin:

jmp begin2

db 09ah

;

Відволікаючий код

;;;

Далі до мітки "END_1" слідує фрагмент програми, що здійснює перетворення коду "вперед". Даний фрагмент містить алгоритми, перешкоджаючі його аналізу, і викликається за перериванням 1Ch.

rez:

pushf

cli

mov cs:_1,9090h xor 2376h

jmp $+4

;

Обходимо відволікаючий код

db 9ah

;

Відволікаючий код

db 9ah

xor cs:_1,2376h

inc cs:prov

mov cs:zax, ax

mov cs:zds, ax

xor ax, ax

mov ds, ax

jmp $+3

db 9ah

;

;

Обходимо відволікаючий код

Відволікаючий код

mov ax, cs:adr2

mov ds:[1ch*4], ax

mov ax, cs:adr1

mov ds:[1ch*4+2], ax

mov ax, cs:zax

mov ds, cs:zds

jmp $+4

db 9ah

;

;

Обходимо відволікаючий код

Відволікаючий код

db 9ah

popf

db 0eah

;

adr2 dw 0

adr1 dw 0

db 9ah

;

Відволікаючий код

;

END_1

;;;

Нижче приведено фрагмент програми, що вимагає перетворення "вперед". Він містить алгоритми, перешкоджаючий його аналізу і установку переривання 1Ch на програму перетворення.

begin2:

xor p1,7896h

p1 label word

mov ax, 351ch xor 4376h

xor ax, 4376h

jmp $+3

;

Обходимо відволікаючий код

db 9ah

;

Відволікаючий код

int 21h

jmp $+4

;

Обходимо відволікаючий код

db 9ah

;

Відволікаючий код

db 9ah

mov adr1, es

mov adr2, bx

mov ax, 251ch xor 4524h

xor ax, 4524h

jmp $+3

;

Обходимо відволікаючий код

db 9ah

;

Відволікаючий код

lea dx, rez

int 21h

povt:

cmp prov, 1

je rav

jmp povt

db 9ah

;

Відволікаючий код

rav:

mov ah, 40h xor 34h

xor ah, 34h

_1 label word

jmp _2

mov ah, 4ch shl 1

shr ah, 1

jmp _2

db 9ah

;

Відволікаючий код

_2:

int 21h

prov db 0

zax dw?

zds dw?

code ends

end begin.

Після дизасемблювання за допомогою пакету Sourcer v6.09 бінарного модуля попередньої програми, отримуємо наступне значення коду.

= 0070

data_1e

equ

70h

= 0072

data_2e

equ

72h

= 481E

data_3e

equ

481Eh

= 6038

data_4e

equ

6038h

= 923E

data_5e

equ

923Eh

= 0193

data_8e

equ

193h

= 0195

data_9e

equ

195h

88DC:0100 EB 4B

jmp

short real_start

88DC:0100 EB 4B

db

0EBh, 4Bh

88DC:0102 9A C72EFA9C

call

far ptr sub_7

88DC:0102 9A

db

9Ah

88DC:0103 FA9C C72E

dw

0FA9Ch, 0C72Eh

88DC:0107 06

push

es

88DC:0108 87 01

xchg

[bx+di], ax

88DC:010A E6 B3

out

0B3h, al

88DC:010C EB 02

jmp

short loc_1

88DC:010C EB 02

db

0EBh, 02h

88DC:010E 9A 36812E9A

call

far ptr sub_5

88DC:010E 9A

db

9Ah

88DC:010F 2E9A 3681

dw

2E9Ah, 3681h

88DC:0113 87 01

xchg

[bx+di], ax

88DC:0115 76 23

jbe

short loc_3

88DC:0115 76 23

db

76h, 23h

88DC:0117 2E: FE 06 0192

inc

byte ptr cs:[192h]

88DC:011C 2E: A3 0193

mov

cs:data_8e, ax

88DC:0120 2E: A3 0195

mov

cs:data_9e, ax

88DC:0124 33 C0

xor

ax, ax

88DC:0126 8E D8

mov

ds, ax

88DC:0128 EB 01

jmp

short loc_2

88DC:0128 EB 01

db

0EBh, 01h

88DC:012A 9A 0148A12E

call

far ptr sub_3

88DC:012A 9A

db

9Ah

88DC:012B A12E 0148

dw

0A12Eh, 148h

88DC:012F A3 0070

mov

ds:data_1e, ax

88DC:0132 2E: A1 014A

mov

ax, word ptr cs:[14]

88DC:0136 A3 0072

mov

ds:data_2e, ax

88DC:0139 2E: A1 0193

mov

ax, cs:data_8e

88DC:013D 2E: 8E 1E 0195

mov

ds, cs:data_9e

88DC:0142 EB 02

jmp

short loc_4

88DC:0142 EB 02

db

0EBh, 02h

88DC:0144 9A 00EA9D9A

call

far ptr sub_2

88DC:0144 9A

db

9Ah

88DC:0145 9D9A 00EA

dw

9D9Ah, 0EAh

88DC:0149 00 00

add

[bx+si], al

88DC:014B 00 9A 3681

add

[bp+si+3681h], bl

88DC:014F 53

push

bx

88DC:0150 01 96 B878

add

[bp-4788h], dx

88DC:0154 6A 76

push

76h

88DC:0156 35 4376

xor

ax, 4376h

88DC:0159 EB 01

jmp

short loc_5

88DC:0159 EB 01

db

0EBh, 01h

88DC:015B 9A 02EB21CD

call

far ptr sub_4

88DC:015B 9A

db

9Ah

88DC:015C 21CD 02EB

dw

21CDh, 2EBh

88DC:0160 9A 4A068C9A

call

far ptr sub_6

88DC:0160 9A

db

9Ah

88DC:0161 8C9A 4A06

dw

8C9Ah, 4A06h

88DC:0165 01 89 481E

add

ds:data_3e[bx+di],

88DC:0169 01 B8 6038

add

ds:data_4e[bx+si],

88DC:016D 35 4524

xor

ax, 4524h

88DC:0170 EB 01

jmp

short loc_6

88DC:0170 EB 01

db

0EBh, 01h

88DC:0172 9A CD0103BA

call

far ptr sub_8

88DC:0172 9A

db

9Ah

88DC:0173 03BA CD01

dw

3BAh, 0CD01h

88DC:0177 21 80 923E

and

ds:data_5e[bx+si],

88DC:017B 01 01

add

[bx+di], ax

88DC:017D 74 03

jz

short loc_8

88DC:017D 74 03

db

74h, 03h

88DC:017F EB F7

jmp

short loc_7

88DC:017F EB F7

db

0EBh, 0F7h

88DC:0181 9A F48074B4

call

far ptr sub_9

88DC:0181 9A

db

9Ah

88DC:0182 74B4 F480

dw

74B4h, 0F480h

88DC:0186 34 EB

xor

al, 0EBh

88DC:0188 07

pop

es

88DC:0189 B4 98

mov

ah, 98h

88DC:018B D0 EC

shr

ah, 1

88DC:018D EB 01

jmp

short loc_9

88DC:018D EB 01

db

0EBh, 01h

88DC: 018F 9A 000021CD

call

far ptr sub_1

88DC:018F 9A

db

9Ah

88DC:0190 21CD 0000

dw

21CDh, 0

end

.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]