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

Ассемблер в задачах защиты ФоР;;* 4и

mov in

stosb cmp

loopnz jnz

mov stosb sub mov

Overflow:

Ids mov

NextByteOut: mov

dx, AO al, dx

al, ODh ; NextlnByte Overflow;

; Адрес регистра входных данных ; Чтение байта ; Запись в InBuf Проверить возврат

; каретки и повторить Если возврата каретки нет, ; переполнение InBuf

al, OAh ; Добавление

; перевода строки di. Count ; Запись фактической

Count, di ; длины введенной строки

si. Mess ; DS: SI -> Mess

cx, MessLen ; Число повторений операции вывода ; байта

dx, А2

Aapi- регистра состояния

;=== Проверка готовности к выводу - CheckRdyOut:

test

j] dx ; Чтейие регистра состояния

al, RdyOut ; Проверка разряда готовности

CheckRdyOut ; Повторять до обнаружения IBF = 1

lodsb mov out loop

dx, Al dx, al NextByteOut

Чтение байта в AL

Адрес регистра выходных данных

Вывод байта

Повторять MessLen раз

1.2.12. Пристыковочный механизм защиты программ 1.2.12.1. Электронные ключи. Методы защиты программ

Проблема защиты информации во всем мире доставляет производителям профамм-ного обеспечения массу хлопот. Одним из наиболее эффективных средств защиты ПО являются,электронные ключи (ЭК).

ЭК - это небольшое устройство, либо подключаемое к параллельному или последовательному порту компьютера, либо находящееся внутри компьютера. В первом случае ключ, как правило, не влияет на работу порта и "прозрачен" для подсоединенных через него УВВ. Во втором случае предполагается, что ключ реализован в виде платы расширения, вставляемой в стандартные внутренние разъемы компьютера. Обычно ключ

Глава 1 Основы программирования на Ассемблере IBM PC 73

обладает встроенными источниками питания, полностью пассивен и при отключении от компьютера сохраняет записанную в себя информацию. ЭК разрабатываются с использованием заказных БИС, однокристальных микроконтроллеров (МК) или микропроцессоров (МП). Для пользователей портативных компьютеров производятся электронные ключи в стандарте PCMCIA размером с обычную кредитную карточку.

Устойчивость к эмуляции является одним из главных критериев качества защиты. Об-ьектом эмуляции при этом может быть как протокол взаимодействия с ЭК, так и сам ключ. Методы защиты от эмуляции:

неопределенные ("зашумленные") протоколы взаимодействия с ЭК;

построение протоколов взаимодействия с ключом по принципу "случайный запрос - ответ";

использование в составе ЭК непредсказуемых генераторов псевдослучайных кодов (ГПК), формирующих длинные статистически безопасные псевдослучайные последовательности (ПСП);

использование ЭК в качестве внешнего вычислителя и определение внутри ключа значений односторонних функций (хеш-функций), которые влияют на ход выполнения профаммы;

использование при реализации односторонних функций и функций обратной связи ГПК криптофафических преобразований.

Важной составной частью системы защиты с использованием ЭК является ее про-фаммный компонент. Как правило, он включает в себя зашитый "конверт" (EnvelopCj и библиотечные функции API обращения к ключу.

Защита с использованием пристыковочного механизма (Envelope) заключается в следующем. Тело защищаемой профаммы шифруется, и в него добавляется специальны» пристыковочный модуль (ПМ), который получает управление в момент запуска профаммы. ПМ проверяет наличие ЭК, из которого затем считывается некая информация на основе анализа и проверки которой принимается решение о зафузке и расшифровке тела защищенной профаммы. После завершения этих процедур ПМ выфужается из па мяти, а управление передается основной профамме. Функциями ПМ являются также защита от статического и динамического исследования и модификации алгоритма рабо ты защищенной профаммь! и самой системы защиты.

Функции API, которые должны быть распределены по всему телу профаммы:

периодическая проверка наличия ключа;

периодическая проверка целостности кода защищаемой профаммы; периодическая проверка времени выполнения отдельных фрагментов профаммы; взаимодействие с :зк по принципу "запрос - ответ";

считывание из ключа псевдослучайных кодов для дальнейшего их использовани в качестве операндов, кодов операций, адресов переходов и т. п.;



считывание из ключа ПСП для зашифрования, расшифрования или хеширования отдельных фрагментов кода программы;

обращение к памяти (в том числе и энергонезависимой) ключа для выполнения операций записи/чтения.

Методы защиты от исследования:

шифрование (желательно по частям) исполняемого кода;

модификация исполняемого кода (ИК) - самогенерирующиеся команды, хеширование адресов перехода, определение стека в области ИК, генерация ИК из заготовок, упорядоченных по каким-либо критериям, использование принципа взаимозаменяемости команд и др.;

использование альтернативных "скрытых" команд (например, переходы с помощью команд RET или IRET);

включение "пустышек", ненужность которых неочевидна;

изменение начала защищаемой программы, чтобы стандартный дизассемблер не мог ее правильно дизассемблировать;

включение переходов по динамически изменяющимся адресам;

периодический подсчет контрольной суммы области памяти, занимаемой профаммой

в процессе выполнения;

проверка содержимого таблицы векторов прерываний и первых команд обработчиков прерываний;

переустановка используемых векторов прерываний для защиты от программ-: перехватчиков;

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

При/меры

=== Скрытый JMP. =================================================

push

ах, ах

OFFSET Nextlnstr

Nextlnstr:

Скрытый CALL. == mov push jmp

ax, OFFSET RetAddr ax

MyProc

IyProc:

Скрытый RET. == pop jmp

,-== Модификация адреса перехода. ================================

.==== 53H - КОП PUSH ВХ, 43Н - КОП INC ВХ, 53HSEFh = 43Н. =========

and BYTE PTR cs: MylncBX, OFEh

bx [bx]

MylncBX: push bx mov

My Jmp: jmp

bx, bx

WORD PTR cs: MyJmp [bx], NewAddr Nextlnstr

1.2.12.2. Программа N 2. Программа с пристыковочным модулем

Ниже приведен простейший пример профаммы с ПМ (рис. 1.2.10), задачей которого яв ляегся проверка легальности запуска защищенной профаммы и, в зависимости от результато! проверки, либо передача управления на защищенную профамму, либо реакция на действи нарушителя конвенции. Предполагается, что ЭК представляет собой УВВ, подключаемо к системной магисфали компьютера, обмен информацией осуществляется по линиям DB7 .. DBO шины данных. В простейшем случае ЭК - это генератор ПСП. Режим работы ЭК (сброс инициализация и считывание ПСП) определяется адресом, по которому происходит обращу ние к ключу, и циклом шины (запись WR или чтение RD). Соответствие между адресом, цш лом шины и режимом работы ЭК офажено в таблице 1.2.2.

Таблица 1.2.2. Логика работы Э

Адрес порта В В

Функции электронного ключа

в режиме записи в ЭК

в режиме чтения ЭК

BaseAddr

Программный сброс

Чтение ПСП

BaseAddr + l

Инициализация

Чтение состояния:

разряд 0 - RdyIn;

разряд 1 - RdyOut

RetAddr:

При запуске защищенной профаммы управление передается на начало ПМ, которь Последовательно выполняет следующие действия (рис. 1.2.11):

сброс ключа;



2) проверка присутствия ЭК - запись в ключ проверяющей последовательности байтов DataCPres длиной DCPSize и сравнение реакпли ЭК с кодом присутствия WPres; при положительном результате сравнения осуществляется переход к п. 3, в противном случае происходит аварийное заверщение с предварительной очисткой памяти, занимаемой образом программы с ПМ;

