You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

Общее описание

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

  1. Проверка при запуске приложения. Происходит для каждого файла программы с включенной настройкой Проверка при запуске при запуске приложения (для нативных программ - до достижения функции main, для программ .NET - до достижении метода Main).
  2. Проверка при запросе защищенного артефакта. Происходит для каждого файла программы, для которого были успешно защищены функции (только для нативных программ), защищены методы (только для программ .NET), обфусцированы потоки управления (только для программ .NET) или зашифрованы строки (только для программ .NET).
  3. Проверка, вызванная настройками мониторинга. Происходит по определенному условию в проекте с включенной настройкой Мониторинг аппаратного ключа или Мониторинг сетевого ключа. В первом случае - сразу при извлечении аппаратного ключа, во втором случае - если подходящая сетевая лицензия не найдена во время проверки по истечении указанного интервала времени (по умолчанию проверки происходят каждые 300 секунд, т.е. 5 минут).

Поведение для файлов приложений и библиотек

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

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

Настройка Блокировка сообщений (задается на проект) позволяет избежать показывания окна сообщения в случае ошибки.

Настройка Проброс исключений позволяет выбросить исключение System.Exception вместо того, чтобы экстренно завершить работу приложения. Эта настройка доступна только для файлов программ .NET. Необходимо понимать, что эта настройка может выбрасывать исключения только для точек второго типа. Точки первого типа вызываются, когда необходимые файлы программы уже загружены в память, но еще не до конца настроены, так что загрузчик программ и динамический линкер не могут обработать ошибки правильно. Точки третьего типа присутствуют только в отдельных потоках, создаваемых библиотекой защиты, поэтому выбрасывать исключения им просто некуда.

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

Алгоритм:

  1. Если настройка Блокировка сообщений отключена (по умолчанию), то, пока подходящая лицензия не найдена, пользователю выводится окно сообщения, в котором предлагается попробовать еще раз либо отменить. Если подходящая лицензия при повторной попытке находится, то приложение продолжает свою работу. В противном случае, т.е. если пользователь выбирает отмену или если указанная настройка включена, происходит переход к следующему шагу.
  2. Если настройка Проброс исключений включена (только для программ .NET) и при этом ошибка происходит либо при запросе защищенного артефакта, либо в файле библиотеки, то выбрасывается соответствующее исключение. В противном случае, происходит переход к следующему шагу.
  3. Если защищается файл библиотеки и при этом ошибка происходит при запуске в файле библиотеки, то происходит возврат из функции, а программа продолжает работать, как если бы библиотеку не удалось загрузить. Для библиотеки, загружаемой как зависимость, это обычно приводит к экстренному завершению работы программы. В противном случае, происходит переход к следующему шагу.
  4. Происходит экстренное завершение работы программы.

Поведение для файлов приложений-сервисов Windows

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

Алгоритм:

  1. Если настройка Блокировка сообщений отключена (по умолчанию), то в Журнал событий Windows в раздел Приложение записывается новое событие от имени защищенного приложения-сервиса. В противном случае, происходит переход к следующему шагу.
  2. Если настройка Проброс исключений включена (только для программ .NET) и при этом ошибка происходит при запросе защищенного артефакта, то выбрасывается соответствующее исключение. В противном случае, происходит переход к следующему шагу.
  3. Если настройка Блокировка сообщений отключена, то, пока подходящая лицензия не будет найдена или служба не будет остановлена, приложение переходит в цикл бесконечного ожидания подходящей лицензии (с фиксированным интервалом проверки 3 секунды). В противном случае, происходит переход к следующему шагу.
  4. Происходит экстренное завершение работы программы.



  • No labels