Методы защиты программ от исследования.Для защиты программ от исследования необходимо применять методы защиты от исследования файла с ее исполняемым кодом, хранящемся на внешнем носителе, а также методы защиты исполняемого кода, загружаемого в оперативную память для выполнения этой программы.
В первом случае защита может быть основана на шифровании секретной части программы, а во втором – на блокировании доступа к исполняемому коду программы в оперативной памяти со стороны отладчиков. Кроме того, перед завершением работы защищаемой программы должен обнуляться весь ее код в оперативной памяти. Это предотвратит возможность несанкционированного копирования из оперативной памяти дешифрованного исполняемого кода после выполнения защищаемой программы.
Таким образом, защищаемая от исследования программа должна включать следующие компоненты:
– инициализатор;
– зашифрованную секретную часть;
– деструктор (деициниализатор).
Инициализатор должен обеспечивать выполнение следующих функций:
|
|
– сохранение параметров операционной среды функционирования (векторов прерываний, содержимого регистров процессора и т.д.);
– запрет всех внутренних и внешних прерываний, обработка которых не может быть запротоколирована в защищаемой программе;
– загрузка в оперативную память и дешифрование кода секретной части программы;
– передача управления секретной части программы.
Секретная часть программы предназначена для выполнения основных
целевых функций программы и защищается шифрованием для предупреждения внесения в нее программной закладки.
Деструктор после выполнения секретной части программы должен выполнить следующие действия:
– обнуление секретного кода программы в оперативной памяти;
– восстановление параметров операционной системы (векторов прерываний, содержимого регистров процессора и т.д.), которые были установлены до запрета неконтролируемых прерываний;
– выполнение операций, которые невозможно было выполнить при запрете неконтролируемых прерываний;
– освобождение всех незадействованных ресурсов компьютера и завершение работы программы.
Для большей надежности инициализатор может быть частично зашифрован и по мере выполнения может дешифровать сам себя. Дешифроваться по мере выполнения может и секретная часть программы. Такое дешифрование называется динамическим дешифрованием исполняемого кода. В этом случае очередные участки программ перед непосредственным исполнением расшифровываются, а после исполнения сразу уничтожаются.
Для повышения эффективности защиты программ от исследования необходимо внесение в программу дополнительных функций безопасности, направленных на защиту от трассировки. К таким функциям можно отнести:
|
|
– периодический подсчет контрольной суммы области оперативной
памяти, занимаемой защищаемым исходным кодом; сравнение
текущей контрольной суммы с предварительно сформированной
эталонной и принятие необходимых мер в случае несовпадения;
– проверку количества занимаемой защищаемой программой оперативной памяти; сравнение с объемом, к которому программа адаптирована, и принятие необходимых мер в случае несоответствия;
– контроль времени выполнения отдельных частей программы;
– блокировку клавиатуры на время отработки особо секретных алгоритмов.
Для защиты программ от исследования с помощью дизассемблеров можно использовать и такой способ, как усложнение структуры самой программы с целью запутывания злоумышленника, который дизассемблирует эту программу. Например, можно использовать разные сегменты адреса для обращения к одной и той же области памяти. В этом случае злоумышленнику будет трудно догадаться, что на самом деле программа работает с одной и той же областью памяти.
Основным (неопределяемым) понятием математической логики является понятие простого высказывания..
Определение. Под высказыванием обычно понимают всякое повествовательное предложение, утверждающее что-либо о чем- либо, и при этом мы можем сказать, истинно оно или ложно в данных условиях места и времени. Логическими значениями высказываний являются истина и. ложь.
Приведем примеры высказываний.
1) Новгород стоит на Волхове.
2) Париж - столица Англии.
3) Карась не рыба.
4) Число 6 делится на 2 и на 3.
5) Если юноша окончил среднюю школу, то он получает аттестат зрелости.
Высказывания 1), 4), 5) истинны. а высказывания 2) и 3) ложны.
Очевидно, предложение Да здравствуют наши спортсмены!,» не является высказыванием.
Высказывание, представляющее собой одно утверждение, принято называть простым или элементарным. Примерами элементарных высказываний могут служить высказывания 1) и 2).
Высказывания, которые получаются из элементарных с помощью грамматических связок НЕ, И, ИЛИ.,.ЕСЛИ.... ТО..... ТОГДА И ТОЛЬКО ТОГДА.. принято называть сложными или составными. Так, высказывание 3) получается из простого высказывания Карась - рыба. с помощью
отрицания НЕ, высказывание 4) образовано из элементарных высказываний Число 6 делится на 2., 4 Число 6 делится на 3, соединенных союзом И.. Высказывание 5) получается из простых высказываний Юноша окончил среднюю школу,.Юноша получает аттестат зрелости. с помощью грамматической связки.ЕСЛИ..., ТО..... Сложные высказывания могут быть получены из простых высказываний с помощью грамматических связок.ИЛИ.,.ТОГДА И ТОЛЬКО ТОГДА..
В алгебре логики все высказывания рассматриваются только С точки зрения их логического значения, а от их житейского содержания отвлекаются. Считается, что каждое высказывание либо истинно. либо ложно и ни одно высказывание не может быть одновременно истинным и ложным.
В дальнейшем будем элементарные высказывания обозначать малыми буквами латинского алфавита: х. у, z,.... а, b. с,...; истинное значение высказывания цифрой 1, а ложное значение цифрой 0.
Если высказывание а истинно. то будем писать а = 1, а если а ложно, то а = 0.