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

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При разработке собственных уникальных конфигураций на платформе 1С («нетленок») разработчики часто сталкиваются с угрозой кражи интеллектуальной собственности. В файловом варианте работы базы данных 1С скопировать папку с файлом .1CD на флешку и унести её на другой компьютер не составляет никакого труда. Если злоумышленнику или недобросовестному клиенту не нужны сами учетные данные, а требуется только готовая рабочая база с настроенными справочниками, документами и отчетами, он может просто очистить базу от документов и начать работать «с нуля».

В этой статье мы подробно рассмотрим, как защитить конфигурацию 1С от копирования и несанкционированного запуска на сторонних компьютерах. Мы разберем как простые программные методы, которые можно реализовать собственными силами, так и профессиональные инструменты защиты.

Постановка задачи: что именно мы защищаем?

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

  1. Защита данных базы: защита конфиденциальной информации от просмотра посторонними. Для этого используются инструменты шифрования дисков (например, BitLocker, VeraCrypt).
  2. Защита конфигурации: защита программного кода, алгоритмов проведения документов, структуры метаданных и отчетов от копирования и перепродажи.

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

Метод 1. Программная привязка к «железу» компьютера (WMI + Хеширование)

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

Рассмотрим по шагам, как реализовать этот алгоритм в коде 1С.

Шаг 1. Получение аппаратного идентификатора компьютера

Для этого мы воспользуемся COM-объектом WbemScripting.SWbemLocator. Напишем функцию, которая собирает серийный номер материнской платы и уникальный идентификатор процессора:


Функция ПолучитьИдентификаторКомпьютера() Экспорт
    Идентификатор = "";
    Попытка
        Локатор = Новый COMОбъект("WbemScripting.SWbemLocator");
        СлужбаWMI = Локатор.ConnectServer(".");
        
        // Получаем уникальный ID процессора
        Процессоры = СлужбаWMI.InstancesOf("Win32_Processor");
        Для Каждого Процессор Из Процессоры Цикл
            Идентификатор = Идентификатор + СокрЛП(Процессор.ProcessorId);
            Прервать; // Достаточно получить данные первого процессора
        КонецЦикла;
        
        // Получаем серийный номер материнской платы
        Платы = СлужбаWMI.InstancesOf("Win32_BaseBoard");
        Для Каждого Плата Из Платы Цикл
            Идентификатор = Идентификатор + СокрЛП(Плата.SerialNumber);
            Прервать;
        КонецЦикла;
    Исключение
        // На случай ограничения прав пользователя или сбоя WMI возвращаем резервный маркер
        Идентификатор = "DEFAULT_HARDWARE_KEY_12345";
    КонецПопытки;
    
    Возврат СокрЛП(Идентификатор);
КонецФункции

Шаг 2. Хеширование данных для генерации лицензионного ключа

Передавать и хранить аппаратный код в открытом виде небезопасно. Нам необходимо преобразовать полученную строку в уникальный хэш-код с помощью встроенного объекта 1С ХешированиеДанных. Также добавим секретное слово («соль»), чтобы злоумышленник не смог восстановить алгоритм генерации ключа.


Функция СгенерироватьКлючЛицензии(АппаратныйКод) Экспорт
    Хеширование = Новый ХешированиеДанных(АлгоритмХеширования.MD5);
    // Добавляем к аппаратному коду секретную "соль" разработчика
    Хеширование.Добавить(АппаратныйКод + "MySecretSalt_9921!");
    ХешСумма = Хеширование.ХешСумма;
    
    // Получаем строковое представление хеша (убираем пробелы)
    СтрокаКлюча = СтрЗаменить(Строка(ХешСумма), " ", "");
    Возврат СтрокаКлюча;
КонецФункции

Шаг 3. Проверка лицензии при старте системы

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

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


