Как лицензировать мое приложение на c #

2

Возможный дубликат:
Лицензия на настольное приложение С#

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

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

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

Я в хорошей дороге? Любые предложения?

  • 0
    Параграф 2 - используется онлайн и в офисе. Пункт 3 - проверьте, есть ли сериал в моем веб-сервисе. Я вижу проблему там ...
Теги:
web-services
licensing

2 ответа

1
Лучший ответ

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

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

public enum EncryptionAlgorithm { Des = 1, Rc2, Rijndael, TripleDes }; 

для каждого из методов и их деталей, см. Википедию. Алгоритм шифрования Rijndael был разработан для замены старого алгоритма DES. Подобно DES, это блок-шифр. Он использует 128-битные, 192-битные или 256-битные ключи и является хорошим выбором. В дальнейшем я буду предполагать, что вы не будете хранить ключ шифрования в коде (жестко закодированный), но поставляйте его в отдельный файл ( "ключ продукта" ); поэтому вы предоставите два файла лицензии ключ продукта, чтобы включить дешифрование и зашифрованный файл лицензии.

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

Затем вы используете "случайный" ключ, IV и выбранный метод шифрования для шифрования некоторого текста лицензии (который включает даты лицензии).

internal ICryptoTransform GetCryptoServiceProvider(byte[] bK, byte[] iVec){ ... }

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

Надеюсь, это поможет.

  • 1
    для каждого из методов и их деталей, см. Главный совет Wikipedia , полагая, что он затемнен.
  • 1
    @Killercam Я + ваш ответ, кстати, лучше, чем мое предложение. Мне было бы интересно услышать ваши мысли по этому связанному вопросу: stackoverflow.com/questions/8682525/… . Для настольных приложений я был бы рад использовать стороннее решение по лицензированию, однако у меня есть требование к кроссплатформенному лицензированному компоненту WPF SL и WP7. С уважением,
Показать ещё 4 комментария
1

Хотя это сильно зависит от ваших точных требований, целевой технологии (Winforms, WPF, Silverlight и т.д.), я бы предложил использовать сторонний компонент лицензирования, такой как Quick License Manager, Лицензирование Pro dotNet.

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

С уважением,

  • 0
    Использование стороннего решения означает, что взломщики уже сталкивались с «защитой» раньше и могут повторно использовать свои знания, чтобы взломать ваше приложение намного быстрее :)
  • 0
    Мудрый @ snemarch - также пункт, чтобы рассмотреть. Я полагаю, что это зависит от того, насколько хорошо ваше решение по-своему!
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню