Защищаем конфигурацию. Один ключ СЛК для всех клиентов
Разработка - Защита ПО и шифрование
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Принцип
Сервер СЛК разворачивается на сервере компании-разработчика и раздает лицензии всем клиентам (пользователям), которые приобрели защищаемую конфигурацию. СЛК нужен для шифрования/дешифрования закрытого (защищенного) модуля.
Там же, на сервере компании-разработчика работает небольшая конфигурация (назовем ее "Бэк защиты") с опубликованным HTTP-сервисом, через который, собственно, и осуществляется лицензионный контроль использования защищаемой конфигурации.
Код обращения к HTTP-сервису компании-разработчика размещается в закрытом модуле защищаемой конфигурации.
Преимущества механизма
• одного ключа достаточно для лицензирования любого количества клиентов/пользователей;
• пользователю не нужно устанавливать сервер СЛК у себя, нужен только доступ в Интернет;
• удобно управлять лицензиями: можно оперативно подключить/отключить клиента, дать тестовый доступ, ограничить функционал в зависимости от вида лицензии (по типу ПРОФ, КОРП и т. п.);
• несложно реализовать политику лицензирования по количеству одновременных сеансов, количеству устройств, на которых установлена конфигурация и т. п.;
• можно получать данные о платформе, используемой версии конфигурации и т. д., что очень помогает при расследовании инцидентов;
• можно собирать статистику использования конфигурации.
В общем, возможности ограничены только фантазией и здравым смыслом.
Последовательность действий
1. Связаться с разработчиками СЛК, приобрести ключ, получить комплект разработчика.
- установочные пакеты сервера;
- драйвер ключа защиты;
- установочные пакеты компоненты;
- архив компоненты для загрузки в макет конфигурации;
- исполняемые модули редактора файлов;
- документация;
- демонстрационная конфигурация, примеры;
- ключ шифрования разработчика и примеры файлов данных для конкретной серии.
Следует отметить, что поддержка разработчиков СЛК грамотная и отзывчивая, документация добротная. Имеется демонстрационная конфигурация. Поэтому опишу процесс концептуально.
Рабочий шаблон "Бэка защиты", пример защищаемой конфигурации и обработка для создания защищенного файла данных содержится в прилагаемом к статье архиве.
Внедрены подсистемы БСП версии 3.0.3.69:
• Анализ журнала регистрации
• Базовая функциональность (обязательная)
• Завершение работы пользователей
• Настройки программы
• Обновление версии ИБ (обязательная)
• Пользователи (обязательная)
• Регламентные задания
• Удаление помеченных объектов
• Управление доступом
Собственно объекты защиты собраны в подсистему "Бэк":

2. Установить сервер СЛК. Активировать ключ.
3. Установить конфигурацию "Бэк защиты" и опубликовать HTTP-сервис Back на веб-сервере. Запомнить имя публикации. В пользовательском режиме создать пользователя с именем, например, "front" и полными правами. Ввести для него пароль. Под этим пользователем клиенты будут подключаться к сервису.
4. В защищаемую конфигурацию добавить объекты подсистемы Поддержка (в прилагаемом примере имеют префикс "w").

