Sentinel LDK Envelope & API

Sentinel LDK Envelope & API



Методы защиты программ при помощи системы защиты Sentinel LDK


Для системы защиты Seninel LDK существуют следующие способы защиты программ:
  1. С помощью утилиты автоматической защиты - Sentinel LDK Envelope. Утилита Sentinel LDK Envelope предназначена для автоматической защиты уже скомпилированных приложений. При этом она даёт возможность устанавливать различные настройки защиты, тем самым делая её более гибкой.

Утилита Envelope существует под различные операционные системы:

    • Windows – позволяет:
      • защищать exe;
      • защищать dll;
      • защищать java (защита jar, защита war файлов);
      • защищать .net.
    • Linux – позволяет:
      • защищать so библиотеки;
      • защищать elf файлы;
    • Mac OS – позволяет:
      • защищать mach-o файлы.

Реализация защиты Sentinel LDK Envelope является быстрым способом построения надёжной защиты программного обеспечения и не требует внесения изменений в исходный код самого защищаемого приложения. Графический интерфейс Sentinel LDK Envelope позволяет легко изменять параметры защиты для защищаемых файлов, а также настраивать сообщения об ошибках, которые отображаются при работе пользователей с защищенным приложением. Sentinel LDK Envelope производит защиту исходного кода защищаемого приложения, реализуя различные механизмы защиты, такие как:
  • Механизмы борьбы с отладчиками;
  • Шифрование кода приложения;
  • Обфускация кода приложения;
  • Привязка защищённого приложения к ключу защиты Sentinel;
  • Механизм периодической проверки ключа;
  • И т.д..

2. С помощью Sentinel LDK Licensing API.

Защита через Licensing API строится с помощью 13 API функций, каждая из которых представлена в SentinelLDK Toolbox. Защита кода приложения и реализация всех методов защиты ложиться на плечи разработчика ПО.

3. Также защитить программу можно используя сочетания первых двух способов.



Envelope API для .Net & Java


В состав комплекта разработчика Sentinel LDK под Windows входит Envelope Configuration API:
%ProgramFiles(x86)%\Gemalto Sentinel\Sentinel LDK\Samples\ Envelope\

Envelope Configuration API предназначено для решения следующих задач:
1. Определение настроек защиты, применяемых утилитой Envelope, на уровне исходного кода защищаемого приложения (для построения более гибкого процесса защиты ПО);
2. Определение поведения защищённой программы, во время фоновой проверки ключа (опция Background Check в настройках Envelope), в случае его отсутствия: повторно запрашивать ключ, останавливать работу приложения, или же пропустить и продолжить работу защищённого ПО без ключа.

Как это работает: Программист, в коде защищаемого приложения, перед классами / методами, выставляет специальные атрибуты, в которых указывает настройки защиты, которые необходимо будет применить к данному конкретному участку кода (классу / методу). Затем, на этапе защиты, Envelope считывает из кода указанные настройки и автоматически применяет их к защищаемому приложению.

Подробнее о Java Envelope Configuration API:

Подробнее о .NET Envelope Configuration API:


Envelope.com - Что? Как? и Зачем?


В состав комплекта разработчика Sentinel LDK под Windows входит консольная версия утилиты Envelope: %ProgramFiles(x86)%\Gemalto Sentinel\Sentinel LDK\VendorTools\VendorSuite\envelope.com

Данная утилита позволяет выполнять защиту приложений из консоли, посредством запуска envelope.com с определёнными параметрами защиты.

Envelope.com позволяет автоматизировать процедуру защиты, встроив её, в процесс сборки ПО, на Post-Build этапе компиляции.

Более подробная информация есть в документации к Sentinel LDK: https://docs.sentinel.thalesgroup.com/ldk/LDKdocs/SPNL/LDK_SLnP_Guide/Protection/Windows/Running_from_Windows.htm


Защита ПО на терминальном сервере


