Как установить срок действия пробной версии моего программного обеспечения?

Мне нужно предложить пробный период для моего пользовательского программного обеспечения. У меня есть 64-разрядное приложение C#, в котором используются 64-разрядные многопроцессорные библиотеки DLL. Другие утилиты, которые должны быть включены, написаны на C++ (exes и dll). Я должен иметь возможность зашифровать код C#, настроить программу так, чтобы она работала только на определенной машине, и установить дату истечения срока действия, которая не может быть сорвана путем сброса часов машины.

Я оценил несколько решений с открытым исходным кодом и COTS: Infralution Licensing System, Protector и ExeShield, и это лишь некоторые из них. Ни один из них не удовлетворяет всем моим ограничениям.

Кто-нибудь знает о всеобъемлющем решении, которое я должен рассмотреть? Или мне нужно немного покопаться в реестре и применить его с помощью пользовательского кода?


person retrodrone    schedule 30.03.2011    source источник
comment
Если ваше программное обеспечение достаточно хорошее, базовое решение (например, то, что вы уже исследовали) сделает свое дело: люди скорее заплатят за него один раз, чем пройдут через массу обручей, чтобы заставить его работать.   -  person Mark B    schedule 30.03.2011
comment
Можете ли вы потребовать и подключение к Интернету?   -  person ctrlShiftBryan    schedule 30.03.2011
comment
Согласованный. В этом случае моему клиенту требуется строгий процесс оценки моего инструментария для измерения солнечной энергии. Я уверен, что они выберут мое решение, но мне все равно нужно защитить себя на случай, если они продолжат использовать его после пробного периода.   -  person retrodrone    schedule 30.03.2011
comment
Да, одно из решений, которые я исследовал, использует веб-службу для принудительного исполнения. Это верный вариант.   -  person retrodrone    schedule 30.03.2011
comment
@ctrlShiftBryant: Это может сработать, если убедиться, что никто не использует продукт до или после истечения срока его действия.   -  person Null Set    schedule 30.03.2011


Ответы (5)


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

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

Со случайным пиратством можно справиться с помощью простых напоминаний — ключей активации, ограничений по времени и т. д. С другой стороны, преднамеренное пиратство предотвратить практически невозможно. Как скажут вам Sony, Apple, Microsoft, Nintendo и ряд других компаний, даже если у вас есть возможность контролировать как аппаратное, так и программное обеспечение, ваша схема защиты будет нарушена. И человек, нарушающий его, скорее всего, делает это ради развлечения, а не ради желания получить бесплатное программное обеспечение. Таким образом, для определенной демографической группы усиление защиты не обескураживает их, а наоборот.

Между тем все, что вы делаете, чтобы добиться надежной защиты, заставляет законных пользователей лезть в ступор. Может быть, поездка по обнаружению махинаций с системными часами сработала из-за смены часовых поясов. Или, может быть, им пришлось заменить неисправный жесткий диск, процессор или что-то еще, и это привело к срабатыванию механизма клонирования системы. Или, может быть, Microsoft изменяет настройки безопасности Windows по умолчанию таким образом, что Windows выдает кучу предупреждений UAC, пока ваше приложение используется, из-за того, что оно не поддерживает какой-то трюк, который вы использовали, чтобы попытаться скрыть файл, в котором хранятся данные о лицензировании. На работе мы используем коммерческое решение, и мы обнаружили, что их механизм защиты может срабатывать таким образом, что из-за ошибки в программном обеспечении могут быть повреждены данные лицензии, что блокирует пользователя от программы. Из-за того, как их система хранит эти данные, это неисправимая ситуация - клиент буквально должен выбирать между тем, чтобы никогда больше не использовать это программное обеспечение на этом компьютере, и очисткой жесткого диска. Да, это было неоднократно. Да, мы потеряли много потенциальных доходов из-за этого. Да, меня тошнит при мысли об ущербе, который это наносит, потому что мы полагаемся в первую очередь на сарафанное радио, а это породило много плохих слухов. Короче говоря, наивная паранойя по поводу пиратства прошлых лет, вероятно, стоила мне немалого количества отпусков на Карибах.

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

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

