Вопросы по licensing api SLK и привязке к оборудованию
Здравствуйте, в нашей компании возникла задача защитить от копирования код на java. Т.е. даже скопировав жесткий диск на низком уровне не должно быть возможности пользоваться ПО без ключа. После изучения и экспериментов с Guardant Licensing Api и Guardant Station стало ясно, что теоретически это возможно.
Но с моментом копирования диска возникли вопросы, т.к при клонировании виртуалки Ubuntu 20.04 в VirtualBox, защищенное приложение так же успешно запускалось. Клонировали разными способами, если в этих виртуалках активировали серийные номера, в GS было видно в данных оборудования, что менялись HDD и/или материнская плата. (Проверяли на виртуалках, т.к физически клонировать диск сложнее и дольше)
Посмотрев переписку с вашим менеджером по работе с клиентами увидел, что он в самом начале писал "Тестирование проводится на программных ключах. Архитектурно они аналогичны аппаратным и будущем легко могут быть легко заменены на них. Единственное послабление – в демо-ключах отсутствует привязка к конфигурации компьютера." Поэтому перед тем как написать ему по поводу получения/покупки настоящих программных ключей, решил спросить здесь, правильно ли мы используем guardant api.
Вопросы:
1) Правда ли, что на демо ключах проверить привязку ключа к оборудованию невозможно, но на реальных программных ключах она работает?
2) Правильно ли мы используем api? (рассматриваем вариант лицензии без ограничений и онлайн активацию)
а) сначала вызываем LicenseActivator.Activate, куда передается серийный ключ.
б) При запуске приложения ищем лицензию через api.GrdGetLicenseInfo
в) Создаем объект компонента grdlic.Feature , передав его номер (id)
г) вызываем feature.Login, куда надо передать объект с кодами доступа GrdVendorCodes с публичным ключом вендора и приватным чтения
д) вызываем метод feature.Check куда передаем публичный ключ компонента. Ждем успешного кода
е) При завершении работы приложения вызываем feature.Logout
3) Если по первому вопросу ответ, что на демо ключах привязка не работает, но на реальных - да, то в какой момент проверяется, что оборудование поменялось и лицензия сломана? На момент поиска лицензий/логина/check? Или оно происходит фоном/может нужно еще какой-то метод в апи вызвать? Нужен ли доступ в интернет при этом?
4) Во враппере grdlic_java.jar в классе api я увидел метод
public static native int GetHostFingerprint(GrdString fingerprint, String host, int port);
Я думал вызывать этот метод при активации лицензии, сохранять значение в ячейку памяти и при каждом старте приложения сопоставлять значения, но я не могу этого сделать, т.к при вызове метода летит UnsatisfiedLinkError (в метод передавал пустой GrdString, "localhost", 0).
И я догадываюсь, почему летит ошибка:
В файле include/grdlic/grdlic.h есть только метод
int GRD_API GrdGetHostFingerprint(char** hostFingerprintJsonArray, const char* visibilityJson);
и у него отличная от враппера сигнатура. Даже если этот метод окажется мне ненужным, может вы посмотрите/почините этот метод в следующих релизах (вижу проблему и в 3.3 и в 3.5)