Защищаем конфигурацию. Один ключ СЛК для всех клиентов

30.08.19

Разработка - Защита ПО и шифрование

Пользователь защищенной конфигурации вводит регистрационный номер и код доступа. Установка сервера СЛК у пользователя не требуется. Управляем лицензиями удаленно.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
БэкЗащиты.dt, ЗащищаемаяКонфигурация.dt, wЗакрытый.epf
.zip 66,45Mb
41
41 Скачать (1 SM) Купить за 1 850 руб.

Принцип
Сервер СЛК разворачивается на сервере компании-разработчика и раздает лицензии всем клиентам (пользователям), которые приобрели защищаемую конфигурацию. СЛК нужен для шифрования/дешифрования закрытого (защищенного) модуля.
Там же, на сервере компании-разработчика работает небольшая конфигурация (назовем ее "Бэк защиты") с опубликованным HTTP-сервисом, через который, собственно, и осуществляется лицензионный контроль использования защищаемой конфигурации.
Код обращения к HTTP-сервису компании-разработчика размещается в закрытом модуле защищаемой конфигурации.

Преимущества механизма
• одного ключа достаточно для лицензирования любого количества клиентов/пользователей;
• пользователю не нужно устанавливать сервер СЛК у себя, нужен только доступ в Интернет;
• удобно управлять лицензиями: можно оперативно подключить/отключить клиента, дать тестовый доступ, ограничить функционал в зависимости от вида лицензии (по типу ПРОФ, КОРП и т. п.);
• несложно реализовать политику лицензирования по количеству одновременных сеансов, количеству устройств, на которых установлена конфигурация и т. п.;
• можно получать данные о платформе, используемой версии конфигурации и т. д., что очень помогает при расследовании инцидентов;
• можно собирать статистику использования конфигурации.
В общем, возможности ограничены только фантазией и здравым смыслом.

Последовательность действий
1. Связаться с разработчиками СЛК, приобрести ключ, получить комплект разработчика.

 
 Комплект разработчика включает:

Следует отметить, что поддержка разработчиков СЛК грамотная и отзывчивая, документация добротная. Имеется демонстрационная конфигурация. Поэтому опишу процесс концептуально.
 Рабочий шаблон "Бэка защиты", пример защищаемой конфигурации и обработка для создания защищенного файла данных содержится в прилагаемом к статье архиве.

 
 Состав конфигурации "Бэк защиты"

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. Мы в бэке видим обращение клиента к сервису защиты:

В конфигурации "Бэк защиты" имеется рег. задание для очистки регистра "Обращения к сервису" с установкой периода хранения записей.

 
 Отладка и HTTPS

Конфигурация тестировалась на платформе 8.3.12.1714.

Представленная конструкция реализована в трех наших интеграционных решениях. Показала себя с положительной стороны.

Успешной защиты и продаж!

Защита СЛК Конфигурация Лицензия Лицензирование Удаленно

См. также

Защита ПО и шифрование Программист Платформа 1С v8.3 1С:Бухгалтерия 3.0 Абонемент ($m)

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

1 стартмани

09.02.2023    2698    11    aximo    5    

2

Защита ПО и шифрование Программист Абонемент ($m)

Для установки защиты pdf документа, полученного в 1С, написано консольное приложение на c#., использующее одну зависимость pdfSharp.dll. В результате работы приложения ограничены операции над документом и записаны метаданные. С помощью аргументов командной строки можно управлять работой приложения.

2 стартмани

30.01.2023    2126    2    olevlasam    3    

3

Защита ПО и шифрование Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Универсальный синтаксический анализатор ASN.1, который может декодировать любую допустимую структуру ASN.1 DER или BER, независимо от того, закодирована ли она в кодировке Base64 (распознаются необработанные base64, защита PEM и begin-base64) или в шестнадцатеричном кодировании.

1 стартмани