3) инициализация ЭК - запись в ключ инициализирующей последовательности Datalni длиной DISize;

4) расшифрование защищенного фрагмента профаммы - выполнение Size операций гам-мирования над одноименными байтами защищенного фрагмента и псевдослучайной последовательности с вьгхода ЭК;

5) формирование и проверка контрольной суммы (КС) защищенного фрагмента; при положительном результате сравнения осуществляется переход к п. 6, в противном случае происходит аварийное заверщение с предварительной очисткой памяти, занимаемой образом профаммы с ПМ;

6) передача управления на защищенный фрагмент (ЗФ) и после завершения его работы очистка памяти.

В качестве метода шифрования/расшифрования защищенного фрагмента предлагается использовать наложение (с помощью операции поразрядного XOR) на входную информационную последовательность ПСП с выхода ЭК, называемое гаммированием, обеспечивающее максимальное быстродействие при минимальных профаммных затратах. Криптостойкость гаммирования определяется качеством входящего в состав ключа ГПК - источника гаммирующей последовательности и эффективностью мероприятий по защите от исследования тракта обмена информацией между ЭК и компьютером.

==== Незащищенная версия программы с ПМ.

. MODEL tiny . CODE

ORG 10 Oh Next

DB Последовательность, реакция на которую

DB сравнивается с кодом присутствия Presence

DCPSize = $ - DataCPres

Инициализирующая последовательность Datalni

Begin: jmp DataCPres

Datalni DB DISize = $ -ByteRdyIn = Olh ByteRdyOut = 02h Presence DW ?

RightSumDW ?

Next: xor

bx, bx

В BL будет формироваться КС, в ВН - код возврата

; Сброс ЭК

mov out

; Проверка наличия ЭК eld mov mov raov

CheckRdyOutl:

test jz

lodsb

loop

; Инициализация ЭК eld mov mov mov

dx, dx.

BaseAddr al

DCPSize BaseAddr+1 OFFSET DataCPres

cx, dx, si,

al, dx

al, ByteRdyOut CheckRdyOutl

dx, al* CheckRdyOutl dx, BaseAddr al, dx ah, al al, dx

ax,Presence ClearMem

; Проверка готовности ЭК

; к записи

Вывод байта DataCPres

Чтение

реакции

на DataCPres

CheckRdyOut2:

cx, dx, si.

DISize BaseAddr+1 OFFSET Datalni

test jz

lodsb out loop

al, dx

al, ByteRdyOut CheckRdyOut2

dx, al

CheckRdyOut2

; Проверка готовности ЭК

; к записи

Вывод байта Datalni

Чтение ПСП, расшифрование ЗФ и формирование контрольной суммы

NextByteCrypto: CheckRdyin:

loop

mov mov

mov in

test

NextByteCrypto сшр

cx, MemSize

di, OFFSET Start

dx, BaseAddr+1

al, dx

al, ByteRdyIn CheckiRdyIn

al, dV

[di Ы,

; Проверка ; готовности ЭК ; к чтению Чтение очередного байта ПСП

1, al ; Шифрование очередного байта ЗФ [di] ; Формирование

; промежуточного значения КС

Ь1, RightSum

КС расшифрованного



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