Я пытаюсь создать систему лицензирования на основе подписки, в которой, если вы покупаете программное обеспечение для пользователя 1 год, вы можете использовать его только в течение года на компьютере, на котором вы использовали его для активации, после чего вам придется продлевать лицензию. ключ. Это довольно просто, но реализация того же самого — совершенно другой сценарий.
Итак, позвольте мне обсудить, что я сделал до сих пор: (Код не включен, дайте мне знать, если вы хотите, чтобы я их вставил)
Сначала у меня есть размещенная база данных MySQL, в которой у меня есть база данных, в которой хранится вся информация, связанная с лицензией (продукты, serial_keys, планы и т. Д.)
Таким образом, когда вы запускаете программное обеспечение в первый раз, оно проверяет несколько значений в реестре (несколько мест), если оно не найдено, оно запрашивает у вас серийный ключ.
После того, как вы ввели серийный ключ, программное обеспечение должно подключиться к БД и подтвердить ваш ключ и вычислить следующее
Здесь пропущено несколько логических шагов, например, если лицензия уже активирована, проверьте и сопоставьте зарегистрированный machine_id
Таким образом, программное обеспечение зарегистрировано. Теперь я каждый раз, когда программное обеспечение запускается, он снова ищет эти значения в реестре и принимает решение на его основе, вот где я застрял и нуждаюсь в вашем экспертном совете.
Учитывая, что у пользователя нет интернета, и он использовал его один раз для активации, или у него истек срок действия интернет-плана, как я могу сделать законную проверку на дату? Не могу использовать системное время, они очень уязвимы.
На данный момент я думаю о создании службы, которая будет иметь функцию обратного вызова, которая будет действовать всякий раз, когда пользователь пытается изменить системную дату. Но это утомительно, и я полагаю, не лучшее решение.
Или запишите системное время при загрузке и зависят от этого, но тогда пользователь может изменить его через BIOS даже до загрузки системы.
Извините за такой длинный вопрос, но пришлось объяснить весь сценарий.
Короче говоря, у пользователя нет подключения к Интернету, как сохранить или получить законный источник для вызовов даты / времени?
Вы можете сделать несколько вещей, хотя вы никогда не получите 100% доказательства дурака.
Самым простым, вероятно, будет просто требуется подключение к интернету. Но мы видели, насколько хорошо это было получено с XBox и другими игровыми компаниями.
Если вы не можете рассчитывать на подключение к Интернету для проверки, вы можете наблюдать за «подозрительной» деятельностью. Например, ведите учет времени последнего запуска приложения. Если по какой-то причине системные часы сообщают о времени до последнего записанного времени выполнения, то предлагают пользователю установить подключение к Интернету и подтвердить его.
Имейте в виду, что могут быть законные причины, по которым пользователь переводит свои часы назад. Переход на летнее время один. Возможно, используйте пороговое значение, например, игнорируйте время, установленное на час или день или что-то еще
Вы можете сделать следующую процедуру:
Хотя этот метод не является точным, он может защитить вас от неправильного использования вашей программы.
Обратите внимание: если программа будет подключена к Интернету, вы можете восстановить всю информацию о правильном истекшем времени в зашифрованном файле.
Извините за мой английский!
У нас уже есть алгоритм списка, я не буду его повторять, он решает проблему, теперь проверка BIOS, нам просто нужно убедиться, что он не вернется. То, что каждый раз, когда программа запускается, мы записываем текущее время, если пользователю нужно двунаправить лицензию, ему нужно установить свою, которая, если он делает программу после установки, может обнаружить это.
Теперь, если пользователь изменит время BIOS до установки, у нас все будет в порядке, потому что программа будет считать это правильным временем и рассчитает год с этого времени.