Процедура ПроверитьЛицензированиеПриЗапуске() Экспорт
    ИДКомпьютера = ПолучитьИдентификаторКомпьютера();
    ОжидаемыйКлюч = СгенерироватьКлючЛицензии(ИДКомпьютера);
    
    // Получаем эталонный ключ, сохраненный при активации программы
    СохраненныйКлюч = Константы.ЛицензионныйКлюч.Получить();
    
    Если СохраненныйКлюч <> ОжидаемыйКлюч Тогда
        Предупреждение("Критическая ошибка лицензирования!
        |База данных скопирована или запущен на неавторизованном оборудовании.
        |Работа программы будет завершена.", 10, "Внимание");
        
        ЗавершитьРаботуСистемы(Ложь);
    КонецЕсли;
КонецПроцедуры

Метод 2. Поставка конфигурации без исходных текстов и обфускация

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

Проанализируем основные способы защиты кода модулей:

  1. Поставка модулей без исходного текста. Платформа 1С позволяет компилировать модули в байт-код, удаляя исходный текст. Для этого при создании файла поставки конфигурации (.cf) в настройках поставки для необходимых общих модулей снимается флаг "Исходный текст". В результате код будет работать, но в конфигураторе вместо текста модуля будет отображаться надпись: *Исходный текст отсутствует*.
  2. Обфускация кода. Стандартные средства скрытия кода 1С уязвимы перед специализированными декомпиляторами, которые могут восстановить код из байт-кода. Чтобы защититься от декомпиляции, применяют обфускацию (запутывание кода). Обфускаторы переименовывают переменные и функции в нечитаемые наборы символов (например, о101оо(), lI1llI()), удаляют комментарии и форматирование, заменяют строковые константы на зашифрованные массивы байт. Программа продолжает функционировать, но восстановить логику запутанного кода становится экономически нецелесообразно.

Метод 3. Вынесение логики защиты во внешние компоненты (DLL)

Самый надежный способ программной защиты для настольных конфигураций — это вынесение части критического функционала (например, алгоритмов расчета цен, скидок, себестоимости или процедур проверки лицензии) во внешние динамические библиотеки (DLL), скомпилированные на языках C++, Delphi или C#.

Разберем, как выглядит схема взаимодействия 1С с такой компонентой:


Попытка
    ПодключитьВнешнююКомпоненту("ПутьККомпоненте\SecurityBlock.dll", "SecLib", ТипВнешнейКомпоненты.Native);
    ЗащищенныйОбъект = Новый("AddIn.SecLib.SecurityExtension");
Исключение
    Предупреждение("Не удалось загрузить библиотеку защиты системы!");
    ЗавершитьРаботуСистемы(Ложь);
КонецПопытки;

// Вызываем защищенную процедуру проверки ключа из DLL
Если НЕ ЗащищенныйОбъект.ПроверитьЛицензию() Тогда
    ЗавершитьРаботуСистемы(Ложь);
КонецЕсли;

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

Метод 4. Промышленная система лицензирования (1С:СЛК)

Если вы разрабатываете тиражное решение и не хотите «изобретать велосипед», лучшим выбором станет интеграция с официальной **Системой лицензирования и защиты конфигураций (1С:СЛК)** от фирмы «1С».

Преимущества интеграции с 1С:СЛК:

Метод 5. Облачные технологии (SaaS) — абсолютный заслон от копирования

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

Если бизнес-модель позволяет, переведите клиентов на работу в облаке (SaaS):

  1. Вы размещаете базу данных на собственном сервере (или арендованном VPS).
  2. Пользователи подключаются к базе через веб-браузер (веб-клиент 1С) или через тонкий клиент по протоколу HTTP/HTTPS.
  3. У клиентов физически отсутствует файл базы данных и файл конфигурации. Они видят только интерфейс программы, а все вычисления и сами данные надежно хранятся на вашем сервере под вашим полным контролем.

Резюме и рекомендации

Защита конфигураций 1С — это комплексный процесс. Выбор метода зависит от ценности вашего программного продукта и потенциальной квалификации злоумышленников:

← На главную