Вы можете сделать что-то вроде создания записи, которая содержит данные, которые вы хотите аутентифицировать в приложении. Это может включать в себя все, что вы хотите - например, Возможности программы для включения, срок действия, имя пользователя (если вы хотите привязать его к пользователю). Затем зашифруйте это, используя некоторый криптоалгоритм с фиксированным ключом или хэшируйте его. Тогда вы просто проверяете это в своей программе. Один из способов распространения файла лицензии (в Windows) - предоставить его в виде файла, который обновляет реестр (избавляет пользователя от необходимости его набирать).
Однако остерегайтесь ложного чувства безопасности - рано или поздно кто-то просто исправит вашу программу, чтобы пропустить эту проверку, и распространит исправленную версию. Или же они выработают ключ, который пройдет все проверки и распространят его, или поставят время назад и т. Д. Неважно, насколько сложным вы создадите свою схему, все, что вы сделаете для этого, в конечном итоге будет защищено через мрак, и они всегда будут быть в состоянии к этому. Даже если они этого не сделают, кто-то сделает это и распространит взломанную версию. То же самое относится и к тому, что вы поставляете ключ - если кто-то захочет, он тоже может проверить чек на это. Цифровая подпись вашего кода не поможет, они могут удалить эту подпись или отказаться от нее.
Вы можете немного усложнить ситуацию, используя методы, предотвращающие запуск программы в отладчике и т. Д., Но даже это не является пуленепробиваемым. Так что вам просто нужно сделать это достаточно сложно, чтобы честный пользователь не забыл заплатить. Также будьте очень осторожны, чтобы ваша схема не стала навязчивой для платящих пользователей - лучше иметь несколько сорванных копий, чем для ваших платящих клиентов, чтобы они не могли использовать то, за что они заплатили.
Другой вариант - провести онлайн-проверку - просто предоставьте пользователю уникальный идентификатор, проверьте в Интернете, какие возможности должен иметь этот идентификатор, и кешируйте его в течение некоторого периода времени. Тем не менее, применяются все те же предостережения - люди могут обойти все что угодно.
Учитывайте также расходы на поддержку, связанные с работой с пользователями, которые забыли свой ключ и т. Д.
edit: Я просто хочу добавить, не тратьте слишком много времени на это и не думайте, что каким-то образом ваша запутанная схема будет другой и нерушимой. Это не будет и не может быть до тех пор, пока люди контролируют оборудование и ОС, на которых работает ваша программа. Разработчики пытались придумать все более сложные схемы для этого, полагая, что если они разработают свою собственную систему для нее, то она будет известна только им и, следовательно, «более безопасна». Но это действительно программный эквивалент попытки создать вечный двигатель. : -)