Общее описание
В зависимости от настроек проекта и защищаемых программ, предупреждение и уведомление пользователя об ошибках может происходить по-разному. Некоторые из этих настроек также влияют на логику работы приложения после обнаружения ошибки. Этот вопрос оказывается довольно сложным, поэтому для объяснения потребуется ввести следующее понятие.
Точка проверка лицензии – это точка следования незащищенной программы, при достижении которой происходит обращение к библиотеке защиты.
Существует 3 типа точек проверки лицензии:
- Проверка при запуске приложения.
Выполняется для каждого файла программы, у которого при защите включена настройка Проверка при запуске. Для нативных программ выполняется до достижения функцииmain, для программ .NET – до достижении методаMain. - Проверка при запросе защищенного артефакта.
Выполняется для каждого файла программы, у которого были успешно защищены:- функции (только для нативных программ);
- методы (только для программ .NET);
- обфусцированы потоки управления (только для программ .NET);
- зашифрованы строки (только для программ .NET).
Проверка, вызванная настройками мониторинга.
Выполняется для проектов, у которых включена настройка Мониторинг аппаратного ключа или Мониторинг сетевого ключа. Проверка осуществляется при определенных условиях: для настройки Мониторинг аппаратного ключа – сразу при извлечении аппаратного ключа из компьютера, для настройки Мониторинг сетевого ключа – если во время проверки по истечении указанного интервала времени подходящая сетевая лицензия не была найдена (по умолчанию проверки выполняются каждые 5 минут).
Экстренное завершение работы защищенной программы реализовано с применением:
TerminateProcess()в Windows,raise()с параметромSIGKILLв Linux (начиная с версии 4.6, до этого - с помощьюabort()).
Общий алгоритм обработки ошибок
В случае возникновения ошибки при проверки лицензии, в том числе при отсутствии подходящей лицензии, выполняются следующие действия:
- Уведомление пользователя об ошибке посредством диалогового окна или вывода сообщения в стандартный поток ошибок.
- Обработка ошибки. Пользователю предлагается повторить попытку поиска лицензии (например, подключив к компьютеру аппаратный ключ с подходящей лицензией или активировав лицензию) или отменить поиск лицензии. Отмена поиска лицензии приводит к экстренному завершению работы программы или к возможному выбрасыванию соответствующего исключения (только для программ .NET).
При защите файла библиотеки учитывается, что библиотека может потребоваться как при запуске приложения (как зависимость), так и во время работы его работы (как плагин). В последнем случае важно, чтобы приложение продолжало работу, даже если проверка лицензии в защищенном файле библиотеки приведет к ошибке. В программах .NET исключения являются частью языка и среды выполнения, поэтому библиотека защиты способна свободно работать с ними. Однако нативные программы компилируются под конкретную машинную архитектуру, а библиотека защиты не может заранее знать об используемом языке и развернутой среде выполнения. Как правило, в файлах защищенной программы отсутствует обработка исключений, генерируемых средой выполнения операционной системы, что приводит к падению приложения. По этой причине следует отключать настройку Проверка при запуске для нативных программ.
Настройка Блокировка сообщений (задается на проект) позволяет избежать вывода сообщения об ошибки.
Настройка Проброс исключений позволяет выбросить исключение System.Exception вместо экстренного завершения работы приложения.
Проброс исключений доступен только для файлов программ .NET. Эта настройка может выбрасывать исключения только для точек проверки лицензии второго типа.
Точки первого типа вызываются, когда необходимые файлы программы уже загружены в память, но не до конца настроены, при этом загрузчик программ и динамический линкер не могут обработать ошибки правильно.
Точки третьего типа присутствуют только в отдельных потоках, создаваемых библиотекой защиты, поэтому им некуда выбрасывать исключения.
Алгоритм обработки ошибок зависит от:
- настроек, указанных в проекте защиты;
- разновидности защищаемых файлов программ;
- достигнутого типа точки проверки лицензии.
и имеет следующий вид:
- Проверка отключения настройки Блокировка сообщений.
Если эта настройка отключена, до тех пор пока подходящая лицензия не найдена, пользователю выводится сообщение, в котором предлагается повторить попытку поиска лицензии или отменить ее поиск.
Если при повторной попытке подходящая лицензия была найдена, то приложение продолжает свою работу.
Если пользователь выбрал отмену поиска или настройка Блокировка сообщений включена, переход к п.2. - Проверка включения настройки Проброс исключений (только для программ .NET).
Если эта настройка включена и при этом ошибка возникает либо при запросе защищенного артефакта, либо в файле библиотеки, то выбрасывается соответствующее исключение.
В противном случае, переход к п.3. - Если выполняется защита файла библиотеки и при этом ошибка возникает при запуске в файле библиотеки, то происходит возврат из функции, а программа продолжает работать, словно библиотеку не удалось загрузить. Для библиотеки, загружаемой как зависимость, это обычно приводит к экстренному завершению работы программы.
В противном случае, переход к п.4. - Экстренное завершение работы программы.
Алгоритм обработки ошибок для файлов приложений-сервисов Windows
При защите файла приложения-службы Windows необходимо соблюдать следующие условия:
- падение службы недопустимо;
- разрешено ожидание подходящего ключа;
- нежелателен вывод окон с сообщениями.
Поэтому защита файла приложения-службы выполняется по следующему алгоритму:
- Проверка отключения настройки Блокировка сообщений.
Если эта настройка отключена, то в раздел Приложение Журнала событий Windows записывается новое событие от имени защищенного приложения-сервиса.
В противном случае, переход к п.2. - Проверка включения настройки Проброс исключений (только для программ .NET).
Если эта настройка включена и при этом ошибка возникает при запросе защищенного артефакта, то выбрасывается соответствующее исключение.
В противном случае, переход к п.3. - Проверка отключения настройки Блокировка сообщений.
Если эта настройка отключена, то, до тех пор пока подходящая лицензия не будет найдена или служба не будет остановлена, приложение переходит в цикл бесконечного ожидания подходящей лицензии с фиксированным интервалом проверки 3 секунды.
В противном случае, переход к п.4. - Экстренное завершение работы программы.