person Sean U    schedule 30.03.2011
comment
аминь на это - отличное резюме. - person Rob Levine; 30.03.2011
comment
Хорошая редакция. Я согласен с выраженными вами чувствами. Однако мой начальник настаивает на формальной защите нашей интеллектуальной собственности. В этом случае я должен найти или внедрить шифрование и защиту пробного периода. Я определенно буду стремиться к простоте и элегантности, как вы отстаиваете. - person retrodrone; 30.03.2011
comment
наконец, кто-то, кто видит ценность пиратства. Я имею в виду, если вы не можете победить их, это все еще бесплатная реклама :) Неужели Microsoft действительно заботятся о пиратских лицензиях Windows? - person Ricardo Ferreira; 30.03.2011
comment
+1 Однако не все компании сталкиваются с этой проблемой. Возьмем, к примеру, BlackBerry. Никогда не был скомпрометирован. - person J T; 30.03.2011
comment
@retrodon: Я понимаю необходимость осчастливить начальство. Рассматривали ли вы для шифрования критический IP-адрес в отдельной сборке, зашифрованной и встроенной в исполняемый файл? Затем вы можете расшифровать и загрузить его во время выполнения, не беспокоясь о коммерческом предложении. На самом деле это не так уж и безопасно, поскольку в конце концов вам все равно придется хранить этот ключ шифрования где-то на компьютере пользователя. Но он достигает уровня запутывания, которого может быть достаточно, чтобы порадовать руководство. - person Sean U; 30.03.2011
comment
Только подумайте об этих проклятых антипиратских рекламных роликах DVD, которые вы вынуждены смотреть — вот почему большинство людей копирует DVD. Я много видел об этом, и ответ @sean отличный. - person CAD bloke; 05.10.2016
comment

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

Шифрование — http://xheo.com/products/code-protection Лицензия — http://xheo.com/products/copy-protection

person CrazyDart    schedule 30.03.2011
comment
Спасибо за предложение. Я смог победить пробную версию, просто переведя часы на своей машине вспять. Кроме того, он не мог обрабатывать мою dll Any CPU в сочетании с 64-битным исполняемым файлом. - person retrodrone; 30.03.2011
comment
просто добавьте проверку времени и поместите ее в реестр, при следующем запуске приложения, если время меньше, чем при предыдущем запуске приложения, оно отключит себя навсегда. - person CrazyDart; 30.03.2011
comment
хорошо, если у вас действительно есть одна цель, это то, что я делал в прошлом ... вы получаете имя машины и серийный номер жесткого диска ... объединяете их и хешируете MD5. Попросите их отправить вам MD5, и вы сможете сгенерировать код активации, который зашифрован с использованием MD5. Зашифрованный текст будет содержать дату и время создания и истечения срока действия лицензии. Каждый раз, когда приложение запускается, имя машины и серийный номер хэшируются для расшифровки информации о лицензии... также поместите текущую дату/время в тот же файл, зашифрованный с помощью этого MD5, а затем проверьте его. - person CrazyDart; 30.03.2011
comment
Хороший. Спасибо за предложение. - person retrodrone; 30.03.2011
comment
Я согласен с @Sean U, поскольку я был в такой ситуации, но я также был в такой же ситуации, как и вы. Я писал программное обеспечение для компании, которая была печально известна тем, что заключала сделки, согласно которым они просто купят одну лицензию прямо сейчас, а через несколько месяцев они купят еще несколько... но затем они просто скопируют программное обеспечение на другие системы. Поэтому я применил к ним описанный выше метод, и он сработал очень хорошо. Большинство пользователей бизнес-уровня могут взломать даже простую защиту ... так что на один раз это хороший способ. - person CrazyDart; 31.03.2011

Почему бы просто не использовать время из интернет-источника, например www.time.gov? Вы можете добавить приложение Qt на C++ и использовать их библиотеку QtWebKit, http://doc.qt.nokia.com/4.7/qtwebkit.html, чтобы загрузить время. (На самом деле я никогда не делал ничего подобного, но глядя на документацию, это выглядит многообещающе.) При первом запуске программы вы создаете небольшой файл с меткой времени или, для еще большей безопасности, записываете метку времени в program-essential dll и перекомпилируйте ее. Это проверяется каждый раз при запуске программы. Если они не подключены к Интернету, вы предупреждаете их несколько раз, но в конечном итоге прерываете загрузку.

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

person Matt Phillips    schedule 30.03.2011

Как его можно сохранить таким образом, чтобы его нельзя было восстановить? Записи реестра и файлы могут быть удалены. Альтернативные потоки данных не копируются в zip-файл, поэтому, если вы знаете файл, содержащий ADS, содержащий данные об установке программного обеспечения (который используется для ссылки на текущее время для расчета дней с момента установки), вы можно просто сжать его в zip-файл, затем снова распаковать и до свидания со ссылкой на дату установки. Сохраните его как необработанные данные на жестком диске (не указанный в таблице размещения файлов как файл), и он будет перезаписан при сохранении файла в этом месте на жестком диске.

Поэтому я буквально не вижу способа сделать невозможным удаление даты пробной установки для защиты от копирования. Это просто невозможно сделать.

person Videogamer555    schedule 01.02.2012

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

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

person Thomas Matthews    schedule 30.03.2011