Для того чтобы приступить к защите программного обеспечения на платформе 1С:Предприятие необходимо:
Установка пароля на защищаемые модули.
Выберите пункт меню: Текст – Установить пароль.
Это необходимо для компиляции исходного текста в опкод.
Можно установить любой пароль, только его необходимо запомнить.
В процессе установки защиты исходный текст модуля из результирующей конфигурации будет удалён. |
Сохранение библиотеки защиты.
Это необходимо для функционирования системы защиты.
Образ библиотеки рекомендуется сохранить в макете типа "Двоичные данные".
Установить систему защиты можно только при использовании операционной системы Windows. |
Создание функции GetUSBKeyComponentLocationV3.
Функция GetUSBKeyComponentLocationV3 не нужна, если не требуется процедура проверки ключа. |
Эта функция должна возвращать полное имя макета, в котором хранится образ библиотеки защиты, или полное имя файла библиотеки защиты.
Также можно использовать в макете zip архив с файлами библиотек и файлом манифеста.
Функция GetUSBKeyComponentLocationV3 вызывается однократно перед загрузкой библиотеки защиты.
// GetUSBKeyComponentLocationV3 // //Возвращаемое значение: // Строка, расположение компоненты защиты для текущего используемого типа платформы // Функция GetUSBKeyComponentLocationV3() МетаОбработки = Метаданные.Обработки.МатрицаРолейПользователей; Макет = ?(Макет = Неопределено, МетаОбработки.Макеты.Найти("КомпонентаЗащитыV3_Hasp_zip"), Макет); Макет = ?(Макет = Неопределено, МетаОбработки.Макеты.Найти("КомпонентаЗащитыV3_Guardant_zip"), Макет); Если Макет = Неопределено тогда СистемнаяИнформация = Новый СистемнаяИнформация; Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 тогда Постфикс = "Win32"; ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 тогда Постфикс = "Win64"; ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 тогда Постфикс = "Linux32"; ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64 тогда Постфикс = "Linux64"; КонецЕсли; Макет = ?(Макет = Неопределено, МетаОбработки.Макеты.Найти("КомпонентаЗащитыV3_Hasp_" + Постфикс), Макет); Макет = ?(Макет = Неопределено, МетаОбработки.Макеты.Найти("КомпонентаЗащитыV3_Guardant_" + Постфикс), Макет); КонецЕсли; Если Макет = Неопределено тогда ВызватьИсключение("Макет с образом компоненты защиты не найден"); КонецЕсли; Возврат Макет.ПолноеИмя(); КонецФункции |
При необходимости в защищаемом модуле может быть размещена функция GetUSBKeyObjectNative(ModuleID). При интеграции проверки ключа в защищаемый модуль содержимое этой функции будет замещено таким образом, что функция будет возвращать используемый объект компонента. Данную функциональность можно использовать, например, для получения информации о статусе лицензии.
Если значение параметра ModuleID неопределенно, то проверка лицензии не будет выполняться, а будет инициализирован объект компонента. Этот объект может использоваться для вызова методов GetInfo и Update.
// GetUSBKeyObjectNative // //Параметры // ModuleID - номер логического модуля продукта // //Возвращаемое значение: // Объект компоненты // // Функция GetUSBKeyObjectNative(ModuleID) Перем USBKeyObject, USBKeyComponentFileName, USBKeyComponentName; USBKeyComponentName = "AddIn.HASP_DEMOMA.USBKeyLibV3"; Попытка USBKeyObject = Новый(USBKeyComponentName, Неопределено); Исключение USBKeyComponentFileName = GetUSBKeyComponentLocationV3(); Если НЕ AttachAddIn(USBKeyComponentFileName, "HASP_DEMOMA", AddInType.Native) тогда ВызватьИсключение "Ошибка подключения компоненты " + USBKeyComponentFileName; КонецЕсли; USBKeyObject = Новый(USBKeyComponentName, Неопределено); КонецПопытки; Если ModuleID <> Неопределено тогда Scope = GetUSBKeyScope(ModuleID); Если Не USBKeyObject.Login(ModuleID, Scope) тогда ВызватьИсключение(USBKeyObject.GetLastError()); КонецЕсли; КонецЕсли; Возврат USBKeyObject; КонецФункции //GetUSBKeyObjectNative |
// ПолучитьИнформациюОЛицензии // //Параметры // ModuleID - номер логического модуля продукта // //Возвращаемое значение: // Информация о лицензии // // Функция возвращает информацию о лицензии в формате XML. // //Примечание: // Метод "GetSessionInfo" компоненты защиты доступен только при использовании ключей HASP // Функция ПолучитьИнформациюОЛицензии(ModuleID) Экспорт Объект = GetUSBKeyObjectNative(ModuleID); Возврат Объект.GetSessionInfo("<haspformat format=""sessioninfo""/>"); КонецФункции |
При необходимости в защищаемом модуле может быть размещена функция GetUSBKeyScope(ModuleID). При наличии эта функция будет вызвана в процессе инициализации объекта лицензирования. Если параметры поиска не требуются, то она должна вернуть параметры поиска ключа в виде строки "Неопределенно".
// GetUSBKeyScope // //Параметры // ModuleID - номер логического модуля продукта // //Возвращаемое значение: // Строка фильтра параметров ключей // // Функция определяет параметры поиска ключей // //Примечание: // Метод "GetInfo" компоненты защиты доступен только при использовании ключей HASP // // Функция GetUSBKeyScope(ModuleID) Перем Результат; KeyID = Константы.KeyID.Получить(); Если ЗначениеЗаполнено(KeyID) тогда Результат = "<?xml version=""1.0"" encoding=""UTF-8"" ?> |<haspscope> | <hasp id=""" + KeyID + """ /> |</haspscope>"; КонецЕсли; Возврат Результат; КонецФункции |
В поле Имя файла библиотеки защиты введите полное имя файла используемой библиотеки защиты.
|
Нажмите кнопку Анализ файла конфигурации. После завершения процедуры будет построено дерево модулей, которые можно защитить. Также отобразится информация о режиме хранения сессий ключа для различных типов модулей. Если для конкретного модуля хранения сессии будет выбран отличный от режима тип модуля, то эта информация отобразится в столбце Хранение сессий ключа.
Информацию о режиме хранения сессии нельзя редактировать. |
Варианты хранения сессий:
- в переменной: лицензия хранится в переменной модуля, на каждый модуль создаётся отдельное хранилище сессий ключа. Этот режим используется для защиты отчетов и обработок.
- комбинированное хранение: используется единое в рамках сеанса хранилище сессий. В зависимости от текущего режима работы модуля автоматически выбирается хранение сессий ключа, либо в переменной модуля, либо с использованием модуля с признаком "Повторное использование возвращаемых значений", установленным в значении "На время сеанса". Также у модуля, который используется для хранения сессий должны быть установлены следующие свойства: Сервер – Да, Клиент – Нет, ВнешнееСоединение – Нет.
Укажите функции, при вызове которых должен проверяться ключ защиты. Для выбранных функций необходимо указать номер (ID) компонента. Разработчик защищаемой конфигурации сам определяет набор и номера компонентов, при заведении продуктов в системе лицензирования Guardant Station.
Для установки защиты на конфигурацию в пакетном режиме предназначен скрипт DoProtect3.js, который расположен в каталоге шаблонов, куда была установлена поставка "Защита конфигураций 3".
При запуске скрипта без параметров, или если не все обязательные параметры указаны, выводится окно с описанием всех параметров и со значениями уже установленных параметров.
При указании строки соединения базы "Защита конфигураций 3" недопустимо указание пробелов и кавычек внутри строки соединения. При наличии пробелов в параметре, параметр должен быть заключен в кавычки. |
Параметры должны быть указаны без пробела между ключом и значением параметра, например:
DoProtect3.js -LF"R:\Файл лога.txt" -CSSrvr=srv:3541;Ref=CodeGuard83; -SRR:\1Cv8.cf ...
Для возможности использования защищенной конфигурации у пользователя должен быть в наличии соответствующий ключ защиты и установлен Guardant Control Center на машине с ключом. Система защиты конфигураций не имеет каких-либо дополнительных настроек.
При отсутствии лицензии на выполнение защищенной функции при выполнении такой функции будет сгенерировано исключение с описанием ошибки.
В случае если проверка ключа не интегрировалась, поведение алгоритмов защищаемой конфигурации не меняется.
Если выполнение модуля происходит в контексте сервера программы 1С: Предприятие, то должны использоваться только сетевые лицензии в режиме распределения (конкуренции) по подключениям – в противном случае учет лицензий будет не корректен.
Если выполнение модуля происходит в контексте толстого клиента, можно использовать режим распределения (конкуренции) по рабочим станциям.
В общем случае учет лицензий осуществляется для каждого экземпляра модуля (т.е. для каждого сеанса – отдельная лицензия). При этом, если несколько модулей конфигурации одновременно используют один и тот же Feature ID – для каждого защищенного модуля будет выделена отдельная лицензия. Таким образом, не стоит защищать различные модули конфигурации, используя один Feature ID.