Кроме того, в защищаемую конфигурацию нужно добавить серверный модуль wЗакрытый, в котором будем размещать защищаемые процедуры. Модуль wЗакрытый в подсистему Поддержка включать не следует, т. к. он не должен входить в поставку конфигурации.
5. Выбрать модуль/модули или отдельные процедуры, которые будем закрывать. Они должны быть серверными. Скопировать защищаемые процедуры в модуль wЗакрытый. В исходных экспортных процедурах тело заменить на вызовы вида:
wСЛК.wЗакрытый().ИмяЗащищаемойПроцедуры();
В прилагаемой конфигурации для примера защищается общий модуль РегламентныеЗаданияАгрегатов.
В модуле wЗакрытый в функции ПолучитьПараметрыКлиентаИзСервисаРазработчика() прописать имя публикации (см. п. 3). В функции ПолучитьСоединениеССервисомРазработчика() прописать URL и порт сервиса, имя и пароль пользователя (см. п. 3).
6. В модуле wСЛК в функции ПолучитьПараметрыСвязи() прописать адрес и порт сервера СЛК. В функции Серия() прописать серию ключа.
7. В общий макет wКомпонентаСЛК (тип "Двоичные данные") загружаем zip-архив компоненты. Файл архива с компонентой в комплекте разработчика имеет вид licenceaddin-{%version%}-template.zip.
8. Делаем собственно макет с защищенным кодом wОбъектыСЛК. Для этого создаем внешнюю обработку wЗакрытый.epf (имя может быть любое). В начало модуля внешней обработки вставляем код предопределенных процедур (описаны в документации и представлены в демо СЛК). Ниже вставляем наш защищаемый код из общего модуля wЗакрытый. Сохраняем обработку.
Открываем редактор файлов СЛК - licenceedit. Редактор СЛК 3.0 может работать без ключа защиты – создание файлов данных выполняется при помощи открытого ключа разработчика, поставляемого в комплекте разработчика для конкретной серии ключей в виде текстового файла вида {%Серия%}.cryptkey.
В консольной утилите выбираем ключ, созданную внешнюю обработку wЗакрытый.epf и результирующий файл с зашифрованными данными ({%Серия%}.datafile) и нажимаем "Создать":

Полученный файл {%Серия%}.datafile загружаем в общий макет wОбъектыСЛК.
9. В защищаемой конфигурации для включения/отключения функциональности в зависимости от наличия лицензии используем функции wСЛКПовтИсп.ЗащищенныйМодульПодключен() и wСЛКПовтИсп.ЛицензияРазработчикаПолучена(). Поскольку модуль wСЛКПовтИсп является открытым, то включение/отключение функциональности нужно дублировать в закрытом модуле.
10. Создаем поставку нашей конфигурации. Модуль wЗакрытый в поставку не включаем!
Что в результате
1. Клиент приобретает нашу конфигурацию. Мы в "Бэке защиты" заводим нового клиента и добавляем запись в регистр Поддержка:

Рег. номер генерируется при записи в формате Год|Месяц|Дата|[Номер по порядку] (рассчитываем на то, что нашу конфигурацию будут покупать 9999 клиентов ежедневно).

Можно ввести количество дней доступа. Отсчет будет вестись от момента первого обращения клиента к сервису. Это удобно для предоставления тестового периода.
2. Клиент устанавливает нашу конфигурацию, открывает форму "Подключение поддержки", вводит рег. номер, код доступа и подключается.

3. Мы в бэке видим обращение клиента к сервису защиты:

