Как предотвратить использование устаревших лицензий с помощью системных сбоев?
В настоящее время я работаю над менеджером лицензий с использованием java, я буду указывать дату начала и окончания моего приложения, чтобы я мог заставить лицензированного пользователя повторно лицензировать программу через определенное время.
Но проблема, с которой я столкнулся, заключается в том, что любой может откатить свою системную дату и время, чтобы сохранить действительность лицензии. Есть ли какой-либо способ в Java для определения системной даты и времени. Я уже пробовал Network Time Protocol для получения текущей даты и времени с сервера времени.
Ответы
Ответ 1
В принципе это невозможно сделать. Пользователь может "восстановить" весь свой компьютер, чтобы программное обеспечение считало его работу в любую конкретную дату.
Вы можете сделать это сложнее, дав программе запросить некоторое время-сервер на время. (Тем не менее, если кто-то действительно хотел использовать старую лицензию, он мог перенаправить любой такой трафик на локальный сервер времени.)
Похожие вопросы/ответы:
Ответ 2
Вероятно, вы храните файл лицензии в системе. a) включить время, когда программное обеспечение было зарегистрировано в файле лицензии, b) цифровая подпись файла.
Цифровая подпись сообщит вам, был ли изменен файл лицензии. Если нет, время покажет вам, когда было зарегистрировано программное обеспечение; если "текущее время" меньше зарегистрированного времени, ваш менеджер лицензий знает, что происходит что-то смешное, и он может ответить в соответствии (отказаться от запуска, удалить лицензию,...
Если вы действительно хотите использовать диапазон дат, напишите текущее время на выполнение каждой программы на отдельный файл с цифровой записью, подтвердив, что время всегда идет монотонно.
Вы также можете проверить свое последнее записанное время на любые файлы, которые приложение записывает, затем читает. Такой файл с датой позже вашего последнего записанного времени указывает на какой-то откат файлов лицензий.
Это не остановит пользователя от установки часов назад, но для него это будет довольно сложно сделать организованным образом.
Ответ 3
Как сказал @aioobe, приложения не имеют контроля над средой, в которой они работают.
Что вы можете сделать (если ваша программа также поддерживает данные, важные для ваших пользователей), это записывать то, что она знает о дате/времени и прохождении времени. Например, вы можете сохранить текущее время с регулярным интервалом после проверки того, что он не откат (когда обнаружен откат, вывести сообщение с зашифрованным кодом, чтобы передать вам релицензирование, чтобы вы знали, что это произошло).
Вы также можете сохранить "счетчик", который увеличивается каждый час, когда ваша программа запускается, давая вам другой способ оценить использование вашей лицензии.
Использование всех трех ваших лицензий истечет через год, откат или х часов.
Ответ 4
У вас есть несколько сценариев для борьбы:
- Пользователь, который возвращает свои системные часы перед установкой вашего продукта, и
- Пользователь, который откатывает свои системные часы после его установки.
Существует несколько уровней безопасности, и если это серьезная проблема, вы можете использовать их все.
Наиболее безопасным является проверка времени на внешнюю ссылку, например. ваш сервер. Если нет доступа к сети, вы можете использовать описанные выше локальные методы, используя локальные (скрытые) файлы, чтобы отслеживать время в системе, чтобы вы могли обнаружить откат. Используя более одного такого файла в нескольких местах и перекрестно проверяя друг друга, вы можете сделать это произвольно трудно откатить без обнаружения (и вы всегда можете периодически пытаться подключиться к внешнему серверу).
Ответ 5
Составьте свое приложение, чтобы отправить вам электронные письма с использованием сеанса пользователя и проверить время прибытия. Автоматизируйте мониторинг электронной почты! В противном случае вы становитесь рабом вашего успеха.
Хорхе