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

2 Задание к выполнению работы

2.1 Применить вышеуказанные способы защиты на программе, предложенной в Приложении А.

2.2 Найти еще как минимум один трюк защиты программы от отладки или предложить свой. Применить его на программе, предложенной в Приложении А.

3 Содержание отчета

3.1 Цель работы

3.2 Примененные методы защиты

3.3 Текст программы

3.4 Результаты работы, вывод

4 Контрольные вопросы

4.1 Инструментарий исследования программ.

4.2 Основные недостатки отладчиков, как инструментов взлома.

4.3 На чем основываются примененные вами защитные трюки?

4.4 С какой целью производится защита от отладки или дизассемблирования?

Рекомендованная литература

  1. Румянцев П.В. Исследование программ Win32: до дизассемблера и отладчика. – М.: Горячая линия – Телеком, 2004. – 367 с.

  2. Абашев А.А., Жуков И.Ю., Иванов М.А., Метлицкий Ю.В., Тетерин И.И. Ассемблер в задачах защиты информации. – М.: КУДИЦ-ОБРАЗ, 2004. – 544 с.

  3. Крис Касперски, Ева Рокко  Искусство дизассемблирования  [Текст] / Крис Касперски, Ева Рокко. − СПб.: ВHV, 2008. − 896 с.

  4. Александр Фролов, Григорий  Фролов Операционная система MS-DOS Том 1, книга 3, [Текст] /  Александр Фролов, Григорий  Фролов - М.: Диалог-МИФИ, 1992

Приложение а

Листинг А.1 – Программа шифрования/расшифрования текстовых сообщений с помощью алгоритма ГОСТ 28147-89

.386

Sseg segment use16 para stack 'stack'

db 256 dup(?)

Sseg ends

Dseg segment para public 'data'

strng db 'Rocking just to make ya move!$'

key dd 0F3FA012Bh, 023FE412Ah, 013F5062Bh, 0D9FA0C9Bh

dd 033AA1120h, 0B7FA0182h, 0A3FA0D25h, 083F7035Bh

endWithZero dq 0 ;64 нуля

mode db 0 ;флаг режима: зашифровка = 0, расшифровка = 1 (или любое другое число)

last db 0 ;флаг последнего блока

substitute db 4, 1, 3, 11, 0, 10, 5, 2, 7, 12, 6, 14, 8, 9, 15, 13

sblocks db 8 dup(0)

cb dw 0 ;count blocks, номер, по которому ;будет записываться образованный блок в строку

dcb dw 0 ;для decrypt

cryptedstring db 256 dup(0)

decryptedstring db 256 dup(0)

endstr db 13d, 10d, '$' ;символ конца строки

;для ввода строки

Dseg ends

Cseg segment use16 para public 'code'

assume cs:Cseg, ds:Dseg, ss:Sseg

start proc far

;

push ds

sub ax, ax

push ax

;

mov bx, Dseg

mov ds, bx

;

call main

ret

start endp

main proc near

lea dx, ds:[strng] ;вывод строки, ;функция 9 прерывания ДОС 21

mov ah, 09h

int 21h

lea dx, ds:[endstr] ;вывод строки, ;функция 9 прерывания ДОС 21

mov ah, 09h

int 21h

; ret

lea bx, ds:[strng] ;получить адрес ;нашей строки

jmp process

for_decryption:

mov al, 1

mov mode, al ;устанавливаем флаг ;режима расшифровки

lea bx, ds:[cryptedstring]

process:

xor esi, esi ;обнуляем указатель на ;строку

xor edi, edi ;указатель ключа

;

maincycle:

xor cx, cx

lea ax, ds:[key] ;берем адрес следующей, за строкой, переменной

sub ax, bx

cmp ax, 8 ;если на итерации не будет 64 бит, то идем на ветку

;кода, где недостающие биты будут нулями

jl less64

jg next_step

next_step:

mov eax, dword ptr [bx+si] ;занесли ;левую часть

add si, 4 ;следующие 4 байта (32 бита)

mov edx, dword ptr [bx+si] ;занесли ;правую часть

add si, 4 ;смещение для следующего цикла

add bx, 8 ;смещение для следующего цикла

push ax ;сохраняем левую часть в ;стек, чтобы освободить регистр для работы

ror eax, 16

push ax

jmp func

;

less64:

mov al, 1

mov last, al ;флаг, что заменяется ;последний блок

; add bx, si

xor si, si

lea cx, ds:[key]

lesstrace:

mov al, byte ptr [bx]

mov byte ptr endWithZero[si], al

inc si

inc bx

cmp bx, cx

jne lesstrace

xor cx, cx

;функция

func:

rol edi, 2

add edx, key[edi]

ror edi, 2

