Лицензирование оценки программного обеспечения [закрыто]

StackOverflow https://stackoverflow.com/questions/49662

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

Что мне интересно, так это какой хороший способ сгенерировать лицензионный ключ с другой встроенной в него информацией, такой как дата истечения срока действия лицензии, MAC-адрес и различные ограничения программного обеспечения?

Это было полезно?

Решение

Я бы посоветовал вам взять фрагменты информации, которые вы хотите получить в ключе, и хэшировать их с помощью md5, а затем просто взять первые X символов (где X - длина ключа, которую вы считаете управляемой).

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

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

Проще всего было бы создать ключевой файл, подобный этому...

# License key for XYZZY
expiry-date=2009-01-01
other-info=blah
key=[md5 has of MAC address, expiry date, other-info]

Другие советы

Я использовал как FLEXlm от Macrovision (ранее Globetrotter), так и более новый RLM от Reprise Software (как я понимаю, написанный оригинальными авторами FLEXlm).Оба могут отключать либо MAC-адрес, либо физический ключ, могут быть либо привязаны к узлу (привязаны только к одной машине), либо "плавающие" (любая авторизованная машина в сети может получить лицензию, выдаваемую центральным сервером лицензий, вплоть до максимального количества одновременно извлекаемых копий, определяемого суммой, за которую они были оплачены).Существует множество гибких способов его настройки, включая сроки годности, отдельные сублицензированные функции и т.д.Интеграция в приложение не очень сложна.Это только те два, которые я использовал, я уверен, что есть и другие, которые справляются с этой работой так же хорошо.