04.12.2022    3558    16    keyn5565`    0    

14

Защита ПО и шифрование Программист Платформа 1С v8.3 Абонемент ($m)

Демонстрация возможностей шифрования строки на основе мастер-пароля в 1С Предприятие 8.3.19. AES без zip файла, RSA, PKDF2. (c использованием библиотеки С# через com).

2 стартмани

31.08.2022    4440    9    vit59    2    

6

Защита ПО и шифрование Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Обработка, позволяющая запутывать и шифровать байт-код, поставлять модули без исходных текстов и т.д. Работает только в файловом варианте с версии платформы 8.3.18 из-за асинхронных конструкций "Асинх" и "Ждать". Протестировано на платформе 8.3.25.1394.

10 стартмани

16.06.2022    12632    104    ZhokhovM    12    

45

Защита ПО и шифрование Программист Платформа 1С v7.7 Платформа 1С v8.3 Абонемент ($m)

Как уберечь конструкторскую документацию от воровства конкурентами? Недавно столкнулся с этой проблемой. Заказчик серьёзно обеспокоен утечкой информации о конструкторских разработках в адрес конкурентов, за счет подкупа исполнителей, занимающихся производством по конструкторской документации, операторов технологического оборудования и обрабатывающих центров по изготовлению деталей и сборочных единиц.

2 стартмани

09.03.2022    6110    3    ge_ni    9    

2

Защита ПО и шифрование Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Система построена на веб платформе, все управление происходит на сайте в личном кабинете пользователя.

1 стартмани

27.12.2021    5075    2    idm80    12    

9
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. VISkvortsov 01.09.19 09:48 Сейчас в теме
Если у клиента пропал интернет?
2. mvxyz 326 01.09.19 11:05 Сейчас в теме
(1) Обращение к серверу СЛК и к сервису поддержки выполняется один раз при запуске приложения или при подключении. Результаты подключения кэшируются через модуль с повторным использованием значений. Поэтому, если Интернет у клиента пропал после успешного подключения, защищаемая функциональность будет доступна до перезапуска приложения.
cleaner_it; RustIG; +2 Ответить
68. Suxar 18.05.22 11:27 Сейчас в теме
(2) У меня на практике был случай когда строительная компания перебила оптику провайдера, восстанавливали неделю. За неделю будет не один перезапуск.
3. SerVer1C 815 01.09.19 15:39 Сейчас в теме
Сомнительная защита... У клиента будет уже не СЛК. Закрытый модуль с обменами через HTTP можно декомпилировать и посмотреть логику его работы. Ну а далее уже дело техники.
maksa2005; +1 Ответить
4. mvxyz 326 01.09.19 17:16 Сейчас в теме
(3) Закрытый модуль не предается по сети. Закрытый модуль хранится в общем макете с типом "Двоичные данные" в зашифрованном виде. Порядок его создания описан в п.8 статьи.
В данном случае СЛК работает как обычно, однако используется не для контроля количества лицензий, а только для обеспечения возможности вызова функций из закрытого (зашифрованного) модуля. (При "обычном" использовании СЛК мы также можем размещать его в сети).
cleaner_it; +1 Ответить
5. lunjio 67 01.09.19 20:16 Сейчас в теме
(4) Что мешает отловить вызов http сервиса, когда передается ваш зашифрованный по закрытому ключу текст модуля, чтобы в ответ получить декомпилированный модуль, сохранить его и изменить код, чтобы ваш http сервис не вызывался и сразу передавать декомпилированный модуль.
6. mvxyz 326 01.09.19 21:14 Сейчас в теме
(5) Текст модуля не передается. Текст закрытого модуля хранится в защищаемой конфигурации в макете. Повторюсь: принцип защиты закрытого модуля ничем не отличается от стандартного использования СЛК.
7. SerVer1C 815 01.09.19 22:49 Сейчас в теме
(4) Насколько мне известно, принцип работы защиты СЛК на клиенте следующий: зашифрованный модуль (алгоритмом RSA ?) расшифровывается ключом, который берется из USB-токена. Откуда будет браться ключ для расшифровки модулей из вашей поделки? Если вы его спрятали в зашифрованный средствами 1с модуль, то так дело не пойдет. Если ваши функции wСЛКПовтИсп.ЗащищенныйМодульПодключен() и wСЛКПовтИсп.ЛицензияРазработчикаПолучена() находятся тоже в защищенном средствами 1с модуле, то тут их значения можно выставить на постоянку в Истина.
8. mvxyz 326 02.09.19 00:24 Сейчас в теме
(7) Алгоритм работы СЛК вкратце следующий:
- подключается компонента СЛК, код которой находится в защищенной конфигурации в общем макете с типом "Двоичные данные";
- создается экспортируемый компонентой объект, в свойствах которого указываются параметры связи с сервером СЛК;
- выполняется запуск объекта с указанием используемой серии ключей. В этот момент объект компоненты устанавливает соединение с сервером СЛК. Что конкретно делает объект компоненты, какой запрос отправляет, каким алгоритмом его шифрует, что СЛК возвращает - знают только разработчики СЛК.
Если запуск проходит успешно, то есть сервер СЛК запущен, серия ключа совпадает, совпадают (если заданы) доп. параметры, то метод Объект.Запуск() возвращает Истина и создается менеджер объектов.
Затем при помощи менеджера объектов можно создавать наши защищенные объекты из наших защищенных макетов. К этой поделке я не имею никакого отношения. Это поделка разработчиков СЛК. Хорошая, кстати, поделка.
Далее, с помощью менеджера объектов СЛК мы создаем из нашего зашифрованного макета наш закрытый модуль и используем его функции для обращения к нашему серверу поддержки. Стоит отметить также, что даже после успешного создания нашего модуля мы в отладке не сможем просмотреть его код. Мы сможем только вызывать его функции.
Более того, если даже у Вас есть весь комплект разработчика с ключами и Вы вдруг потеряли исходный код своего закрытого модуля, вы не сможете так вот просто взять и восстановить его из защищенного макета, так как редактор файлов СЛК работает в одну сторону.
Если интересно, могу выслать "Руководство разработчика" СЛК. Там все подробно описано.
cleaner_it; RustIG; +2 Ответить
9. SerVer1C 815 02.09.19 00:37 Сейчас в теме
(8) Не совсем понял, клиент будет ходить на ваш сервер СЛК через интернет?
10. mvxyz 326 02.09.19 09:09 Сейчас в теме
(9) Совершенно верно. Уже год ходят.
11. SerVer1C 815 02.09.19 09:25 Сейчас в теме
(10) Ну так а что мешает отладкой посмотреть, что вернул ваш сервер СЛК и потом самому подсовывать ответ клиенту? Если эта проверка происходит в закрытом модуле 1с, то это не проблема.
12. mvxyz 326 02.09.19 10:14 Сейчас в теме
(11) Если для Вас не проблема взломать СЛК, то вы - серьезный специалист. Поделитесь методикой?
Чтобы посмотреть, что вернул СЛК, надо декомпилировать двоичные данные макета внешней компоненты СЛК.
13. SerVer1C 815 02.09.19 10:18 Сейчас в теме
(12) Я не про СЛК, в вашем решении есть "последняя миля", когда код, еще не зашифрованный СЛК, идет на ваш сервер за лицензией, вот на этом этапе можно его перехватить.
14. AllexSoft 02.09.19 10:54 Сейчас в теме
(13) тут надо разделить на два сценария: 1 у вас есть оригинальный ключ защиты, и вам надо сделать копию конфигурации которая будет работать с этим же ключем, тогда перехват кода поможет восстановить алгоритм запроса сервера СЛК и все его параметры.
2. У вас нет оригинального ключа защиты. А вот тут сложнее, ибо модуль с зашифрованными функциями это скорее всего байт-код, сверху зашифрованный СЛК, ну и расшифровывается уже на стороне сервера СЛК соответственно. Без ключа СЛК просто откажется его расшифровывать.

В принципе от сценария 2 защита неплохая, если реализовывать самому такое поделие - то дешво и сердито в принципе, простенький сервис СЛК на том же ПХП нагородить который будет принимать авторизацию от клиентов и выдвать токен, ну функцию расшифровки модуля. В 1С соответственно функцию вызова сервиса, сборки внешней обработки из возвращенного бинарника. Делов на день-два в принципе.

Интересно сколько хотят за сие поделие ?
15. SerVer1C 815 02.09.19 11:01 Сейчас в теме
(14) Так автор же и пишет, что зашифрованный модуль не уходит на сервер, а с сервера приходит информация, можно/нельзя (+ наверное, и ключ для расшифровки?) пользоваться конфой - тут мы и выполняем атаку MITM.
16. AllexSoft 02.09.19 11:14 Сейчас в теме
(15) ну если с сервера приходит голый ключ, это дыра однозначно.
Если бы я был разрабом подобного сервиса то защищаемые модуля вообще бы не располагал в макетах конфигурации, вообще их в конфигурации не было бы.. можно же было бы расположить его в виде бинарника в стороне СЛК-сервера, все равно к нему доступ только разработчиков есть и все. Запилить веб-морду из которой можно загружать эти бинарники и управлять лицензиями клиентов, видеть статистику, кто заходит, какими конфами, сколько юзеров. Добавлять\удалять лицензии и тд.
И никакого шифрования не надо тогда, в 1С пулять по запросу уже чистый байт-код, а может даже и куски байт-кода, пусть выполняет.

А вообще я к таким онлайн-защитам отношусь с недоверием именно из за онлайна, а где уверенность что у каждого клиента вообще есть интернет? Почему бы ему не работать не на автономном ноутбуке где нибудь на удаленном складе? А почему есть уверенность что у клиента настроено резервирование интернета, и в один прекрасный день он не отвалится и работа в 1С окажется невозможной по факту (даже при наличии модулей с повторно-возвращемыми значениями не факт что у вас сбой инета не будет с утра, когда юзеры только заходят в 1С). А что если сервер СЛК не будет доступен? Ведь аптаймы серверов то же не 100%, то есть надо позаботиться о как минимум резервировании в 2х разных дата центах, у двух разных провайдеров. Кароче много но и если... В итоге разрабу могут и счет за простой выставить, если компания окажется большой и с юристами, а их хлебом не корми дай по судиться с кем нибудь.
19. mvxyz 326 02.09.19 11:53 Сейчас в теме
(16) Необходимость наличия доступа в Интернет я оговорил в начале статьи. Описанную конструкцию мы используем для защиты функциональности, которая требует доступа в Интернет по определению.
Согласен, что наш сервер должен работать надежно.За год работы было несколько случаев, когда наш сервер падал и клиенты звонили. Однако сабж используется для функционала, без которого можно несколько часов обойтись, никто не умрет.
Согласен, что для критической функциональности лучше использовать стандартный СЛК, то есть каждому клиенту выдавать свой рег. номер ключа. Мы так и делаем.
Что касается разработки своей системы защиты, то нужно подумать, есть ли в этом смысл? Ключ (точнее рег. номер ключа) стоит 374 руб., комплект разработчика - 4800 руб.
23. AllexSoft 02.09.19 12:50 Сейчас в теме
(19) если я лицензирую разработку на количество сеансов, то 1 ключ = 1 сеанс ?
17. mvxyz 326 02.09.19 11:18 Сейчас в теме
(13) На наш сервер отправляется HTTP-запрос по протоколу HTTPS. Необходимость HTTPS отмечена в конце статьи в пункте "Отладка и HTTPS". Процедура отправки запроса и получения ответа размещена в закрытом модуле.
18. SerVer1C 815 02.09.19 11:23 Сейчас в теме
(17) В закрытом модуле с помощью средств 1с ?
20. mvxyz 326 02.09.19 11:53 Сейчас в теме
21. AllexSoft 02.09.19 11:58 Сейчас в теме
(20) по умолчанию можете считать ваш модуль не закрытым, ибо средства 1С не позволяют закрывать модули надежно.
SerVer1C; +1 Ответить
22. mvxyz 326 02.09.19 12:19 Сейчас в теме
(21) Возможно Вам знакома статья И ещё несколько слов о защите разработок... См. пункт 3.
Естественно, возможность взлома защиты СЛК существует.
Если потребуется сделать обработку для Нью-Йоркской фондовой биржи, то наверное, стоит подумать о других методах защиты.
24. SerVer1C 815 02.09.19 12:51 Сейчас в теме
(22) Я вас поздравляю, ваша защита без защиты. Т. к. реверсер свободно сдекомпилирует закрытый средствами 1с модуль. По поводу СЛК скажу - это хорошая защита, но когда она работает локально, а не как у вас.
26. пользователь 02.09.19 13:10
Сообщение было скрыто модератором.
...
27. mvxyz 326 02.09.19 13:14 Сейчас в теме
(24) Модуль закрывается не средствами 1С, а средствами внешней компоненты СЛК. Можно поподробнее: как дешифровать и декомпилировать такой закрытый модуль? И чем, по Вашему мнению, принципиально отличается размещение сервера СЛК локально и в сети.
29. SerVer1C 815 02.09.19 13:18 Сейчас в теме
(27) Прежде чем передать управление защищенному коду СЛК, нужно что-то проделать. Вот в этот момент мы оказываемся посередине и ломаем-ломаем-ломаем.

а вы определитесь:
>>> (17) В закрытом модуле с помощью средств 1с ?
>>> (18) Да.

Затем снова по кругу начинаете объяснять, что всё защищено СЛК...
30. mvxyz 326 02.09.19 13:26 Сейчас в теме
(29) Отвечая "Да" на вопрос "В закрытом модуле с помощью средств 1С?" я имел в виду, что HTTP-запрос выполняется средствами 1С из закрытого модуля, а не то, что модуль закрывается средствами 1С. Прошу прощения, если я Вас неправильно понял. Если бы вопрос был такой: "В модуле, закрытом с помощью средств 1С?", то и ответ был бы другой.
34. SerVer1C 815 02.09.19 13:58 Сейчас в теме
(30) Давайте определимся: пишите защищенный СЛК, либо защищенный 1С. Итак: я правильно понимаю, что HTTPS запрос делается из модуля, защищенного СЛК ? Пусть так. НО при старте 1С какая-то цепочка алгоритмов находится же либо в открытых модулях, либо в защищенных 1С. Перед расшифровкой первого защищенного СЛК модуля нам же надо как-то получить ключ, верно? Так вот перед первой расшифровкой СЛК где находятся алгоритмы??? В защищенном 1С модуле, так ?
36. mvxyz 326 02.09.19 14:35 Сейчас в теме
(34) Нет, не так. Как - я ответил в (8).
25. AllexSoft 02.09.19 13:06 Сейчас в теме
(22) знакома, закрытая обработка по сути то же самое что закрытый модуль (не важно чем вы ее расшифруете и положите на диск, хоть внешней компонентой, хоть онлайн-сервисом), разница только в том что бы перехватить момент ее появления на диске, прочитать бинарно и положить в виде отдельной обработки, дальше декомпилятор и тд ) Пока 1С не научится выполнять подобные обработки из объекта ПотокВПамяти, то есть по сути выполнять произвольные куски байт-кода 1с с помощью той же выполнить(), эти все попытки тщетны.. все равно ваш код целиком окажется в кэше на диске (пусть и в байт-коде) откуда его успешно выгребут.
Да даже после этого будет существовать возможность перехватить блок памяти переданный в Выполнить(), если это будет отдельно процедура, то хуже, ее быстро разберут на запчасти, если отдельные куски, то лучше, в защищаемой конфе может быть этих кусков огромное множество, что сильно затруднит их дальнейшую сборку в единую систему.
Собственно защита конфигураций 1С ничем по большому счету не отличается от защиты любой другой программы, все это уже было пройдено еще много лет назад на других языках. Все это в итоге решилось (в массовом виде) банально упаковщиками с шифрованием, коих можно наклепать уйму, достаточно хитрых, да еще и с защитой от отладки. В реалиях 1С этого даже близко не сделать.

Ваша разработка поможет защититься от нерадивого сисадмина который решит скомуниздить, либо от горе-клиентов которые думают что сейчас им поставят демо-базу, а они будут ей продолжать пользоваться. От специалиста 1С который решит воспользоваться защищаемыми конфигурациями не защитит (
SerVer1C; +1 Ответить
28. mvxyz 326 02.09.19 13:16 Сейчас в теме
(25) Вы хотите сказать, что защита с помощью СЛК ненадежна?
31. AllexSoft 02.09.19 13:30 Сейчас в теме
(28) надежность относительная всегда, важно четко обозначать от чего поможет СЛК, а от чего нет.. как я и сказал от сисадмина который хочет сделать копию себе "на память" и не разбирается в СЛК, поможет. Поможет и от клиента который думает что сможет не заплатить за конфу поставленную по временной демо-лицензии. Но от специалиста 1С, у которого есть оригинальный ключ и который хочет убрать СЛК на совсем не поможет. Допустим я хочу купить защищаемую конфу, покупаю на 1 юзера, получаю ключ, а юзеров у меня 500.. ломаем конфу, и за стоимость одной лицензии получаем лицензию на 500.
Думаю не будете отрицать что имея скажем оригинальный ключ от 1 пользователя я получу защищаемый модуль в расшифрованном виде у себя на диске? дальше дело техники его забрать оттуда, декомпилить, положить в конфу в исходнике и отключить СЛК на совсем.
ПС: речь о вашей СЛК разумеется.
ПСС: если рассматриваем слк c hardware ключом, ну там дамп памяти ключа+эмулятор (тут могут быть различные сложности конечно). Но те конфы от франчей которые я встречал были написаны настолько безобразно что их
1. использовать не хотелось, а тем более ломать (зачем?)
2. при декомпиляции (ради любопытства) выяснялось что там Функция типа
Функция КлючДоступен()
Если МенеджерСЛК.ПроверитьКлюч() Тогда
Возврат истина;
Иначе
Возврат ложь;
КонецЕсли;
КонецФункции

собственно тут понятно что достаточно выкинуть это все и сделать один возврат истина всегда, дальше можно пользоваться без ключа.
3. В организациях где я работаю есть бюджет на покупку лицензионного софта, ломать его нет надобности просто, лицензии покупаются в первую очередь ради бумажки для проверяющих органов.
Kyrales; RustIG; +2 Ответить
37. mvxyz 326 02.09.19 14:43 Сейчас в теме
(31) "я получу защищаемый модуль в расшифрованном виде у себя на диске" - надо полагать, что тоже самое можно проделать и для СЛК с программной лицензией, установленного локально? Мне действительно интересно.
38. AllexSoft 02.09.19 15:32 Сейчас в теме
(37) да, конечно. Нет там никакой магии. Сам 1С:СЛК с программной лицензией не содержит никаких блоков программного кода зашитых в СЛК, то есть код там весь лежит в конфе, удалив ключ из системы программный код останется на месте (более того в незащищенном виде как правило, просто байт-код, который декомпилируется и без комплекта оригинального ключа). Ваш вариант СЛК с шифрованием выглядит более предпочтительным на фоне комплекта СЛК предлагаемого 1С.
В вашем варианте не имея оригинального ключа, хотя бы одного, расшифровать защищаемый модуль хотя бы раз будет невозможно.

Для 1С:СЛК с "железным" ключом ситуация выглядит так (сам ключ представляет из себя специализированный микрокомпьютер на чипе с ПЗУ):
1. Есть ключ, у которого уникальный серийный номер, внутри 1С умеет сверять ИдВставленногоВПК_Ключа = ИдОжидаемогоКлючаЗашитогоПриРазработкеВКонфу, если они равны, то есть в пк вставлен ключ от этого программного продукта - то работаем, если нет - завершение работы. Имеет метод типа "занять лицензию", которая занимает 1 лицензию на 1 клиентский сеанс. Все это добро прописано просто в общем модуле прям в конфе, разумеется непоставляемом (то есть в байт коде).
2. Сам ключ имеет небольшой объем ПЗУ, в который можно зашить критичные куски кода, считаем это типа .dll с вашим "ноу-хау" конфигурации. Если ключа нет - физически нет программного кода для исполнения.

На практике встречается только вариант 1. То ли из за лени разработчиков (каждый ключ надо прошивать данными же если используем п2), то ли особенности работы СЛК от 1С не позволяющие по сути воспользоваться преимуществом п 2.
Вариант 1 снимается без ключа, банальным декомпилированием общего модуля, вариант 2 - дампом ключа + эмулятор ключа куда засовывается этот дамп.
molodoi1sneg; mvxyz; +2 Ответить
39. mvxyz 326 02.09.19 16:20 Сейчас в теме
(38) Большое спасибо за подробный ответ!
Есть еще вопрос, на который не могу найти ответа. Может быть Вы знаете. Проблема в следующем. Собираем обновление для нашей конфигурации с пересборкой (редактором файлов СЛК) закрытого макета (в макет загружаем новый исправленный закрытый модуль). Обновляем конфигурацию у клиента. Так вот, до перезапуска "Агента сервера 1С" продолжает работать старый (!) модуль, то есть, например, успешно вызываются функции, которых в новом модуле уже нет. Новый закрытый модуль начинает работать только после перезапуска Агента сервера. Складывается впечатление, что закрытый модуль где-то кэшируется. И вряд-ли в сеансовых данных. Такой эффект проявляется как при стандартном использовании СЛК с программной лицензией, так и при использовании конструкции, описанной в статье.
Вы с таким поведением не сталкивались? Буду очень благодарен за ответ.
40. AllexSoft 02.09.19 17:37 Сейчас в теме
(39) да легко такое может быть, существует не только клиентский кэш сеансовых данных, но и серверный кэш, в папке C:\Program Files (x86)\1cv8\srvinfo\reg_1541
Сервер при старте агента сервера формирует там свой вспомогательный кэш и обновляет его по мере необходимости. Предположим что при обновлении конфы он не обновляет ваш закрытый макет в этом кэше, и продолжает отдавать клиентам старую версию из кэша (во что я лично не сильно верю). Я бы попробовал просто сделать простенькую обработку с кнопочкой и таким кодом (и выполнить ее на базе во время проявления глюка после обновления):

стрОригинал = "хххххх";
стрМакет = Base64Строка(ПолучитьОбщийМакет("ВашЗащищаемыйМакет"));
если стрОригинал <> стрМакет  тогда
Сообщить("Что то тут не так");
конецЕсли;


где стрОриганал - это строка получаемая в результате стрОригинал = Base64Строка(ПолучитьОбщийМакет("ВашЗащищаемыйМакет"));
выполненной на локальной (файловой) обновленной копии, той же версии (то есть это 100% эталон).

Если не будет совпадать - значит это баг платформы 1с с обновлением серверных кэшей при обновлении.

если они будут совпадать, тогда у вас проблема именно в распаковке модуля, его дешифровке и тд, одним словом в ваших алгоритмах СЛК (в том самом закрытом модуле). Попробуйте на время теста у модуля "Повторное использование возвращаемых значений" = Не использовать. Увидите, изменится ли что нибудь, вполне возможно дело не в модуле, он то как раз обновляется нормально, а с кэшем этих повторно возвращаемых значений.

ПС: предполагаю что ваш закрытый макет представляет из себя двоичные данные, если это просто шифрованные текст, то Base64Строка не нужна
ПСС: предпогаю что обновляете НЕ динамически, то есть выгоняете всех пользователей. Если динамически - то в этом дело )
41. mvxyz 326 02.09.19 17:57 Сейчас в теме
(40) Большое спасибо!
Предположения ПС и ПСС верные.
Модуль с повторным использованием возвращаемых значений вроде не влияет, но надо еще раз перепроверить.
Я для проверки делаю так: прописываю номер версии конфигурации в двух местах - в открытом и в закрытом модуле. Проверяю и если номера не совпадают, то вывожу сообщение, что надо перезапустить Агент сервера.
61. rjkjlptq 16 08.11.19 14:03 Сейчас в теме
(31)Здравствуйте.

Функцию КлючДоступен() скорректировали.
Подскажите, удалив ключ из системы программный код останется на месте (более того в незащищенном виде как правило, просто байт-код, который декомпилируется и без комплекта оригинального ключа), как получить этот код или сохранить в файл обработку?
32. kostik_love 317 02.09.19 13:37 Сейчас в теме
(28)
Просто нужно внести изменения
Закрытый модуль средствами 1с- это как красная тряпка- уберите из описания всё что с этим связано и путаницы станет меньше)
33. mvxyz 326 02.09.19 13:52 Сейчас в теме
(32) В описании нет ни слова о закрытии модуля средствами 1С! Нет даже строки "1С". Наоброт, в п.8 достаточно подробно описано как создать закрытый модуль с помощью редактора файлов СЛК. Ну если только - загрузка созданного с помощью редактора СЛК зашифрованного файла с двоичными данными в макет - это средства 1С. Но это как бы уже несерьезно. Закрытие средствами 1С всплыло в комментариях.
46. ValeriVP 1336 21.09.19 15:39 Сейчас в теме
(28) время на взлом СЛК при наличии доступного ключа - 10мин
49. mvxyz 326 21.09.19 17:23 Сейчас в теме
(46) Так ведь в данном случае ключа у пользователя нет! Рег. номер ключа СЛК активирован на нашем сервере. Это отметил и AllexSoft в (38).
50. ValeriVP 1336 21.09.19 18:21 Сейчас в теме
(49) не важно где ключ, важно что он доступен. Т.е. если конфигурация работает - то снять защиту - очень просто.
52. mvxyz 326 21.09.19 20:37 Сейчас в теме
(50) Просто для того, кто умеет. Таких мало. СЛК используется, наверное, во всех (во всяком случае, во многих) защищенных разработках Раруса. И ничего, живут.
Как справедливо отметил в этот четверг в своем докладе на Infostart Event Андрей Александрович "Внимание хакеров еще надо заслужить".
Кроме того существует другая сторона вопроса.
Одна из наших конфигураций (https://infostart.ru/public/539703/) установлена более чем у тысячи клиентов. Там обычный СЛК с программной лицензией, каждому клиенту - свой ключ. Казалось бы нужная конфигурация и цена приличная. Но кто будет ломать защиту? Клиентам нужна поддержка и обновления.
В другой конфигурации (https://infostart.ru/public/988788/) используется описанная здесь конструкция. Цена лицензии в зависимости от вида 1500-6000 руб. При продвижении мы рассчитывали на партнерскую сеть. Так вот партнерам за эти деньги (за 50%) даже внедрять не очень интересно (внедрение - 30 минут). Не то что кому-то ломать защиту. Кроме того, если и сломают, то опять же останутся без обновлений.
Впрочем, если посоветуете более удобный и надежный способ защиты, я буду очень благодарен. Серьезно. По сути, защита для разработчика это дополнительная проблема. И чем она проще решается, тем лучше.
54. ValeriVP 1336 22.09.19 10:52 Сейчас в теме
(52)
СЛК используется, наверное, во всех (во всяком случае, во многих) защищенных разработках Раруса. И ничего, живут.

Вам наверняка знакомо понятие "Систематическая ошибка выжившего" - т.е. статистики по не лицензионному использованию этих конфигураций у вас нет.

Вместе с тем, для конфигураций стоимостью менее 10т.р. на организацию никто не будет привлекать специалиста по взлому.
Однако для конфигураций стоимостью 5т.р. на рабочее место - вероятность попыток взлома я оцениваю в 100% (т.е. найдутся пользователи желающие снизить стоимость владения).

Обновления - в случае отучения конфигурации от ключа нет проблемы повторить 10ти минутную процедуру для обновленной конфигурации.
56. mvxyz 326 22.09.19 11:56 Сейчас в теме
(54) Согласен. Статистики по нелицензионному использованию нет. Мои соображения умозрительные. Однако в данном случае можно получить хоть какие-то данные для анализа. Например, сравнить количество обращений к бэку от данного клиента с количеством выданных ему лицензий. Или зафиксировать отсутствие обращений.
В нашем случае для первой конфигурации самостоятельную ценность для клиента представляет поддержка. Логика взаимодействия с Меркурием, прямо скажем, не совсем тривиальная. Помимо самой программы нужно знать методологию и нормативную базу. Кроме того, вслед за разработчиками Меркурия постоянно приходится дорабатывать решение и разбираться в том числе и не с нашими косяками. Поэтому за взлом не сильно переживаем.
Во втором случае сложнее. Решение работает хорошо. Поддержка там не сильно нужна. Вероятность взлома есть.
58. ValeriVP 1336 22.09.19 12:26 Сейчас в теме
(56) Наблюдается противоречие - зачем защищать, если вы не опасаетесь не лицензионного использования?
60. mvxyz 326 22.09.19 13:31 Сейчас в теме
(58) Противоречие кажущееся. Я не сильно опасаюсь взлома (пока, на текущем этапе), но, как Вы справедливо указали в (47), есть еще система лицензирования. Делать ее без связки с защитой как-то несерьезно. Скажем так: нужно лицензировать честных (в смысле тех, кто не взламывает) клиентов.
35. kostik_love 317 02.09.19 14:01 Сейчас в теме
(17)
Вот тут просто не нужно говорить что модуль закрыт- разницы нет какой он- просто идет запрос и получаем ответ- причем ответ должен быть не просто что доступ есть)
67. D_astana 110 16.01.22 16:36 Сейчас в теме
(12)А разве такая большая проблема взломать защиту слк? С оговоркой, что уже есть одна лицензия. Работы на пару часов.
42. RustIG 1747 04.09.19 21:29 Сейчас в теме
(0) все равно годный метод. спасибо за статью. остальным спасибо за полемику.
cleaner_it; mvxyz; +2 Ответить
43. mvxyz 326 04.09.19 21:58 Сейчас в теме
(42) Спасибо за спасибо!
На самом деле я не вижу причин считать предлагаемую защиту менее надежной, чем надежность самого СЛК.
47. ValeriVP 1336 21.09.19 15:50 Сейчас в теме
(43) Следует различать защиту кода и лицензирование.
В данной публикации, как я понял, вы описываете свою систему лицензирования в сочетании с защитой СЛК.
Ваша идея вроде как не плоха, но в ней много дыр - например:

несложно реализовать политику лицензирования по количеству одновременных сеансов, количеству устройств, на которых установлена конфигурация и т. п.;

Вы пробовали считать сеансы? ИМХО там не все так просто.

можно получать данные о платформе, используемой версии конфигурации и т. д., что очень помогает при расследовании инцидентов;

Вы получили явное согласие клиента на сбор телеметрии?
48. mvxyz 326 21.09.19 16:33 Сейчас в теме
(47) 1) Да, защита кода с помощью СЛК + система лицензирования.
2) Подсчета сеансов в прилагаемом примере нет. Но в рабочей конфигурации реализовал (лицензирование по количеству одновременных сеансов). Разработан также вариант по количеству подключенных устройств, правда в боевом режиме не используем. Решили - по сеансам. И да, с подсчетом сеансов повозился, но в результате получилось не слишком сложно.
3) Сейчас собираем только технологические данные: номер версии платформы, имя и релиз конфигурации, номер нашего релиза. Планируем сделать сбор логов исключений. Это не персональная и не коммерческая информация. Если есть нормативный акт, запрещающий сбор такой информации, буду благодарен за ссылку.
Последняя конфигурация, в которой этот механизм реализован, на этой неделе прошла сертификацию на "1С:Совместимо".
51. ValeriVP 1336 21.09.19 18:24 Сейчас в теме
(48) Подсчет сеансов - вы же фиксируете вход и выход, а так же периодический опрос - для избежания зависания сеансов?
53. mvxyz 326 21.09.19 22:04 Сейчас в теме
(51) Касательно лицензий я, наверное, поторопился с радужным ответом. Есть проблемы.
В двух словах так:
В защищаемой конфигурации привязываюсь к некоторому значимому событию, обрабатываемому в закрытом модуле, и получаю количество сеансов:
 Функция КоличествоСеансов()
	
	КоличествоСеансов = 0;
	
	СеансыИнформационнойБазы = ПолучитьСеансыИнформационнойБазы();
	
	Для Каждого СеансИБ Из СеансыИнформационнойБазы Цикл
		ИмяПриложения = СеансИБ.ИмяПриложения;
		Если ИмяПриложения = "MobileClient"
			ИЛИ ИмяПриложения = "1CV8C" 
			ИЛИ ИмяПриложения = "WebClient" 
			Тогда
			
			КоличествоСеансов = КоличествоСеансов + 1;
			
		КонецЕсли;
		
	КонецЦикла;
	
	Возврат КоличествоСеансов;
	
КонецФункции
Показать

Далее сравниваю с количеством сеансов по лицензии, полученным из нашего бэка защиты, и если есть превышение, то вывожу сообщение и запрещаю выполнять то самое значимое действие.
Строго говоря, здесь конечно есть дырка. Чтобы ее обойти нужно отказаться от кэширования ответа от бэка и стучаться в бэк каждый раз. И таки да: с зависшими сеансами могут быть проблемы.
55. ValeriVP 1336 22.09.19 10:59 Сейчас в теме
(53) допустимое решение, но имеет особенность - вы считаете пользователей в одной базе.
т.е. два клиента с одним ключом могут спокойно работать.
57. mvxyz 326 22.09.19 12:09 Сейчас в теме
(55) Это так. Но тут имеет место особенность нашего решения: Центральная база (УТ10) обменивается с конфигурацией-шлюзом, а к шлюзу подключаются мобильные клиенты. То есть база как бы одна.
59. ValeriVP 1336 22.09.19 12:31 Сейчас в теме
(57) т.к. вы положили свое решение на Инфостарт, я рассматриваю ваше как универсальное.
И в качестве универсального решения ваша разработка некоторые недостатки, хотя в целом имеет право на жизнь (ИМХО).
44. sg12 17 06.09.19 14:47 Сейчас в теме
Решение интересное, это бесспорно, но нужен интернет у клиента и у разработчика, то что кэш есть это хорошо, но интернета может не быть с утра и до обеда.
45. mvxyz 326 06.09.19 17:25 Сейчас в теме
62. mp3maker 14 03.01.20 12:53 Сейчас в теме
Любопытное решение.

По флейму: трепались про исключительную простоту взлома СЛК, но никто так и не приложил по-шаговой методики извлечения защищённого средствами СЛК модуля обработки. Далеко не впервые читаю на разных форумах подобные камменты, но как до теста или описалова алгоритма доходит, так популисты резво прыгают в кусты :-)
dj_tol; mvxyz; +2 Ответить
63. egorovntn 232 14.02.20 00:06 Сейчас в теме
Прошу прощения, что обращаюсь так. Но что бы написать в личку толи нужны старт мани толи еще что-то у меня не получается. Напишите мне в личку.
64. artem_from_minsk 23.09.20 10:24 Сейчас в теме
В общем кому нужен взлом СЛК от Рарус или других конфигураций с закрытыми модулями лицензирования обращайтесь в л.с. Стоимость взлома - цена за минимальную лицензии на данные продукты + стоимость моих работ.
65. user990652 10.02.21 23:31 Сейчас в теме
(64) Напишите в личку, пожалуйста, есть предложение
66. agromot 14.09.21 09:10 Сейчас в теме
Уважаемые коллеги. Можно ли указать сервер СЛК находящийся в сети по умолчанию, чтоб не вводить его вручную при подключении к базе данных нового пользователя? HOST1 пк с базами SQL и сервером 1с, SRV1-пк на котором установлены аппаратные ключи СЛК
Оставьте свое сообщение