Как защитить конфигурацию 1С:Предприятие 7.7 от копирования и несанкционированного использования?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При разработке тиражных решений и уникальных авторских конфигураций на платформе 1С:Предприятие 7.7 разработчики сталкиваются с проблемой защиты интеллектуальной собственности. Внутренняя архитектура файла конфигурации 1Cv7.MD представляет собой структурированное хранилище (OLE Compound Document), в котором весь программный код хранится в незашифрованном текстовом виде. Разберем по шагам, какие существуют ограничения платформы, почему стандартные средства защиты не работают и как надежно защитить конфигурацию техническими и организационными методами.

Анализ ограничений платформы 1С 7.7 и почему штатный пароль не защищает

Штатная установка пароля на конфигурацию через пункт меню Конфигуратора лишь блокирует открытие структуры дерева метаданных в режиме разработки. Однако исходные тексты программных модулей остаются в теле файла 1Cv7.MD в открытом виде. Любой текстовый редактор или специализированные утилиты распаковки compound-файлов позволяют извлечь и прочитать весь программный код без ввода пароля и без запуска среды 1С.

Простая проверка аппаратного окружения с помощью штатной функции ИмяКомпьютера() в процедуре ПриНачалеРаботыСистемы() глобального модуля также легко обходится:


Процедура ПриНачалеРаботыСистемы()
    Если ВРег(ИмяКомпьютера()) <> "SRV-MAIN" Тогда
        Предупреждение("Запуск программы на данном компьютере запрещен!");
        СтатусВозврата(0);
        Возврат;
    КонецЕсли;
КонецПроцедуры

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

Способ 1. Шифрование и компиляция модулей (КЗК и аналоги)

Наиболее популярный и проверенный способ защиты решений на платформе 1С 7.7 — применение специализированных систем защиты исходного кода (например, КЗК — Комплекс Защиты Конфигураций). Принцип работы таких средств заключается в следующем:

  1. Исходный код модулей компилируется в байт-код или шифруется стойкими криптографическими алгоритмами.
  2. Текст модулей в файле 1Cv7.MD заменяется на защищенные бинарные блоки.
  3. Выполнение кода берет на себя внешняя динамическая библиотека (DLL), которая расшифровывает и передает команды ядру платформы непосредственно в оперативной памяти во время выполнения.
  4. Система защиты дополняется проверкой аппаратного ключа или файла лицензии, сгенерированного под конкретный компьютер.

Способ 2. Вынос критической бизнес-логики во внешние компоненты (C++, Delphi, C#)

Если требуется гарантировать максимальную надежность, ключевые алгоритмы программы выносятся за пределы конфигурации 1С в скомпилированные бинарные библиотеки:

  1. Критически важные расчеты, формирование отчетов и процедуры проверки лицензий пишутся на компилируемых языках в виде Внешней Компоненты 1С (с реализацией интерфейсов IInitDone и ILanguageExtender) или стандартных COM-объектов.
  2. Внутри конфигурации 1С модуль подключается через стандартные функции ЗагрузитьВнешнююКомпоненту() или СоздатьОбъект().
  3. Скомпилированный файл DLL защищается специализированными протекторами исполняемого кода, которые предотвращают отладку и реверс-инжиниринг.

Если ЗагрузитьВнешнююКомпоненту("MyProtectExt.dll") = 0 Тогда
    Предупреждение("Не удалось загрузить модуль лицензирования!");
    СтатусВозврата(0);
    Возврат;
КонецЕсли;

Защита = СоздатьОбъект("AddIn.MyProtectClass");
Если Защита.ПроверитьЛицензию() = 0 Тогда
    Предупреждение("Лицензия не найдена или привязана к другому оборудованию!");
    СтатусВозврата(0);
    Возврат;
КонецЕсли;

Способ 3. Привязка к аппаратному обеспечению через WMI

Для создания собственной системы лицензирования без покупки сторонних программных комплексов можно использовать получение уникальных аппаратных идентификаторов компьютера средствами Windows Management Instrumentation (WMI):


Функция ПолучитьСерийныйНомерПлаты()
    Попытка
        Локатор = СоздатьОбъект("WbemScripting.SWbemLocator");
        Служба = Локатор.ConnectServer(".", "root\cimv2");
        Коллекция = Служба.ExecQuery("SELECT SerialNumber FROM Win32_BaseBoard");
        
        Для Каждого Элемент Из Коллекция Цикл
            Возврат СокрЛП(Элемент.SerialNumber);
        КонецЦикла;
    Исключение
        Возврат "";
    КонецПопытки;
    Возврат "";
КонецФункции

Проанализируем этот подход: полученный серийный номер материнской платы или процессора (Win32_Processor) хешируется вместе с секретной солью и сравнивается со значением в зашифрованном файле лицензии. Однако помните, что сам модуль 1С, выполняющий эту проверку, обязательно должен быть защищен от чтения (вынесен в DLL или зашифрован), иначе злоумышленник сможет закомментировать вызов функции.

Способ 4. Онлайн-валидация и серверная авторизация

При наличии постоянного подключения к интернету проверка лицензии может производиться через обращение к вашему веб-серверу авторизации с использованием системных HTTP-клиентов:


Функция ПроверитьЛицензиюОнлайн(ИДКлиента, КлючПродукта)
    Попытка
        HTTP = СоздатьОбъект("MSXML2.ServerXMLHTTP");
        URL = "https://lic.myserver.com/check?client=" + ИДКлиента + "&key=" + КлючПродукта;
        
        HTTP.Open("GET", URL, 0);
        HTTP.Send();
        
        Если HTTP.Status = 200 Тогда
            Ответ = HTTP.ResponseText;
            Если Ответ = "VALID_OK" Тогда
                Возврат 1;
            КонецЕсли;
        КонецЕсли;
    Исключение
        Возврат 0;
    КонецПопытки;
    Возврат 0;
КонецФункции

Способ 5. Инфраструктурная защита и терминальный доступ

Если разработка выполняется под заказ для конкретного предприятия, наиболее надежным решением является предоставление удаленного доступа к программе без передачи самого файла базы данных:

  1. База данных разворачивается на закрытом терминальном сервере (RDP / облако).
  2. Пользователям выдаются учетные записи только с правами запуска 1С в режиме «1С:Предприятие», доступ к Конфигуратору полностью блокируется.
  3. На уровне групповых политик Windows (GPO) отключается проброс локальных дисков клиента, буфер обмена и печать в файлы, исключая выгрузку 1Cv7.MD.
  4. На уровне файловой системы NTFS файлам базы данных назначаются строгие права (ACL), запрещающие пользователям копирование и чтение файлов вне контекста службы или процесса 1С.
← На главную