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

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

Итак, позвольте мне обсудить, что я сделал до сих пор: (Код не включен, дайте мне знать, если вы хотите, чтобы я их вставил)

Сначала у меня есть размещенная база данных MySQL, в которой у меня есть база данных, в которой хранится вся информация, связанная с лицензией (продукты, serial_keys, планы и т. Д.)

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

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

  1. Подтвердите серийный ключ
  2. Вычислите уникальный идентификатор машины — выберите BIOS_SL, MB_SL, HDD_SL, сложите их в одну строку и MD5.
  3. Вычислить срок действия лицензии — Получить Интернет Текущее время, Увеличить год с продолжительностью плана
  4. Сохраните следующую информацию в реестре (несколько местоположений) — license_id, machine_id, valid_till, активации_date, last_updated & license_status

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

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

  1. Программное обеспечение запускается
  2. Проверяет значения реестра
  3. Генерирует machine_id и сопоставляет его с сохраненным
  4. Считывает значение valid_till (срок действия) и сопоставляет его с текущим временем.

Учитывая, что у пользователя нет интернета, и он использовал его один раз для активации, или у него истек срок действия интернет-плана, как я могу сделать законную проверку на дату? Не могу использовать системное время, они очень уязвимы.

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

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

Извините за такой длинный вопрос, но пришлось объяснить весь сценарий.

Короче говоря, у пользователя нет подключения к Интернету, как сохранить или получить законный источник для вызовов даты / времени?

3

Решение

Вы можете сделать несколько вещей, хотя вы никогда не получите 100% доказательства дурака.

Самым простым, вероятно, будет просто требуется подключение к интернету. Но мы видели, насколько хорошо это было получено с XBox и другими игровыми компаниями.

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

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

2

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

Вы можете сделать следующую процедуру:

  1. при запуске программы вы должны сохранить текущее время и сохранить его в
    зашифрованный файл. В первый раз t0 (первое выполнение sw) этот файл
    должен содержать нулевое значение времени. Обратите внимание, что этот файл должен быть обязательным. Если
    текущее время является вторым по сравнению с последним сохраненным временем (аномальное
    ситуация) увеличьте ваше прошедшее время следующим образом: last_time + = last_time —
    Текущее время;
  2. во время выполнения программы проследите, сколько времени прошло, добавив время
    хранится в зашифрованном файле (вы можете использовать функцию «time ()»). Делать
    некоторые проверки во время выполнения программы: истекшее время должно быть
    несовершеннолетний лицензионного времени. Это полезно, если программа всегда
    в течение периода, превышающего срок действия лицензии
  3. Перед закрытием программы необходимо обновить информацию о времени в зашифрованном файле (1)

Хотя этот метод не является точным, он может защитить вас от неправильного использования вашей программы.

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

Извините за мой английский!

1

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

Теперь, если пользователь изменит время BIOS до установки, у нас все будет в порядке, потому что программа будет считать это правильным временем и рассчитает год с этого времени.

1
По вопросам рекламы [email protected]