Введение в архитектуру компьютеров


Способы увеличения эффективности и надежности защиты от копирования - часть 3


Среди них:

· использование нестандартной структуры программы;

· скрытые переходы, скрытые вызовы программ и прерываний;

·   переходы и вызовы подпрограмм по динамически изменяемым адресам.

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

Второй способ предполагает использование нестандартной реализации команд типа JMP, CALL, INT, RET, IRET.

Третий способ подразумевает модификацию байтов адреса перехода или вызова подпрограммы.

Не менее сложная задача для "взломщика" – преодолеть недопущение исследования программ стандартными отладчиками.

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

Бороться с дизассемблерами и отладчиками можно подсчетом и проверкой контрольных сумм определенных участков программы, что позволяет определить, не установлены ли в теле проверяемого участка точки останова. Для установки точки останова отладчик заменяет код байта программы по указанному адресу (предварительно сохранив его) на код вызова прерывания, чем, конечно же, изменяет контрольную сумму программы. Этот факт и использует метод подсчета и проверки контрольных сумм.

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


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



Книжный магазин