Эти программы легко взламываются, что означает, что существуют известные эксплойты, которые позволяют людям либо обходить безопасность вашего приложения, которое их использует, либо сокращая свои собственные лицензии, чтобы подделать сервер лицензий, либо просто исправляя ваш двоичный файл, чтобы обойти проверку лицензии (по сути, заменяя вызов подпрограммы в их библиотеке кодом, который просто говорит "верните 'true'".Все гораздо сложнее, но именно к этому все в основном и сводится.Вы увидите взломанные версии вашего продукта, размещенные на различных сайтах Warez.Это может быть очень неприятно и деморализующе, тем более что они часто заинтересованы в крекинге ради крекинга и даже не имеют никакого представления о вашем продукте или о том, что с ним делать.(Это очевидно, если у вас есть достаточно специализированная программа.)

Из-за этого некоторые люди скажут, что вам следует написать свой собственный, возможно, даже часто менять схему шифрования.Но я не согласен.Это правда, что внедрение ваших собственных означает, что известные эксплойты против FLEXlm или RLM не будут мгновенно работать для вашего приложения.Однако, если вы не являетесь абсолютным экспертом в области такого рода безопасности (которым вы явно не являетесь, иначе вы бы не задавали этот вопрос), весьма вероятно, что по своей неопытности вы в конечном итоге напишете гораздо менее безопасную и более поддающуюся взлому схему, чем лидеры рынка (какими бы слабыми они ни были).

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

Не каждый может принять такое дзен-отношение.Некоторые люди не могут спать по ночам, зная, что кто-то где-то получает что-то даром.Но постарайтесь научиться справляться с этим.Вы не можете остановить пиратов, но вы можете сбалансировать свое время / усилия / расходы, пытаясь остановить все пиратство, и сделать свой продукт лучше для пользователей.Помните, иногда самые пиратские приложения также являются самыми популярными и прибыльными.Удачи и приятных снов.

Мы использовали следующий алгоритм в моя компания в течение многих лет без единого инцидента.

  1. Определите, какие поля вы хотите использовать в коде.Соберите как можно больше битков.Например, датами может быть "количество дней с 2007 года", и тогда вам сойдет с рук 16-битное значение.
  2. Добавьте дополнительное поле "контрольная сумма".(Через секунду вы поймете, почему.) Значение этого поля является контрольной суммой упакованных байтов из других полей.Мы используем "первые 32 бита из MD5".
  3. Зашифруйте все, используя ЧАЙ.В качестве ключа используйте что-то, что идентифицирует клиента (например,название компании + личный адрес электронной почты), таким образом, если кто-то хочет разместить ключ в Интернете, он должен указать свою контактную информацию обычным текстом.
  4. Преобразуйте шестнадцатеричное значение в строку каким-нибудь разумным способом.Вы можете использовать прямые шестнадцатеричные цифры, но некоторым людям нравится выбирать другой набор из 16 символов, чтобы сделать его менее очевидным.Также регулярно добавляйте тире или что-то еще, чтобы было легче читать по телефону.

Чтобы расшифровать, преобразуйте шестнадцатеричное значение в строку и расшифруйте с помощью TEA.Но есть еще один дополнительный шаг:Вычислите свою собственную контрольную сумму полей (игнорируя поле контрольной суммы) и сравните с заданной контрольной суммой. Это шаг, который гарантирует, что никто не подделает ключ.

Причина в том, что TEA полностью смешивает биты, поэтому, если хотя бы один бит будет изменен, все остальные биты с равной вероятностью изменятся во время расшифровки TEA, поэтому контрольная сумма не будет передана.

Это можно взломать?Конечно!Почти все так и есть, но это достаточно жестко и просто в реализации.

Если привязки к контактной информации недостаточно, то включите поле для "Идентификатора узла" и заблокируйте его на MAC-адрес или что-то подобное, что вы предлагаете.

Не используйте MAC-адреса.На некоторых аппаратных средствах, которые мы тестировали, в частности на некоторых планшетах IBM Thinkpad, MAC-адрес может изменяться при перезагрузке.Мы не утруждали себя расследованием почему так оно и было, но мы довольно рано научились в ходе нашего исследования не полагаться на это.

Обязательный отказ от ответственности и подключаемый модуль:компания, соучредителем которой я являюсь, производит Решение для лицензирования OffByZero Cobalt.Поэтому, вероятно, вас не удивит, если вы услышите, что я рекомендую передать лицензирование на аутсорсинг и сосредоточиться на ваших ключевых компетенциях.

Серьезно, этот материал довольно сложно исправить, и последствия неправильного использования могут быть весьма плачевными.Если вы продаете по низкой цене, несколько пиратских копий могут серьезно снизить ваш доход, а если вы продаете по низкой цене, у warez d00dz есть стимул взломать ваше программное обеспечение ради удовольствия и репутации.

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

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

  • получите хорошую стороннюю систему лицензирования
  • дополните свой код проверками, содержащимися в области видимости (например,ни одна глобальная переменная, подобная fIsLicensed, не проверяет статус функции рядом с кодом, реализующим эту функцию)
  • используйте серьезную путаницу в случае кода .NET или Java

Компания, в которой я работал, на самом деле использовала usb-ключ.Это было удобно, потому что:

  • Наше программное обеспечение также было установлено на эту флешку
  • Программа запустится только в том случае, если она найдет (уникальный) аппаратный ключ (он есть у любого стандартного USB-ключа, поэтому вам не нужно покупать что-то особенное, подойдет любая флешка).
  • он не был ограничен компьютером, но при желании мог быть установлен в другой системе

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

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

Это тоже далеко от совершенства, но может продержаться некоторое время.

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

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

Если ваше приложение стоит того, чтобы платить деньги за него, люди это сделают.

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

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

Шестнадцатеричное форматирование, криптография с эллиптическими кривыми и любой из алгоритмов шифрования, таких как AES / Rijndael, DES, Blowfish и т.д.Они отлично подходят для создания лицензионных ключей.

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

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

Моим фаворитом до сих пор было License Vault от SpearmanTech, но я также пробовал FlexNet (дорого), XHEO (требуется слишком много программирования) и SeriousBit Ellipter.

В конце концов я выбрал продукт License Vault, потому что я получил бы его намного дешевле, чем другие, и он просто мог предложить мне больше, поскольку мы выполняем большую часть нашей работы в .NET 3.5.

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

В общем, я перенял практику создания очень простой системы, которая позволяет честным людям оставаться честными.Любой, кто действительно хочет украсть ваше программное обеспечение, найдет способ обойти любую DRM-систему.

В прошлом я использовал Armadillo (теперь Software Passport) для проектов на C ++.В настоящее время я использую XHEO для проектов на C #.

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

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

Мы использовали: http://www.aspack.com/asprotect.aspx

Мы также используем вызов функции в их продукте sdk, который дает нам уникальный идентификатор для машины.

Хорошая компания, хотя явно не носители английского языка, поскольку их первый продукт назывался "ASPack".

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top