Защита от трассировки программы по заданному событию

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

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

В качестве защиты от трассировки по заданному событию (прерыванию) можно выделить три основных способа:

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

Например, для защиты от трассировки по дисковым прерываниям для ОС MS Windows при чтении метки, некопируемой с носителя, можно использовать следующие приемы:

  • • работа с ключевой меткой путем прямого программирования контроллера носителя (активная защита второго типа);
  • • определение одного из неиспользуемых прерываний для работы с носителем (активная защита первого типа);
  • • прямой вызов соответствующих функций в ПЗУ (BIOS) после восстановления их физического адреса различными способами (активная защита первого типа);
  • • определение факта переопределения адреса прерывания на другую программу и невыполнение в этом случае дисковых операций (пассивная защита).

При операциях с жестким диском, как правило, используется прерывание int 13h. Для предотвращения трассировки программы по заданному прерыванию (в данном случае прерыванию int 13h) можно также использовать указанные выше способы, а именно переопределение исходного прерывания в BIOS на неиспользуемый вектор прерывания и/или прямой вызов функций BIOS.

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

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

  • [1] В этом случае для отладки подключается внешняя ОС через com-порт RS 232 илипрограмма выполняется в виртуальной среде, доступ к оперативной памяти которойосуществляется из хостовой системы.
 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ   ОРИГИНАЛ     След >