Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Билеты 16-19.docx
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
366 Кб
Скачать
☆

Вопрос 2

Под исследованием программы понимают процесс получения ее алгоритма.

Все средства исследования ПО можно разбить на два класса: статические и динамические. Вторые изучают программу, интерпретируя ее в реальной или виртуальной вычислительной среде. Они могут строить этот алгоритм только на основании конкретной трассы (trace) программы, полученной при определенных входных данных. Поэтому задача получения полного алгоритма программы в этом случае эквивалентна построению исчерпывающего набора тестов для подтверждения правильности программы, что практически невозможно, и вообще при динамическом исследовании можно говорить только о построении некоторой части алгоритма.

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

Для защиты программ от исследования необходимо применять методы защиты исполняемого кода, загружаемого в оперативную память для выполнения этой программы.

В этом случае защита может быть основана блокировании доступа к исполняемому коду программы в оперативной памяти со стороны отладчиков. Кроме того, перед завершением работы защищаемой программы должен обнуляться весь ее код в оперативной памяти. Это предотвратит возможность несанкционированного копирования из оперативной памяти дешифрованного исполняемого кода после выполнения защищаемой программы.

Для повышения эффективности защиты программ от исследования необходимо внесение в программу дополнительных функций безопасности, направленных на защиту от трассировки. К таким функциям можно отнести:

• периодический подсчет контрольной суммы области оперативной памяти, занимаемой защищаемым исходным кодом; сравнение текущей контрольной суммы с предварительно сформированной эталонной и принятие необходимых мер в случае несовпадения;

• проверку количества занимаемой защищаемой программой оперативной памяти; сравнение с объемом, к которому программа адаптирована, и принятие необходимых мер в случае несоответствия;

• контроль времени выполнения отдельных частей программы;

• блокировку клавиатуры на время отработки особо секретных алгоритмов.

Можно предложить две группы средств защиты от трассировки. В первую группу входят средства блокировки работы самих отладчиков, делающие невозможным трассировку программы. Вторая группа средств направлена на определение факта работы программы под управлением отладчика.

К первой группе средств относится:

• блокировка специальных "отладочных" прерываний процессора;

• блокировка прерываний от клавиатуры;

• измерение времени выполнения контрольных участков программы;

• использование прерывания таймера.

Напомним, что прерывание INT 1 и INT 3 (соответственно, прерывание для пошаговой работы и прерывание по однобайтовой команде INT) интенсивно используются отладчиками. Первое прерывание позволяет отладчику получать управление после выполнения каждой команды трассируемой программы. С помощью второго прерывания отладчик может устанавливать точки останова, заменяя байты программы на команду однобайтового прерывания.

Защищенная от трассировки программа должна подготовить свои собственные обработчики для этих прерываний и "незаметно" для человека, занимающегося трассировкой, записать их адреса в таблицу векторов прерываний.

Эти обработчики прерываний могут не делать ничего, то есть состоять из одной команды IRET, или выполнять какие-либо действия, фиксирующие факт работы программы под контролем отладчика.

В ходе трассировки программы (при ее пошаговом выполнении) необходимо нажимать на клавиши - для перехода к очередной команде. Это можно использовать для блокировки отладчика.

Запретив прерывания командой CLI и переназначив прерывание от клавиатуры на себя, программа установки может выполнять какие-либо действия, не требующие работы оператора с клавиатурой. Обработчик клавиатурного прерывания защищенной от трассировки программы должен фиксировать прерывания, например, установкой флага.

Если программа работает не под контролем отладчика, прерывания во время этого участка программы невозможны (они запрещены командой CLI).

Если же используется режим пошагового выполнения программы под управлением отладчика, отладчик разрешает клавиатурные прерывания, невзирая на то, что была выдана команда CLI. Наш обработчик клавиатурного прерывания в этом случае зафиксирует работу в режиме трассировки.

Аналогично можно воспользоваться прерыванием таймера.

Защищенная программа устанавливает свой обработчик для прерывания таймера, который устанавливает флаг в случае появления прерывания от таймера. В подходящий момент времени она запрещает прерывания и выполняет какую-либо работу, периодически проверяя флаг.

Если программа работает в пошаговом режиме, команда запрета прерываний CLI не работает, и флаг будет взведен, сигнализируя работу под контролем отладчика.