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

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

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

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

10 ответов

Решение

Я бы посоветовал вам взять необходимую информацию в ключе и хешировать ее с помощью 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, поэтому контрольная сумма не пройдет.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам