Защита триальной версии программы

Страницы: 1 2 След.
RSS
Защита триальной версии программы, Как осуществить различие функционала триальной версии программы и полной?
 
Я создал приложение для которого с помощью Envelope создаю триальную версию программы, с ограничением в 90 дней.
Однако, кроме ограничения в 90 дней я хочу внести ограничение и на функционал программы (например, ограничить количество обрабатываемых точек, или размер вводимого текста, etc.)
Подскажите, пожалуйста, как можно этого добиться?
Как в программе отличить, работает программа в триальном режиме или в полнофункциональном?
 
а вы на какой ключ делаете защиту, на аппаратный (какой версии?) или программный ?

в общем есть два варианта:

1) вы в своей программе делаете на каждую функцию два Feature ID
    Например функции ввода текста: №201 для ввода без ограничений и №202 для ввода с ограничениями. Дальше при первом использовании этой функции (или при каждом, если скорость не важна) вы в программе делаете hasp_login_scoped к своему ключу с этими номерами функций. В зависимости от того, какой логин удался - решаете ограничивать или нет. Не забудьте потом сделать Logout (в конце работы программы, или при уничтожении объекта реализующего функцию)

2) вы внутрь ключа пишете свои двоичные данные (В ключе аппаратном HL Pro 112 байтов r/o и 112 байтов r/w памяти), в которых как-то кодируете флаг ограничения этой функции.
При выполнении (первом или каждом) вы читаете эту запись, и решаете про ограничение. Если считать ее не удалось - то функцию запрещаете вообще.


В обоих случаях в начале работы прораммы вы делаете hasp_login (при выходе из программы - hasp_logout) и запоминаете нужные данные: номер ключа Hasp ID для hasp_login_scoped в варианте 1 и connection handle для варианта 2 и для logout в конце
 
Конечно, способ предложенный Вами - был бы замечательным (не мог плохой способ придти в голову сразу нескольким людям, в том числе и мне  :)  ). Картину портит одно обстоятельство: ранее было распространено более 100 ключей. Добавить в каждый новые фичи - убиться веником:
  1. Попросить прислать файл c2v (а ещё надо объяснить, как его получить);
  2. Сгенерировать на основании его v2с (особенно, если учесть, что в каждом случае разный набор продуктов и количество лицензий);
  3. Отправить его обратно (объяснив, как его прошить обратно)...
В общем, может есть возможность просто выяснить, что программа работает с триальным ключом?
 
Что такое "триальный ключ", что такое "нетриальный ключ" и чем они отличаются?

1 & 3. Сделайте утилиту, или пуст ьиспользуют последнюю версию драйверов
А вообще, если вы лицензии прописывали, то все c2v у вас уже должны храниться.

> Добавить в каждый новые фичи
Ну... либо опять же сделайте утилиту, либо пользуйстесь способом 2.

Например у нас есть режим ограничения по времени. Поскольку обычные ключи защиты (кроме самой последней поставки) этого не поддерживают, то ограничения по дате хранится внутри обычной памяти ключа
 
Скорее всего вы УЖЕ в ключе делаете разные лицензии, или perpetual или ограниченную по времени.

Прочитайте и посмотрите.столбюец "ограничения" в http://localhost:1947/_int_/features.html для "триального ключа" и "нетриального"

И соответсвенно ваша программа их тоже может читать через hasp_get_session_info
 
Валерий, в целом Дмитрий прав, поясню только как отличить триальную Feature от нетриальной через API:
делается это через функцию hasp_get_info(scope, format, vendor_code, &info);, в качестве format передайте в неё следующую конструкцию:

<?xml version="1.0" encoding="UTF-8" ?>
 <haspformat root="hasp_info">
 <hasp>
 <attribute name="id" />
 <attribute name="type" />
 <feature>
 <attribute name="id" />
 <attribute name="locked" />
 <attribute name="expired" />
 <attribute name="disabled" />
 <attribute name="usable" />
 </feature>
 </hasp>
 </haspformat>  

На выходе получите следующий массив данных, пример:


