Для того чтобы приступить к защите программного обеспечения на платформе 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_" + Постфикс), Макет); КонецЕсли; Если Макет = Неопределено тогда ВызватьИсключение("Макет с образом компоненты защиты не найден"); КонецЕсли; Возврат Макет.ПолноеИмя(); КонецФункции |
Для ключей HASP:
При необходимости в защищаемом модуле может быть размещена функция 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>"; КонецЕсли; Возврат Результат; КонецФункции |