;подстановка

;извлечение

push di

push bx

lea bx, substitute

mov eax, edx

and dl, 00001111b

mov di, dx

and di, 00FFh

mov dl, substitute[di]

mov sblocks[0], dl

mov dx, ax

shr dl, 4

mov di, dx

and di, 00FFh

mov dl, substitute[di]

mov sblocks[1], dl

mov dx, ax

and dh, 00001111b

xor dl, dl

xchg dl, dh

mov di, dx

mov dh, substitute[di]

mov sblocks[2], dh

mov dx, ax

shr dh, 4

xor dl, dl

xchg dl, dh

mov di, dx

mov dh, substitute[di]

mov sblocks[3], dh

mov edx, eax

shr edx, 16

mov ax, dx

and dl, 00001111b

mov di, dx

and di, 00FFh

mov dl, substitute[di]

mov sblocks[4], dl

mov dx, ax

shr dl, 4

mov di, dx

and di, 00FFh

mov dl, substitute[di]

mov sblocks[5], dl

mov dx, ax

and dh, 00001111b

xor dl, dl

xchg dl, dh

mov di, dx

mov dh, substitute[di]

mov sblocks[6], dh

mov dx, ax

shr dh, 4

xor dl, dl

xchg dl, dh

mov di, dx

mov dh, substitute[di]

mov sblocks[7], dh

pop bx

pop di

;замена, склеивание S-блоков

mov dl, sblocks[1]

rol dl, 4

or dl, sblocks[0]

mov dh, sblocks[3]

rol dh, 4

or dh, sblocks[2]

mov ax, dx

mov dl, sblocks[5]

rol dl, 4

or dl, sblocks[4]

mov dh, sblocks[7]

rol dh, 4

or dh, sblocks[6]

rol edx, 16

mov dx, ax

;rol edx, 16

rol edx, 11

inc cl

mov al, mode ;вспоминаем флаг ;режима

cmp al, 0 ;

jz cryptmode

jmp decryptmode

cryptmode:

cmp ch, 3 ;если идет [0..3] ;последний цикл применения ключа, идти по подключам в обратном ;порядке

je creverse_di

cmp di, 7 ;если дошли до ;последнего подключа, переходим к первому

je creset_di

inc di

;inc ch

jmp func

creset_di:

inc ch

cmp ch, 3

je func

xor di, di

jmp func

creverse_di:

cmp cl, 23

je func

dec di

cmp cl, 32

je out_cycle

jmp func

decryptmode:

cmp ch, 0 ;если первый проход по ;ключу, идем прямо

je ddirect_di

cmp di, 0

je dset_di

dec di

cmp cl, 32 ;завершение 32-х циклов ;преобразования

jnb out_cycle

jmp func

dset_di:

mov di, 7

inc ch

jmp func

ddirect_di:

inc di

cmp di, 7

ja dset_di

cmp cl, 32 ;завершение 32-х циклов ;преобразования

jb func

out_cycle:

pop ax ;восстанавливаем левую ;часть из стека

rol eax, 16

pop ax

xor eax, edx

xchg eax, edx

;сохранение блоков в новой строке

mov cl, mode

cmp cl, 0

jne save_decrypt

push si

mov si, cb

mov dword ptr cryptedstring[si], eax

add si, 4

mov dword ptr cryptedstring[si], edx

add si, 4

mov cb, si

pop si

save_decrypt:

push si

mov si, dcb

mov dword ptr decryptedstring[si], eax

add si, 4

mov dword ptr decryptedstring[si], edx

add si, 4

mov dcb, si

pop si

mov cl, last

cmp cl, 0

je maincycle ;конец шифровки

mov cl, mode ;смена режима после ;шифровки

cmp cl, 0

je for_decryption

mov si, cb

mov byte ptr cryptedstring[si], '$'

mov si, dcb

mov byte ptr decryptedstring[si], '$'

lea dx, ds:[strng] ;вывод строки, ;функция 9 прерывания ДОС 21

mov ah, 09h

int 21h

lea dx, ds:[endstr] ;вывод строки, ;функция 9 прерывания ДОС 21

mov ah, 09h

int 21h

lea dx, ds:[cryptedstring] ;вывод ;строки, функция 9 прерывания ДОС 21

mov ah, 09h

int 21h

lea dx, ds:[endstr] ;вывод строки, ;функция 9 прерывания ДОС 21

mov ah, 09h

int 21h

lea dx, ds:[decryptedstring] ;вывод ;строки, функция 9 прерывания ДОС 21

mov ah, 09h

int 21h

ret

main endp

Cseg ends

end start

Примечание: для сборки программы нужно ввести в командной строке следующее:

tasm <имя_файла>

tlink <имя_файла> /3

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