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

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

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

Использование штатной утилиты 1C:Ring для проверки лицензий

Первым делом проанализируем возможности, которые предоставляет сама компания 1С. В составе дистрибутива современной платформы (начиная с версии 8.3) поставляется кроссплатформенная утилита 1C:Ring. Это мощный инструмент командной строки, который позволяет управлять лицензиями и проверять их состояние локально.

Разберем алгоритм работы с этой утилитой. Мы можем вызвать её программно из кода 1С или внешнего скрипта. Основная команда для нашей задачи выглядит следующим образом:

1c-ring license validate --path <путь_к_лицензиям>

Рассмотрим подробнее, что происходит при выполнении этой команды. Утилита опрашивает файлы лицензий (с расширением .lic), проверяет их цифровую подпись и соответствие текущим параметрам оборудования (Hardware ID). Если параметры ПК изменились (например, заменили материнскую плату или объем ОЗУ), утилита сообщит о невалидности лицензии. Поскольку проверка выполняется локально, доступ к интернету для этой операции не требуется.

Проверка наличия эмуляторов аппаратных ключей (HASP)

Многие способы нелегального использования 1С основаны на применении эмуляторов аппаратных ключей защиты HASP (например, MultiKey или VUSB). Выясним, как мы можем программно обнаружить присутствие таких «виртуальных» ключей в системе.

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

  1. Проверка службы эмулятора: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\NEH
  2. Проверка идентификаторов оборудования (Hardware ID) в ветке: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\USB

Для реализации такой проверки в коде 1С мы можем использовать объект WScript.Shell или запросы через WMI (Windows Management Instrumentation). Посмотрим на пример логики, которую можно реализовать:


Процедура ПроверитьНаличиеЭмулятора()
    Попытка
        Locator = Новый COMОбъект("WbemScripting.SWbemLocator");
        Service = Locator.ConnectServer(".", "root\cimv2");
        
        // Ищем подозрительные драйверы виртуальных шин
        Запрос = "SELECT * FROM Win32_PnPSignedDriver WHERE DeviceName LIKE '%Virtual USB MultiKey%'";
        Результат = Service.ExecQuery(Запрос);
        
        Если Результат.Count > 0 Тогда
            Сообщить("Внимание: Обнаружены признаки использования эмулятора ключа!");
        КонецЕсли;
    Исключение
        Сообщить("Не удалось выполнить проверку драйверов: " + ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры

Анализ программных лицензий и привязки к оборудованию

Программные лицензии 1С представляют собой зашифрованные файлы .lic. Они обычно располагаются в каталоге C:\ProgramData\1C\licenses. Важно понимать, что простое наличие файла не гарантирует легальность. Программа проверяет «отпечаток» системы.

Рассмотрим способ программного сопоставления. Платформа 1С хранит информацию о ключевых параметрах ПК (имя компьютера, серийный номер системной платы, процессора, версия ОС). Мы можем программно считать текущие параметры и попытаться сопоставить их с данными, доступными через встроенные функции платформы. Если в окне «О программе» мы видим длинный список «Информационных баз» или странные сетевые ключи при локальной работе — это повод для детальной проверки.

Посмотрим на пример использования функции ПолучитьИнформациюОЛицензиях(), которая появилась в новых версиях платформы. Она позволяет программно получить данные о текущем сеансе:


Инфо = ПолучитьИнформациюОЛицензиях();
Для Каждого Лицензия Из Инфо Цикл
    // Проверяем тип лицензии и её источник
    Если Лицензия.Локальная Тогда
        // Проверяем, не является ли она результатом работы патча
        // Оригинальные лицензии имеют четкую структуру регистрационных номеров
    КонецЕсли;
КонецЦикла;

Проверка целостности исполняемых файлов (библиотек)

Самым «грубым» методом взлома является патчинг библиотек 1С (например, backend.dll или 1cv8.exe), который просто отключает механизм проверки защиты. В этом случае программа запустится, даже если ключей нет вовсе.

Проанализируем ситуацию: как убедиться, что файлы оригинальные? Мы можем использовать механизм проверки контрольных сумм (хеширования). Для каждого релиза платформы существуют эталонные значения хеш-сумм файлов (MD5 или SHA-256). Программный расчет хеша текущего исполняемого файла и сравнение его с эталоном — надежный способ выявления патчей.

Также важным моментом является проверка цифровой подписи файлов. Все официальные файлы 1С подписаны сертификатом ООО "1С-Софт". Если подпись нарушена или отсутствует — файл был модифицирован.

  1. Находим путь к исполняемому файлу через КаталогПрограммы().
  2. Используем системные утилиты или COM-объекты для проверки подписи (например, CAPICOM или вызов powershell Get-AuthenticodeSignature).
  3. Сверяем результат с доверенным издателем.

Обнаружение признаков «Нарушения целостности системы»

Начиная с последних версий (8.3.17+), платформа 1С сама умеет детектировать популярные средства обхода защиты. В этом случае пользователь видит окно «Обнаружено нарушение целостности системы».

Разберем, как мы можем программно отследить это состояние. Платформа при обнаружении взлома делает записи в Журнал событий Windows (Event Log) и в собственный Журнал регистрации. Мы можем настроить мониторинг этих логов. Если в системном журнале появляются ошибки от источника 1C:Enterprise с кодами, указывающими на проблемы защиты, мы можем программно заблокировать работу пользователя или вывести предупреждение.

Ограничения и нюансы офлайн-проверки

Рассмотрим факторы, которые могут давать ложноположительные результаты при проверке:

Подводя итог, можно сказать: наиболее эффективным методом программной проверки без интернета является комбинация использования утилиты 1C:Ring и проверки целостности файлов платформы по контрольным суммам и цифровым подписям. Это позволяет с высокой долей вероятности отсечь как использование эмуляторов, так и прямое вмешательство в код программы.

← На главную