Если защита программ от копирования осуществляется с помощью Sentinel LDK Envelope на ПК с доступом по RDP, тогда для защиты приложения необходимо подключить к удалённому RDP серверу пользовательский ключ защиты с теми Feature, на которые осуществляется защита приложения. При этом, для используемых Feature ID в ключе должна быть разрешена работа на ПК с RDP (определяется на этапе создания продукта с Feature'ами в Sentinel EMS / на этапе записи Feature ID в ключ, если речь о License Generation API).

Варианты размещения пользовательского ключа на удалённом терминальном сервере:

  1. Физически подключить пользовательский USB ключ Sentinel (HASP) HL с прошитыми в него Feature.
  2. Установить на терминальный сервер программный ключ Sentinel (HASP) SL с прошитыми в него Feature.
  3. Пробросить пользовательский ключ защиты программы на терминальный сервер по сети, используя сторонние средства.



Можно ли автоматизировать защиту Sentinel LDK Envelope?


Да, можно, для этого необходимо использовать консольную версию Sentinel LDK Envelope, расположена она в директории с установленным комплектом разработчика: "C:\Program Files\SafeNet Sentinel\Sentinel LDK\VendorTools\VendorSuite\envelope.com".

Подробнее о консольной версией Sentinel LDK Envelope:

Envelope.com - Что? Как? и Зачем?


Ошибка "Required assembly...could not be found"


Пример получаемой ошибки:

"...Required assembly "'PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'" could not be found:..."

Необходимо в настройках Sentinel LDK Envelope указать путь до требуемых сборок:

Sentinel LDK Envelope -> "File" -> "Settings" -> "Path for .NET Direction"

Пример путей: "C:\Windows\Microsoft.NET\assembly\GAC_32\..."


Ошибка "HASP_NO_API_DYLIB" и "HASP_INV_VCODE"


  • Ошибка "HASP_NO_API_DYLIB = 400" возникает в случае, если в директории с защищённым файлом или с файлом процесса, вызывающего защищённый файл, нет кастомизированных библиотек Sentinel LDK Licensing API вида: "hasp_windows_*ваш_Vendor_ID*.dll".
  • Ошибка "HASP_INV_VCODE = 22" возникает в том случае, когда в защищаемом приложении используются Vendor код и кастомизированные библиотеки Sentinel LDK Licensing API от разных серий разработчика.

Ошибка "...haspdnert.dll is too old(E0001)"


Подобная ошибка может возникать в тех случаях, когда целевой файл был защищён с помощью актуальной версии Sentinel LDK Envelope, но при этом в директории с защищённым приложением или файлом процесса, использующим защищённый файл, лежит библиотека "haspdnert.dll" или/и "haspdnert_x64.dll" от более старой версии Sentinel LDK Envelope (либо же, если этих библиотек там вообще нет).

Решение:

Скопировать "haspdnert.dll" или/и "haspdnert_x64.dll" от актуальной версии Sentinel LDK Envelope в директорию с защищённым файлом или файлом процесса, его вызывающего.



Как защитить документы (аудио, видео или текстовые файлы) с помощью ключей Sentinel (HASP)?


Для защиты файлов возможен такой вариант:

  1. Программу, которая работает с защищёнными файлами, необходимо обработать с помощью утилиты Sentinel LDK Envelope. После этого работа защищённого приложения без ключа будет невозможна.
  2. При защите необходимо активировать опцию "Enable data file encryption", которая включает функционал шифрования/расшифрования всех сохраняемых и открываемых процессом файлов. Также есть возможность указать маски имён файлов, которые необходимо шифровать.
  3. С помощью утилиты Sentinel LDK Data Encryption Utility необходимо предварительно зашифровать нужные данные (аудио, видео, текстовые файлы и т.д.).

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

Подробнее см. в справке (F1) к утилите Envelope.


Как переопределить сообщения об ошибках, выдаваемых защищённым ПО?


При защите с помощью Sentinel LDK Licensing API разработчик самостоятельно может в коде своего приложения переопределить выдаваемые сообщения об ошибках.

При защите с помощью Sentinel LDK Envelope задать свои сообщения об ошибках можно на вкладке "User Messages". Можно один раз переопределить все необходимые коды ошибок и затем сохранить результат, используя кнопку "Export...". Получившийся файл с расширением "*.msgx" в будущем можно загружать в любой проект защиты в Sentinel LDK Envelope, используя кнопку "Import...".

Ошибки "HASP_NO_VLIB = 48", "HASP_INV_VLIB = 49" и "HASP_OLD_VLIB = 56"


Для работы программных Sentinel (HASP) SL ключей с защищённым ПО требуется дополнительная кастомизированная библиотека Sentinel LDK API вида "haspvlib_* Vendor_ID*.dll".

Данная библиотека попадает на ПК пользователя несколькими путями, простейший из них:

В Sentinel LDK EMS -> "Developer" -> "RTE Installer" -> необходимо выбрать код разработчика и нажать кнопку "Generate" -> .

В результате генерируется консольная версия драйвера с включенной в него библиотекой "haspvlib_* Vendor_ID*.dll". После установки такого драйвера на ПК пользователя защищённое приложение сможет работать с программными Sentinel (HASP) SL ключами.

  • Ошибка "HASP_NO_VLIB = 48" говорит о том, что на ПК пользователя нет требуемой "haspvlib_*ваш_Vendor_ID*.dll" библиотеки.
  • Ошибка "HASP_INV_VLIB = 49" говорит о том, что на ПК пользователя нет целостной, актуальной "haspvlib_*ваш_Vendor_ID*.dll" библиотеки.
  • Ошибка "HASP_OLD_VLIB = 56" говорит о том, что на ПК пользователя есть "haspvlib_*ваш_Vendor_ID*.dll" библиотека, но её версия сильно устарела и необходимо обновить данную библиотеку.

Получить свежую версию библиотеки "haspvlib_* Vendor_ID*.dll" можно путём проведения процедуры представления Sentinel (HASP) HL Master ключа на своём ПК с установленным комплектом разработчика. Требуемая библиотека будет загружена в директорию "C:\Program Files\Common Files\Aladdin Shared\HASP\".

На ПК с защищённым ПО библиотека "haspvlib_* Vendor_ID*.dll" должна располагаться:

  1. Если на ПК используются программные ключи типа SL-AdminMode, либо SL-Legacy, то в директории "C:\Program Files\Common Files\Aladdin Shared\HASP\";
  2. Если на ПК используются программные ключи типа SL-UserMode, то в директории с защищённым ПО и файлом портативного менеджера лицензий "hasp_rt.exe".

Защита приложений под ARM

Система защиты Sentinel LDK (SRM) поддерживает защиту приложений под ARM.

Стандартный, актуальный комплект разработчика Sentinel LDK уже содержит средства защиты программ под ARM.



Как защитить ПО на КОНКРЕТНЫЙ ключ?


Все модели ключей, кроме Sentinel (HASP) HL Basic, имеют уникальные 32-битные ID.

При защите с помощью Sentinel LDK Licensing API для привязки экземпляра защищённого ПО к конкретному ключу можно использовать функцию hasp_login_scope.

При защите через Sentinel LDK Envelope на вкладке "Advanced" есть параметр "Enable Custom Protection Key Login Scope". Необходимо его активировать и в окне ниже ввести XML структуру следующего вида:

==

<?xml version="1.0" encoding="UTF-8" ?>

<haspscope>

<hasp id="ххххххх" />

</haspscope>

==

Где "ххххххх" - ID ключа, к которому требуется привязать конкретный экземпляр защищённого приложения.

В данном поле можно задать любой фильтр поиска ключа для логина, примеры XML шаблонов фильтров поиска можно посмотреть в утилите Sentinel LDK Toolbox из комплекта разработчика.

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



Что такое Vendor код? Что даёт злоумышленнику знание Vendor кода?


Vendor код – уникальная строка, в которой хранятся в зашифрованном виде секретные ключи для каждой серии разработчика, необходимые для работы с ключами защиты через функции Sentinel LDK Licensing API.

Знание Vendor кода даёт хакеру возможность легче детектировать точки входа в функции Sentinel LDK Licensing API, с помощью которых производятся обращения к ключу, так как Vendor код передаётся как один из параметров при вызове, к примеру, функции логина в ключ.

Поэтому мы не рекомендуем хранить Vendor код в открытом виде (например в конфиг файле защищаемого приложения).



Какие существуют способы защиты конфигураций на платформе 1С: Предприятие версий 7.7 / 8.х?



Для защиты 1С конфигураций возможны следующие варианты:

  1. Необходимо часть логики 1С конфигурации вынести во внешнюю DLL библиотеку. Такую библиотеку можно будет защитить с помощью Sentinel LDK Envelope, либо с помощью Sentinel LDK Licensing API.
  2. Можно использовать стороннее решение Wise Advice для защиты 1С конфигураций, построенное на базе Sentinel LDK Licensing API. Подробности можно уточнить у разработчиков данного решения.

Какие параметры входят в Fingerprint, собираемый с компьютера при установке Sentinel (HASP) SL?


В Fingerprint входят информация об аппаратных характеристиках ПК, например: CPU ID, Motherboard ID, HDD ID, Ethernet UID и т.д.

Для расшифровки C2V c Fingerprint используется функция sntl_lg_decode_current_state из Sentinel LDK License Generation API.

Пример расшифрованного Fingerprint:


<?xml version="1.0" encoding="utf-8"?>

<sentinel_ldk_info>

<key>

<type>SL-AdminMode</type>

<configuration_info>

<system_fingerprint>

<fingerprint_info>

<criteria>

<name>cpu</name>

<value>2940756505</value>

</criteria>

<criteria>

<name>cpu</name>

<value>2940756505</value>

</criteria>

<criteria>

<name>mainboard</name>

<value>784958864</value>

</criteria>

<criteria>

<name>mainboard_uid</name>

<value>1047497330</value>

</criteria>

<criteria>

<name>hdd</name>

<value>635259119</value>

</criteria>

<criteria>

<name>optical_drive</name>

<value>2112966545</value>

</criteria>

<criteria>

<name>ethernet_uid</name>

<value>3138813999</value>

</criteria>

<criteria>

<name>vm_info</name>

<value>1927478231</value>

</criteria>

<criteria>

<name>secure_storage_uid</name>

<value>2713919246</value>

</criteria>

<criteria>

<name>computer_name</name>

<value>928116403</value>

</criteria>

<criteria>

<name>domain_name</name>

<value>3175731470</value>

</criteria>

<criteria>

<name>pci_storage_ide</name>

<value>1654369457</value>

</criteria>

<criteria>

<name>pci_storage_serial_scsi</name>

<value>2734835677</value>

</criteria>

<criteria>

<name>pci_display_vga</name>

<value>1424666256</value>

</criteria>

<criteria>

<name>pci_multimedia_hd_audio</name>

<value>2402293240</value>

</criteria>

</fingerprint_info>

</system_fingerprint>

</configuration_info>

</key>

<key>

<type>SL-UserMode</type>

<vendor>

<id>110659</id>

</vendor>

<configuration_info>

<system_fingerprint>

<fingerprint_info>

<criteria>

<name>cpu</name>

<value>2940756505</value>

</criteria>

<criteria>

<name>cpu</name>

<value>2940756505</value>

</criteria>

<criteria>

<name>mainboard</name>

<value>1253465720</value>

</criteria>

<criteria>

<name>mainboard_uid</name>

<value>1047497330</value>

</criteria>

<criteria>

<name>hdd</name>

<value>635259119</value>

</criteria>

<criteria>

<name>optical_drive</name>

<value>2112966545</value>

</criteria>

<criteria>

<name>ethernet_uid</name>

<value>3138813999</value>

</criteria>

<criteria>

<name>vm_info</name>

<value>1927478231</value>

</criteria>

<criteria>

<name>secure_storage_uid</name>

<value>1611978419</value>

</criteria>

<criteria>

<name>computer_name</name>

<value>928116403</value>

</criteria>

<criteria>

<name>domain_name</name>

<value>3175731470</value>

</criteria>

</fingerprint_info>

</system_fingerprint>

</configuration_info>

</key>

</sentinel_ldk_info>




Как узнать, к каким аппаратным характеристикам ПК привязан установленный Sentinel (HASP) SL ключ?


Привязка Sentinel (HASP) SL ключа к аппаратным характеристикам ПК зависит от типа машины: виртуальная или физическая, а также от схемы параметров привязки, выбранной при генерации программных ключей, см. "Ошибка SL Clone detected".

Чтобы узнать, к каким аппаратным характеристикам ПК привязан Sentinel (HASP) SL ключ, необходимо получить C2V файл с ключа и затем расшифровать его с помощью функции sntl_lg_decode_current_state из Sentinel LDK License Generation API.