<?xml version="1.0" encoding="UTF-8" ?>
<hasp_info>
<hasp id="1032033352" type="HASP-HL">
<feature id="0" locked="true" expired="false" disabled="false" usable="true" />
...
<feature id="9012" locked="true" expired="false" disabled="false" usable="true" />
</hasp>
<hasp id="1112429422580538024" type="HASP-SL">
<feature id="0" locked="false" expired="false" disabled="false" usable="true" />
<feature id="1" locked="false" expired="false" disabled="false" usable="true" />
<feature id="3" locked="false" expired="false" disabled="false" usable="true" />
<feature id="42" locked="false" expired="false" disabled="false" usable="true" />
<feature id="101" locked="false" expired="false" disabled="false" usable="true" />
</hasp>
</hasp_info>

Атрибут "locked" для feature на триальном ключе имеет значение false, на постоянном ключе значение true.
 
Ваш вариант хорош для ознакомелния с протоколом в Vedor Toolbox (куда ,мне кажеся, Валерий не заходил ).

То етсь можно через XPAth потом распарсить этот вывод и выбрать для него нужный ключ и в нем нужную feature, но практически мне кажется правльиней уже внутри объекта деать login на эту feature и проверять через get_session_info, чтобы получить в ответе ОДИН ключ и ОДНУ feature, а не всё-всё-всё досупное рантайму.

...а вот кстати полез я в справку...
"C:\Program Files (x86)\SafeNet Sentinel\Sentinel LDK\API\Runtime\C\licensing_api_c_en-US.chm"

и в разделе HASP_SESSIONINFO XML Tags вижу фигу:

1) во первых описывается отсутствующий элемент "featureid" - опечатка, видимо, но неприятно
2) во вторых отсутсвуют описания элементов locked - usable, а это уже неприятно.
Лично я полагал, что Locked обозначает HL-ключ, в противоположность к ЛЮБОМУ SL-ключу, от которого можно лицензию отвязать и переждать на любой другой SL
 
Ну да, собственно из того же файла:

Output XML Tags

<locked>

Whether the Feature is locked to the Sentinel protection key. A locked Feature will be disabled if the Sentinel SL key is disabled. (Returns true for an  HL key.)

То есть однозначной привязки locked к триалу мы тут не видим, то ли может быть не-loced trial, то ли может быть locked не-trial
 
Лучше IMHO делать запрос такого рода:
Код
<haspformat root="hasp_info">    <hasp> <attribute name="id" /> <attribute name="type" />     <feature> <attribute name="id" /> <attribute name="license" /> </feature> </hasp></haspformat> 
Пример ответа из hasp_get_info():
Код
<?xml version="1.0" encoding="UTF-8" ?><hasp_info> <hasp id="12345" type="HASP-HL">   <feature id="0" license_type="perpetual" />  <feature id="16" license_type="expiration" exp_date="1418428500" /></hasp></hasp_info> 

Пример ответа из hasp_get_session_info() - возвращзается только текущая фича только текущего ключа, не надо фильтровать большой список, собранный со всей сети:
Код
<hasp_info>  <hasp id="98765" type="HASP-HL">     <feature id="16" license_type="perpetual" /> </hasp></hasp_info>
Если верить документации, то на твоём ключе license type должен быть "trial", проверь в Toolbox'e
 
Ещё во вторую функцию можно передать простой формат

Код
<haspformat format="sessioninfo"/> 
и получить ответ содержащий " <license> <license>perpetual</license> </license> </feature>

Код
<hasp_info> <feature> <featureid>16</featureid> <maxlogins>2</maxlogins> <concurrency> <export>network,display,local</export> <count>process</count> </concurrency> <vmenabled>true</vmenabled> <currentlogins>1</currentlogins> <license> <license>perpetual</license> </license> </feature></hasp_info> 
Кстати, обрати внимание на баг в Sentinel Runtime вызванный багом в документации - внезапно вместо правильной цепочки " <license> <license_type>perpetual</license_type > </license> </feature>" дважды вкладывается сам в себя тэг license
Страницы: 1 2 След.
Читают тему (гостей: 1)