Навигация
Обмен ссылками

 

Снижение производительности

автор: Art
Производительность (скорость выполнения) тоже довольно часто страдает, если защищаемая программа злоупотребляет функциями зашиты. Чрезмерное потребление процессорного времени В одной из программ, играющих в Gomoku (по-другому TicTacToe— крестикинолики на большом поле), для защиты от исследования применялся следующий подход. Программа была упакована и зашифрована, и при загрузке в память сама себя расшифровывала и подготавливала к работе. При этом вместо прямых вызовов функций из библиотек Windows, таких как kernel32.dll, user32.dll или gdi32.dll, выполнялись вызовы небольших процедур. Каждая из этих процедур вычисляла контрольную сумму определенного фрагмента программы в памяти и на основании полученного значения вычисляла адрес библиотечной функции, которой необходимо передать управление. Если в программе происходили малейшие изменения, например в отладчике задавалась точка останова путем изменения одного байта, контрольная сумма оказывалась иной и переход осуществлялся по неверному адресу.

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

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

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


 
 
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
 
Авторизация
Топ новостей