Как защитить конфигурацию 1С от несанкционированного запуска и ограничить доступ к базе данных

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

В практике разработчиков 1С нередко возникают ситуации, когда требуется защитить результаты своего интеллектуального труда. Это может быть связано с защитой уникального функционала самописной конфигурации от незаконного копирования, обеспечением своевременной оплаты со стороны заказчика или временным ограничением доступа к базе данных. Существует множество способов реализации такой защиты — от простейших «хитрушек» в коде до сложных отказоустойчивых систем с использованием внешних компонент и веб-сервисов.

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

Уровень 1. Программные «закладки» в коде (Базовый уровень)

Самый простой и очевидный способ заблокировать запуск конфигурации — это внедрение проверки определенного условия при старте системы. Для этого мы можем использовать глобальный модуль приложения или модуль управляемого приложения, а именно обработчики событий ПередНачаломРаботыСистемы или ПриНачалеРаботыСистемы.

Давайте рассмотрим пример программной блокировки, которая анализирует текущую дату. Если наступил определенный «час икс» (например, истек демонстрационный период или заказчик задерживает оплату), система выдает предупреждение и завершает свою работу.


Процедура ПередНачаломРаботыСистемы(Отказ)
    
    // Проверяем наступление контрольной даты
    КонтрольнаяДата = Дата("20261231235959"); // Дата окончания лицензии
    ТекущаяДатаКомпьютера = ТекущаяДата();
    
    Если ТекущаяДатаКомпьютера > КонтрольнаяДата Тогда
        ПоказатьПредупреждение(, "Срок действия временной лицензии истек. Обратитесь к разработчику!");
        Отказ = Истина; // Блокируем запуск системы
    КонецЕсли;
    
КонецПроцедуры

Для файловых баз и базовых конфигураций также можно использовать принудительное завершение работы через метод ЗавершитьРаботуСистемы. Метод принимает булев параметр, указывающий, нужно ли запрашивать подтверждение у пользователя (в нашем случае мы передаем Ложь, чтобы закрыть программу мгновенно).


Если КакаяНибудьХитрушка() Тогда
    ЗавершитьРаботуСистемы(Ложь); 
КонецЕсли;

Важное предостережение: данный метод обладает крайне низкой надежностью. Любой толковый программист 1С, открыв конфигурацию, сможет легко найти этот код поиском по ключевым словам ЗавершитьРаботуСистемы или Отказ = Истина, после чего просто закомментирует данные строки. Поэтому этот метод подходит только для защиты от технически неподготовленных пользователей.

Уровень 2. Штатные механизмы платформы 1С

Если вам требуется временно заблокировать базу данных без внесения сомнительных изменений в программный код модулей, наиболее правильным решением будет использование штатных механизмов администрирования платформы 1С. Рассмотрим два основных варианта.

Вариант А. Блокировка соединений через консоль администрирования

В клиент-серверном варианте работы администратор может заблокировать начало новых сеансов работы с информационной базой. Для этого используется утилита «Администрирование серверов 1С Предприятия»:

  1. Откройте консоль администрирования и перейдите к свойствам нужной информационной базы.
  2. Установите флаг «Блокировка начала сеансов включена».
  3. Задайте понятное пользователям сообщение (например: «База временно недоступна в связи с проведением технических работ»).
  4. Укажите код разрешения (пароль), который позволит администратору войти в базу вопреки блокировке для проведения восстановительных работ.

Вариант Б. Блокировка средствами БСП (Библиотеки стандартных подсистем)

Если ваша конфигурация разработана на базе БСП, вы можете заблокировать вход пользователей в режиме «1С:Предприятие». Для этого перейдите в раздел Администрирование -> Обслуживание -> Блокировка работы пользователей. Здесь можно настроить время начала блокировки, её завершения, а также ввести текст сообщения, которое увидят пользователи при попытке запуска программы.

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


НоваяБлокировка = Новый БлокировкаУстановкиСоединений;
НоваяБлокировка.Начало = ТекущаяДата();
НоваяБлокировка.Конец = ТекущаяДата() + 3600; // Блокировка на 1 час
НоваяБлокировка.Сообщение = "Внимание! База заблокирована администратором.";
НоваяБлокировка.Установлена = Истина;

УстановитьБлокировкуУстановкиСоединений(НоваяБлокировка);

Уровень 3. Поставка без исходного кода и обфускация

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

Однако закрытые модули можно подвергнуть декомпиляции с помощью сторонних инструментов реверс-инжиниринга. Чтобы максимально усложнить жизнь потенциальным взломщикам, применяется обфускация.

Обфускация — это процесс запутывания исходного кода. Специальные утилиты-обфускаторы изменяют код конфигурации следующим образом:

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

Уровень 4. Вынос логики на внешние Web и HTTP-сервисы

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

Разберем по шагам, как работает схема лицензирования через HTTP-сервис:

  1. При запуске база 1С (клиент) собирает уникальные параметры окружения (например, серийный номер материнской платы, UUID базы данных или идентификатор мобильного устройства).
  2. Клиент отправляет шифрованный запрос на ваш удаленный веб-сервер (HTTP-сервис).
  3. Веб-сервер проверяет наличие оплаты или подписки для данного клиента в своей базе данных.
  4. Если проверка успешна, сервер возвращает временный токен авторизации (например, JWT), который позволяет базе работать в течение определенного времени (например, 24 часа).
  5. Если клиент не оплатил услуги, сервер возвращает ошибку, и конфигурация блокирует запуск.

Давайте посмотрим на пример реализации отправки HTTP-запроса на сервер лицензирования из кода 1С:


Функция ПроверитьЛицензиюНаСервере(ИдентификаторКлиента)
    
    Сервер = "api.myserver.ru";
    Ресурс = "/v1/license/check?id=" + ИдентификаторКлиента;
    
    Соединение = Новый HTTPСоединение(Сервер, 443,,,,, Новый ЗащищенноеСоединениеOpenSSL);
    Запрос = Новый HTTPЗапрос(Ресурс);
    
    Попытка
        Ответ = Соединение.Получить(Запрос);
        Если Ответ.КодСостояния = 200 Тогда
            // Лицензия подтверждена, сервер вернул валидный токен
            Возврат Истина;
        Иначе
            // Доступ запрещен сервером
            Возврат Ложь;
        КонецЕсли;
    Исключение
        // Ошибка связи с сервером
        // Тут можно реализовать логику "льготного периода" работы без интернета
        Возврат Ложь;
    КонецПопытки;
    
КонецФункции

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

Уровень 5. Использование внешних компонент (Native API)

Для конфигураций, которые должны работать полностью автономно (например, на мобильных устройствах в глуши без доступа к сети Интернет), отличным решением является использование внешних компонент. Внешняя компонента — это программная библиотека (файл .dll для операционной системы Windows или .so для Linux и Android), написанная на низкоуровневых языках программирования, таких как C++ или Rust.

Алгоритм защиты строится следующим образом:

Декомпилировать скомпилированную библиотеку .so или .dll обратно в исходный и понятный код на C++ практически нереально — взломщику придется разбираться в низкоуровневом ассемблерном коде, что требует колоссальных временных затрат и высокой квалификации, стоимость которой зачастую превышает цену покупки лицензии.

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

Мы проанализировали различные методы ограничения запуска конфигураций 1С. Выбор конкретного подхода напрямую зависит от ваших целей и масштаба проекта:

← На главную