2010-03-23 2 views
1

Я пытаюсь решить, как реализовать очень основное решение для лицензирования для некоторого программного обеспечения, которое я написал. Программное обеспечение будет работать на моих (гипотетических) клиентских компьютерах, при этом идея заключается в том, что программное обеспечение немедленно покинет (с дружеским сообщением), если клиент запускает его на более чем n машинах (n - количество лицензий, которые они купили). Кроме того, клиенты не являются технически подкованными до такой степени, что «базовый» достаточно хорош.Идеи для рудиментарной реализации лицензирования программного обеспечения

Вот мой текущий дизайн, но учитывая, что я практически не имею опыта в этой теме, я хотел бы спросить SO, прежде чем я начал любое развитие на нем:

  • Удаленный сервер хозяйничает базу данных MySQL с таблица, содержащая два столбца: клиентский ключ и количество лицензий
  • Клиентское приложение подключается к базе данных MySQL при запуске, предлагая клиенту-ключ, который я поместил в файл свойств, упакованный в дистрибутив (я бы создал новый дистрибутив для каждого нового клиента)
  • Скорее всего, мне понадобится вторая таблица для хранения va истории событий, так что с некоторой короткой логикой программное обеспечение может решить, может ли он работать на данной машине (возможно, скользящее окно из n машин с использованием программного обеспечения в течение 24 часов)
  • Если программное обеспечение не может установить соединение с MySQL или решает, что это за n разрешенных машин в день, он закрывается
  • Информация о подключении удаленного сервера, на котором размещена база данных MySQL, должна быть жестко закодирована в приложении? (Это похоже на плохую идею, но в противном случае они могли бы указать ее на какой-то другой сервер, всегда проверяемый на успех)

Я думаю, что об обложках моего первоначального дизайна. Цель состоит в том, что, хотя это, безусловно, не является полным доказательством, я думаю, что я сделал это, по крайней мере, несколько сложно, чтобы создать легкорастворимое решение для взлома. Кроме того, я могу легко настроить количество лицензий для данной пары клиент/ключ.

Мне нужно, чтобы это было сделано миллион раз раньше, так что расскажите мне о лучшем решении, которое так же просто реализовать и обеспечивает тот же (низкий) уровень безопасности. В случае использования внешних библиотек я предпочитаю Java, так как это то, что было написано в программном обеспечении.

ответ

5

Я бы предположил, что это, вероятно, не стоит проблем. Клиенты могут быть не такими технически подкованными, но если это стоит того, они будут взламывать его, и если это не так, они не будут использовать ваше программное обеспечение в любом случае.

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

Откровенно говоря, в первый раз возникнут проблемы, они, вероятно, будут работать, либо им не нравится программное обеспечение, достаточное для его использования, либо они будут работать над тем, как обойти систему. Даже если конечные пользователи не являются технически подкованными, у них, вероятно, будет внутренняя техническая поддержка, кто будет.

Я бы не тратил ваше время на это. Если вам нужна система управления лицензиями - используйте профессиональный. В противном случае, работа над доверием и разумными юридическими условиями.

+1

Я думаю, вы убедили меня заставить наш проект принять решение о не лицензировании или оплате решения стороннего поставщика. Спасибо за совет! – Ross

3

Я советую не реализовывать такие схемы. Что делать, если ваш клиент будет иметь некоторые проблемы с подключением или ваша база данных MySQL снизится. В конечном итоге вы будете разочарованы.

Однако, если вы собираетесь реализовать такую ​​схему вот несколько советов:

  1. Не делайте ваши ключи последовательно, либо генерировать случайные ключи, или сделать что-то вроде Е (K, H (ClientId + licenseID)), где E - функции шифрования, K - это секретный ключ, а H - хеш-функция.

  2. Если вы беспокоитесь о том, чтобы указывать приложение на какой-либо валидатор всегда, тогда вы предполагаете, что они достаточно разбираются в технологии. Итак, что помешало бы им просто перенаправить все соединения с вашим сервером на один и тот же сервер только для проверки, используя что-то вроде IPTABLES на своем исходящем маршрутизаторе или изменив их файл/etc/hosts. Наличие жестко закодированного статического IP предполагает, что ваш сервер никогда не будет двигаться. Что делать, если вы решили изменить ISP. Кроме того, даже если вы не ISP, иногда перефинируете свои сети по разным причинам.

  3. Чтобы избежать проблем, указанных в № 2, вы должны реализовать какую-то систему ответа на вызов. Клиент делает отправку случайной строки на ваш сервер вместе с данными лицензии и делает сервер шифрования или хеш с некоторыми известными ключами. Еще лучше использовать схему открытого ключа для него.

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

+1

Все действительные баллы. Общая идея, которую я получаю от этих ответов: не стоит, если я не знал, что я делаю, когда речь заходит о лицензировании решений;) – Ross

1

Главное, чтобы я беспокоился о том, что здесь: (a) Что делать, если клиент хочет работать, не подключившись к Интернету? Возможно, ваше приложение по своей сути требует подключения к Интернету для выполнения значимой работы. Но если нет, возможно ли, что один из ваших клиентов захочет запустить приложение на ноутбуке в дороге или какие-либо другие обстоятельства, когда интернет-соединение недоступно? Или, может быть, их связь сейчас просто снижается. И т. Д.

(b) Что делать, если ваш сервер проверки не работает? Я очень разозлился, когда функции борьбы с пиратством запутались и помешали мне использовать программное обеспечение, когда я полностью легален, и я слышал подобные жалобы от многих других.

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

Насколько велика проблема, которую вы ожидаете от пиратства? Является ли ваше приложение тем, что большинство клиентов, скорее всего, будут использовать одну или две копии или, вероятно, захотят? Если первое, все дополнительные усилия могут не стоить того. Если последнее, другая история.

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

Одна из идей, которую я пробовал однажды, заключалась в том, чтобы настроить сервер проверки, как вы описываете, но скажите, что если попытка подключения не удалась, мы запустим ее и отпустим, и только заблокируем доступ, если какой-то период времени - я думаю это была неделя - проходит, не имея возможности установить соединение. Таким образом, временные перерывы в сети не причиняют неудобства пользователю.

Короткий ответ: Ваша идея должна работать, но имеет потенциальные уловы.

+1

У программного обеспечения действительно должно быть соединение, которое будет использоваться вообще. Моя забота - это то, что происходит, когда машина, на которой запущена лицензия MySQL db, по какой-то причине падает. Я думаю, что потенциальные продажи, потерянные для пиратства, являются меньшим злом по сравнению с головной болью по осуществлению моего собственного лицензирования. – Ross

+0

Другая мысль: Насколько вероятна пиратство? Если вы продаете видеоигру, откровенно говоря, вероятность того, что клиенты сделают копии для своих друзей и т. Д. Если ваши основные клиенты являются крупными корпорациями, они обычно не будут рисковать юридическими проблемами, которые возникнут, если они пойманный, чтобы сэкономить несколько долларов на юридической копии. – Jay

Смежные вопросы