MS-DOS для программиста


Защита программ от трассировки - часть 2


Если попытаться дизассемблировать программу, составленную подобным образом, то из этого ничего не получится.

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

Объем листинга, получающегося при дизассемблировании программы размером в 30 - 40 Кбайт, достигает 1 - 1,5 Мбайт. Поэтому большие размеры установочной программы могут сильно увеличить время обнаружения средств защиты.

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

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

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

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

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

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




Начало  Назад  Вперед