Анимация
JavaScript
|
Главная Библионтека Ассемблер в задачах защиты ФоР;;* 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. Логика работы Э
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 |