В конфигурации "Бэк защиты" имеется рег. задание для очистки регистра "Обращения к сервису" с установкой периода хранения записей.
В защищаемой конфигурации отладка настраивается в функциях wСЛК.wЗакрытый(), wСЛК.ПолучитьПараметрыСвязи() и wЗакрытый.ПолучитьСоединениеССервисомРазработчика(). См. комментарии в коде.
В прилагаемом примере защищаемой конфигурации отладка в wСЛК.wЗакрытый() включена. Прописано, что сервер СЛК работает на localhost порт 9099. Веб-сервер работает на localhost порт 80, имя публикации – BackTest. Имя пользователя - front, пароль - 12345.
Следует отметить, что в боевом режиме к бэку лучше подключаться по протоколу HTTPS. Если наш веб-сервер настроен соответствующим образом, то нужно раскомментарить строчку в функции wЗакрытый. ПолучитьСоединениеССервисомРазработчика():
...
Попытка
Соединение = Новый HTTPСоединение(
ТекущийURLВебСервиса,
Порт,
ИмяПользователя,
ПарольПользователя,,
ВремяОжидания,
//ЗащищенноеСоединение, // НЕ ЗАБЫТЬ РАСКОММЕНТАРИТЬ В БОЕВОМ РЕЖИМЕ!!!
,
ИспользоватьАутентификациюОС);
...
Конфигурация тестировалась на платформе 8.3.12.1714.
Представленная конструкция реализована в трех наших интеграционных решениях. Показала себя с положительной стороны.
Успешной защиты и продаж!
Вступайте в нашу телеграмм-группу Инфостарт
См. также
Защита ПО и шифрование Разработчик 1С 8.3 1С:Библиотека стандартных подсистем Абонемент ($m)
Настоящее современное криптостойкое шифрование с помощью сертификатов.
9 стартмани
01.09.2026 1110 0 SerVer1C 9
Защита ПО и шифрование Разработчик 1С 8.3 1С:Библиотека стандартных подсистем Россия Абонемент ($m)
Дешифровка PEM файлов с SGN пакетом. PEM - стандартизированный текстовый формат текстовых контейнеров, используемый для безопасного хранения и передачи криптографических ключей, SSL/TLS-сертификатов и запросов на подпись (CSR). (Privacy-Enhanced Mail). SGN - стандартизированное расширение файла, содержащего отсоединенную (detached) электронную цифровую подпись для целевого документа. Пример файла: reportfile.zip.sgn.pem
1 стартмани
21.08.2026 752 0 DrZombi 1
Защита ПО и шифрование Разработчик 1С 8.3 1С:Розница 2 Бесплатно (free)
Учебная обработка показывает, как 1С шифрует номер карты публичным ключом RSA перед отправкой в платёжный шлюз и подписывает тело запроса - на чистом встроенном языке, без COM, .NET и внешних компонент. Почти все реализации RSA в 1С зовут .NET через COM, а он требует регистрации сборки и не работает на Linux и в тонком клиенте. Здесь RSA написан целиком на BSL: длинная арифметика, деление Кнута, возведение в степень по модулю. Корректность сверена с эталоном на больших числах байт в байт. Демо-ключ 256 бит, всё локально, одной кнопкой. Код открыт.
07.08.2026 1272 13 nedomolkov.ivan 2
Защита ПО и шифрование Разработчик Бесплатно (free)
Платёжный шлюз принимает номер карты только зашифрованным по RSA, а почти все реализации RSA в 1С зовут .NET через COM - и это молча ломается на Linux-сервере, в тонком клиенте и на голой Windows без regasm. Разбираю, как написать RSA целиком на встроенном языке: как хранить большие числа лимбами по основанию миллион, откуда берётся деление Кнута и square-and-multiply, почему первая версия считала 25 секунд и как это ускорилось в 8 раз. С проверкой байт в байт против внешнего эталона на больших числах.
07.08.2026 2090 nedomolkov.ivan 3
Защита ПО и шифрование Разработчик 1С:Предприятие 8 Бесплатно (free)
Платформенная защита модулей конфигураций, внешних обработок и расширений 1С легко «взламывается» общедоступными декомпиляторами, а использование СЛК (Система лицензирования и защиты конфигураций) часто избыточно из-за необходимости установки дополнительного ПО и покупки ключей. Рассмотрим использование методики защиты логики через обфускацию байт-кода, а именно частный случай использования метода, который позволит привязать решение к «железу» пользователя без использования внешних компонент и онлайн-активации.
19.02.2026 4634 1c-izh 10
Защита ПО и шифрование Разработчик Бухгалтер Пользователь 1С:Предприятие 8 Россия Абонемент ($m)
Обработка для подписи с помощью сертификата (ЭЦП) произвольных файлов, средствами платформы 1С.
5 стартмани
19.06.2025 2601 4 krundel 2
Защита ПО и шифрование 1С:Предприятие 8 Абонемент ($m)
Как спрятать свои секретные файлы от глаз любого? Всё просто, прячем все свои файлы (видео. документы, архивы, фото, да вообще любые файлы) в картинку или фото. Картинка при этом остается такой же красочной и визуально не изменившейся (лишь подрастет её вес). Стало интересно? Посмотри, как это делается, на скриншотах, если лень читать описание.
1 стартмани
03.06.2025 3212 user1195929 13
Защита ПО и шифрование Разработчик 1С:Предприятие 8 Абонемент ($m)
Статья посвящена практическому применению XOR-шифрования в среде 1С:Предприятие. Рассматривается теоретическая основа операции XOR, её особенности как метода шифрования, а также преимущества и недостатки в контексте защиты данных. Подробно описываются методы реализации XOR-шифрования и дешифрования на языке 1С, включая примеры кода и практические сценарии использования, такие как шифрование паролей, защита конфиденциальных данных в файлах и передача зашифрованной информации между системами. Обсуждаются аспекты безопасности, выбор ключей, а также интеграция с другими механизмами защиты данных в 1С. Статья ориентирована на разработчиков 1С, стремящихся повысить уровень защиты информации в своих решениях.
1 стартмани
09.04.2025 4926 user1195929 6
В данном случае СЛК работает как обычно, однако используется не для контроля количества лицензий, а только для обеспечения возможности вызова функций из закрытого (зашифрованного) модуля. (При "обычном" использовании СЛК мы также можем размещать его в сети).
- подключается компонента СЛК, код которой находится в защищенной конфигурации в общем макете с типом "Двоичные данные";
- создается экспортируемый компонентой объект, в свойствах которого указываются параметры связи с сервером СЛК;
- выполняется запуск объекта с указанием используемой серии ключей. В этот момент объект компоненты устанавливает соединение с сервером СЛК. Что конкретно делает объект компоненты, какой запрос отправляет, каким алгоритмом его шифрует, что СЛК возвращает - знают только разработчики СЛК.
Если запуск проходит успешно, то есть сервер СЛК запущен, серия ключа совпадает, совпадают (если заданы) доп. параметры, то метод Объект.Запуск() возвращает Истина и создается менеджер объектов.
Затем при помощи менеджера объектов можно создавать наши защищенные объекты из наших защищенных макетов. К этой поделке я не имею никакого отношения. Это поделка разработчиков СЛК. Хорошая, кстати, поделка.
Далее, с помощью менеджера объектов СЛК мы создаем из нашего зашифрованного макета наш закрытый модуль и используем его функции для обращения к нашему серверу поддержки. Стоит отметить также, что даже после успешного создания нашего модуля мы в отладке не сможем просмотреть его код. Мы сможем только вызывать его функции.
Более того, если даже у Вас есть весь комплект разработчика с ключами и Вы вдруг потеряли исходный код своего закрытого модуля, вы не сможете так вот просто взять и восстановить его из защищенного макета, так как редактор файлов СЛК работает в одну сторону.
Если интересно, могу выслать "Руководство разработчика" СЛК. Там все подробно описано.
2. У вас нет оригинального ключа защиты. А вот тут сложнее, ибо модуль с зашифрованными функциями это скорее всего байт-код, сверху зашифрованный СЛК, ну и расшифровывается уже на стороне сервера СЛК соответственно. Без ключа СЛК просто откажется его расшифровывать.
В принципе от сценария 2 защита неплохая, если реализовывать самому такое поделие - то дешво и сердито в принципе, простенький сервис СЛК на том же ПХП нагородить который будет принимать авторизацию от клиентов и выдвать токен, ну функцию расшифровки модуля. В 1С соответственно функцию вызова сервиса, сборки внешней обработки из возвращенного бинарника. Делов на день-два в принципе.
Интересно сколько хотят за сие поделие ?
Если бы я был разрабом подобного сервиса то защищаемые модуля вообще бы не располагал в макетах конфигурации, вообще их в конфигурации не было бы.. можно же было бы расположить его в виде бинарника в стороне СЛК-сервера, все равно к нему доступ только разработчиков есть и все. Запилить веб-морду из которой можно загружать эти бинарники и управлять лицензиями клиентов, видеть статистику, кто заходит, какими конфами, сколько юзеров. Добавлять\удалять лицензии и тд.
И никакого шифрования не надо тогда, в 1С пулять по запросу уже чистый байт-код, а может даже и куски байт-кода, пусть выполняет.
А вообще я к таким онлайн-защитам отношусь с недоверием именно из за онлайна, а где уверенность что у каждого клиента вообще есть интернет? Почему бы ему не работать не на автономном ноутбуке где нибудь на удаленном складе? А почему есть уверенность что у клиента настроено резервирование интернета, и в один прекрасный день он не отвалится и работа в 1С окажется невозможной по факту (даже при наличии модулей с повторно-возвращемыми значениями не факт что у вас сбой инета не будет с утра, когда юзеры только заходят в 1С). А что если сервер СЛК не будет доступен? Ведь аптаймы серверов то же не 100%, то есть надо позаботиться о как минимум резервировании в 2х разных дата центах, у двух разных провайдеров. Кароче много но и если... В итоге разрабу могут и счет за простой выставить, если компания окажется большой и с юристами, а их хлебом не корми дай по судиться с кем нибудь.
Согласен, что наш сервер должен работать надежно.За год работы было несколько случаев, когда наш сервер падал и клиенты звонили. Однако сабж используется для функционала, без которого можно несколько часов обойтись, никто не умрет.
Согласен, что для критической функциональности лучше использовать стандартный СЛК, то есть каждому клиенту выдавать свой рег. номер ключа. Мы так и делаем.
Что касается разработки своей системы защиты, то нужно подумать, есть ли в этом смысл? Ключ (точнее рег. номер ключа) стоит 374 руб., комплект разработчика - 4800 руб.
а вы определитесь:
>>> (17) В закрытом модуле с помощью средств 1с ?
>>> (18) Да.
Затем снова по кругу начинаете объяснять, что всё защищено СЛК...
Да даже после этого будет существовать возможность перехватить блок памяти переданный в Выполнить(), если это будет отдельно процедура, то хуже, ее быстро разберут на запчасти, если отдельные куски, то лучше, в защищаемой конфе может быть этих кусков огромное множество, что сильно затруднит их дальнейшую сборку в единую систему.
Собственно защита конфигураций 1С ничем по большому счету не отличается от защиты любой другой программы, все это уже было пройдено еще много лет назад на других языках. Все это в итоге решилось (в массовом виде) банально упаковщиками с шифрованием, коих можно наклепать уйму, достаточно хитрых, да еще и с защитой от отладки. В реалиях 1С этого даже близко не сделать.
Ваша разработка поможет защититься от нерадивого сисадмина который решит скомуниздить, либо от горе-клиентов которые думают что сейчас им поставят демо-базу, а они будут ей продолжать пользоваться. От специалиста 1С который решит воспользоваться защищаемыми конфигурациями не защитит (
Думаю не будете отрицать что имея скажем оригинальный ключ от 1 пользователя я получу защищаемый модуль в расшифрованном виде у себя на диске? дальше дело техники его забрать оттуда, декомпилить, положить в конфу в исходнике и отключить СЛК на совсем.
ПС: речь о вашей СЛК разумеется.
ПСС: если рассматриваем слк c hardware ключом, ну там дамп памяти ключа+эмулятор (тут могут быть различные сложности конечно). Но те конфы от франчей которые я встречал были написаны настолько безобразно что их
1. использовать не хотелось, а тем более ломать (зачем?)
2. при декомпиляции (ради любопытства) выяснялось что там Функция типа
Если МенеджерСЛК.ПроверитьКлюч() Тогда
Возврат истина;
Иначе
Возврат ложь;
КонецЕсли;
КонецФункции
собственно тут понятно что достаточно выкинуть это все и сделать один возврат истина всегда, дальше можно пользоваться без ключа.
3. В организациях где я работаю есть бюджет на покупку лицензионного софта, ломать его нет надобности просто, лицензии покупаются в первую очередь ради бумажки для проверяющих органов.
В вашем варианте не имея оригинального ключа, хотя бы одного, расшифровать защищаемый модуль хотя бы раз будет невозможно.
Для 1С:СЛК с "железным" ключом ситуация выглядит так (сам ключ представляет из себя специализированный микрокомпьютер на чипе с ПЗУ):
1. Есть ключ, у которого уникальный серийный номер, внутри 1С умеет сверять ИдВставленногоВПК_Ключа = ИдОжидаемогоКлючаЗашитогоПриРазработкеВКонфу, если они равны, то есть в пк вставлен ключ от этого программного продукта - то работаем, если нет - завершение работы. Имеет метод типа "занять лицензию", которая занимает 1 лицензию на 1 клиентский сеанс. Все это добро прописано просто в общем модуле прям в конфе, разумеется непоставляемом (то есть в байт коде).
2. Сам ключ имеет небольшой объем ПЗУ, в который можно зашить критичные куски кода, считаем это типа .dll с вашим "ноу-хау" конфигурации. Если ключа нет - физически нет программного кода для исполнения.
На практике встречается только вариант 1. То ли из за лени разработчиков (каждый ключ надо прошивать данными же если используем п2), то ли особенности работы СЛК от 1С не позволяющие по сути воспользоваться преимуществом п 2.
Вариант 1 снимается без ключа, банальным декомпилированием общего модуля, вариант 2 - дампом ключа + эмулятор ключа куда засовывается этот дамп.
Есть еще вопрос, на который не могу найти ответа. Может быть Вы знаете. Проблема в следующем. Собираем обновление для нашей конфигурации с пересборкой (редактором файлов СЛК) закрытого макета (в макет загружаем новый исправленный закрытый модуль). Обновляем конфигурацию у клиента. Так вот, до перезапуска "Агента сервера 1С" продолжает работать старый (!) модуль, то есть, например, успешно вызываются функции, которых в новом модуле уже нет. Новый закрытый модуль начинает работать только после перезапуска Агента сервера. Складывается впечатление, что закрытый модуль где-то кэшируется. И вряд-ли в сеансовых данных. Такой эффект проявляется как при стандартном использовании СЛК с программной лицензией, так и при использовании конструкции, описанной в статье.
Вы с таким поведением не сталкивались? Буду очень благодарен за ответ.
Сервер при старте агента сервера формирует там свой вспомогательный кэш и обновляет его по мере необходимости. Предположим что при обновлении конфы он не обновляет ваш закрытый макет в этом кэше, и продолжает отдавать клиентам старую версию из кэша (во что я лично не сильно верю). Я бы попробовал просто сделать простенькую обработку с кнопочкой и таким кодом (и выполнить ее на базе во время проявления глюка после обновления):
стрОригинал = "хххххх";
стрМакет = Base64Строка(ПолучитьОбщийМакет("ВашЗащищаемыйМакет"));
если стрОригинал <> стрМакет тогда
Сообщить("Что то тут не так");
конецЕсли;где стрОриганал - это строка получаемая в результате стрОригинал = Base64Строка(ПолучитьОбщийМакет("ВашЗащищаемыйМакет"));
выполненной на локальной (файловой) обновленной копии, той же версии (то есть это 100% эталон).
Если не будет совпадать - значит это баг платформы 1с с обновлением серверных кэшей при обновлении.
если они будут совпадать, тогда у вас проблема именно в распаковке модуля, его дешифровке и тд, одним словом в ваших алгоритмах СЛК (в том самом закрытом модуле). Попробуйте на время теста у модуля "Повторное использование возвращаемых значений" = Не использовать. Увидите, изменится ли что нибудь, вполне возможно дело не в модуле, он то как раз обновляется нормально, а с кэшем этих повторно возвращаемых значений.
ПС: предполагаю что ваш закрытый макет представляет из себя двоичные данные, если это просто шифрованные текст, то Base64Строка не нужна
ПСС: предпогаю что обновляете НЕ динамически, то есть выгоняете всех пользователей. Если динамически - то в этом дело )
Предположения ПС и ПСС верные.
Модуль с повторным использованием возвращаемых значений вроде не влияет, но надо еще раз перепроверить.
Я для проверки делаю так: прописываю номер версии конфигурации в двух местах - в открытом и в закрытом модуле. Проверяю и если номера не совпадают, то вывожу сообщение, что надо перезапустить Агент сервера.
Функцию КлючДоступен() скорректировали.
Подскажите, удалив ключ из системы программный код останется на месте (более того в незащищенном виде как правило, просто байт-код, который декомпилируется и без комплекта оригинального ключа), как получить этот код или сохранить в файл обработку?
Просто нужно внести изменения
Закрытый модуль средствами 1с- это как красная тряпка- уберите из описания всё что с этим связано и путаницы станет меньше)
Как справедливо отметил в этот четверг в своем докладе на Infostart Event Андрей Александрович "Внимание хакеров еще надо заслужить".
Кроме того существует другая сторона вопроса.
Одна из наших конфигураций ( установлена более чем у тысячи клиентов. Там обычный СЛК с программной лицензией, каждому клиенту - свой ключ. Казалось бы нужная конфигурация и цена приличная. Но кто будет ломать защиту? Клиентам нужна поддержка и обновления.
В другой конфигурации ( используется описанная здесь конструкция. Цена лицензии в зависимости от вида 1500-6000 руб. При продвижении мы рассчитывали на партнерскую сеть. Так вот партнерам за эти деньги (за 50%) даже внедрять не очень интересно (внедрение - 30 минут). Не то что кому-то ломать защиту. Кроме того, если и сломают, то опять же останутся без обновлений.
Впрочем, если посоветуете более удобный и надежный способ защиты, я буду очень благодарен. Серьезно. По сути, защита для разработчика это дополнительная проблема. И чем она проще решается, тем лучше.
Вам наверняка знакомо понятие "Систематическая ошибка выжившего" - т.е. статистики по не лицензионному использованию этих конфигураций у вас нет.
Вместе с тем, для конфигураций стоимостью менее 10т.р. на организацию никто не будет привлекать специалиста по взлому.
Однако для конфигураций стоимостью 5т.р. на рабочее место - вероятность попыток взлома я оцениваю в 100% (т.е. найдутся пользователи желающие снизить стоимость владения).
Обновления - в случае отучения конфигурации от ключа нет проблемы повторить 10ти минутную процедуру для обновленной конфигурации.
В нашем случае для первой конфигурации самостоятельную ценность для клиента представляет поддержка. Логика взаимодействия с Меркурием, прямо скажем, не совсем тривиальная. Помимо самой программы нужно знать методологию и нормативную базу. Кроме того, вслед за разработчиками Меркурия постоянно приходится дорабатывать решение и разбираться в том числе и не с нашими косяками. Поэтому за взлом не сильно переживаем.
Во втором случае сложнее. Решение работает хорошо. Поддержка там не сильно нужна. Вероятность взлома есть.
Вот тут просто не нужно говорить что модуль закрыт- разницы нет какой он- просто идет запрос и получаем ответ- причем ответ должен быть не просто что доступ есть)
В данной публикации, как я понял, вы описываете свою систему лицензирования в сочетании с защитой СЛК.
Ваша идея вроде как не плоха, но в ней много дыр - например:
Вы пробовали считать сеансы? ИМХО там не все так просто.
Вы получили явное согласие клиента на сбор телеметрии?
2) Подсчета сеансов в прилагаемом примере нет. Но в рабочей конфигурации реализовал (лицензирование по количеству одновременных сеансов). Разработан также вариант по количеству подключенных устройств, правда в боевом режиме не используем. Решили - по сеансам. И да, с подсчетом сеансов повозился, но в результате получилось не слишком сложно.
3) Сейчас собираем только технологические данные: номер версии платформы, имя и релиз конфигурации, номер нашего релиза. Планируем сделать сбор логов исключений. Это не персональная и не коммерческая информация. Если есть нормативный акт, запрещающий сбор такой информации, буду благодарен за ссылку.
Последняя конфигурация, в которой этот механизм реализован, на этой неделе прошла сертификацию на "1С:Совместимо".
В двух словах так:
В защищаемой конфигурации привязываюсь к некоторому значимому событию, обрабатываемому в закрытом модуле, и получаю количество сеансов:
Функция КоличествоСеансов()
КоличествоСеансов = 0;
СеансыИнформационнойБазы = ПолучитьСеансыИнформационнойБазы();
Для Каждого СеансИБ Из СеансыИнформационнойБазы Цикл
ИмяПриложения = СеансИБ.ИмяПриложения;
Если ИмяПриложения = "MobileClient"
ИЛИ ИмяПриложения = "1CV8C"
ИЛИ ИмяПриложения = "WebClient"
Тогда
КоличествоСеансов = КоличествоСеансов + 1;
КонецЕсли;
КонецЦикла;
Возврат КоличествоСеансов;
КонецФункции
ПоказатьДалее сравниваю с количеством сеансов по лицензии, полученным из нашего бэка защиты, и если есть превышение, то вывожу сообщение и запрещаю выполнять то самое значимое действие.
Строго говоря, здесь конечно есть дырка. Чтобы ее обойти нужно отказаться от кэширования ответа от бэка и стучаться в бэк каждый раз. И таки да: с зависшими сеансами могут быть проблемы.
По флейму: трепались про исключительную простоту взлома СЛК, но никто так и не приложил по-шаговой методики извлечения защищённого средствами СЛК модуля обработки. Далеко не впервые читаю на разных форумах подобные камменты, но как до теста или описалова алгоритма доходит, так популисты резво прыгают в кусты :-)
Недавно столкнулся с необходимостью доработать типовой функционал одного отраслевого решения, защищенного СЛК.
И как раз попал на невозможность изменить одну защищенную процедуру.
В итоге выход все же нашел без всяких взломов, однако в процессе изучения - как работает защита - столкнулся с кодом, который не понимаю, как работает:
//В вышестоящем коде значение переменной "Имя" получают через AddIn.Licence или типа того, неважно:
// Имя = "/temp/Licence.0"
//Далее, оригинал кода:
//МенеджерОбъектов = ВнешниеОбработки.Создать(ВнешниеОбработки.Подключить(
//ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(Имя)), , БезопасныйРежим(), Защита));
//Попытка перехвата, проверки и т.п.
ФайлОбраб = Новый Файл(Имя); // напомню, Имя = "/temp/Licence.0"
ФайлОбрабСуществует = ФайлОбраб.Существует(); // Ложь
ДвоичДанные = Новый ДвоичныеДанные(Имя);
ДвоичДанные.Записать("C:\Users\USR1CV8\manager.epf"); // В конфигураторе этот файл не открывается
МенеджерОбъектов = ВнешниеОбработки.Создать(ВнешниеОбработки.Подключить(
ПоместитьВоВременноеХранилище(ДвоичДанные), , БезопасныйРежим(), Защита)); // МенеджерОбъектов - внешняя обработка, подключена, работает ПоказатьКак такое возможно?
Что за файл "/temp/Licence.0", который не существует, но двоичные данные из него получить можно?
Что за двоичные данные, которые подключаются как внешняя обработка, но которые не открываются в конфигураторе после их сохранения?
/temp/Licence.0 - хз, то ли что-то связанное с шаред мемори, то ли еще что-то, специфичное для 1С, которое понимают двоичные данные, но не понимает Новый Файл()
И формат этих данных - также специфичный, который понимают ВнешниеОбработки, но не понимает конфигуратор.
Не знал раньше о таких недокументированных плюшках.
Рейтинг: 332
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 1115817
Создание 30.08.19 17:40
Обновление 30.08.19 17:40
Просмотры 43211
Загрузки 51
Рейтинг
49
Комментарии 69
Код открыт Да
Рубрики Защита ПО и шифрование
Кому Разработчик
Тип файла Архив с данными
Платформа 1С:Предприятие 8
Конфигурация Универсальные
Операционная система Не имеет значения
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)