Система лицензирования с датой истечения срока действия

Я хочу внедрить простую систему лицензирования на основе Эта статья.

Все отлично работает Но сейчас я хочу добавить срок годности и не знаю как.

Может кто-нибудь объяснить мне, как добавить срок годности? Не важно точно знать, как реализовать, но мне нужно понять алгоритм, стоящий за ним 🙂

2

Решение

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

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

Как уже говорили другие, легко потратить много сил на то, чтобы сделать это трудно взломанным, но рано или поздно все сводится к простому сравнению: «Это в дате или нет?», И этот код всегда может быть « сломано «путем замены if (!in_date) exit_with_message("License expired..."); Ith if (false) ..., Таким образом, если вы не сделаете такого рода вещи в сотнях разных мест и не заставите код выглядеть по-разному в каждом месте [не вызывайте одну и ту же функцию, не используйте одно и то же сообщение, не используйте один и тот же расчет, не используйте тот же результат, и т. д., и т. д.]

Я хотел использовать компилятор, который мы использовали на работе на моей домашней машине [для выполнения некоторых связанных с работой проектов из дома!]. В него встроена «демо-лицензия», так что вы можете попробовать ее, но она остановилась после 10000 строк исходного кода. Поэтому я искал все вхождения 10000 в двоичном виде. Я думаю, что было три места, которые содержали 10000. Я изменил одно, попытался скомпилировать мой тестовый образец из более чем 10000 строк, и он все еще не удался — изменил его обратно и изменил следующий: wohoo, он работал … Теперь, Кодер мог бы сделать это намного сложнее, но если бы я был достаточно заинтересован, я уверен, что мог бы это исправить. Это было намного проще, чем получить вторую лицензию, установить сервер лицензий на моем домашнем компьютере и т. Д. И т. Д.

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

Редактировать:

Я бы сделал что-то вроде этого:

1) Создайте файл license.dat, который содержит:

  • Номер лицензии какой-то.
  • Срок годности (несколько зашифрованный)
  • Криптографический хеш двух вышеуказанных компонентов)

2) При загрузке программного обеспечения [или через определенные промежутки времени в вашем программном обеспечении] загрузите файл license.dat.

3) Проверьте хеш файла лицензии.

4) Проверьте, больше ли текущая дата, чем дата окончания срока действия.

5) Если все проверки пройдены, продолжите, иначе выйдите с некоторым соответствующим сообщением.

Как именно вы храните / шифруете дату, я не могу посоветовать. Одним из вариантов является 64-разрядное целое число, которое было соответствующим образом «скремблировано» на основе time_t (время в секундах). Шифрование, вероятно, в большей степени означает «не делайте так чертовски очевидным, что это временная метка», но хеш действительно защищает вашу временную метку.

5

Другие решения

Других решений пока нет …