Как предотвратить использование лицензии с истекшим сроком действия путем подделки системных часов?

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

Но проблема, с которой я сталкиваюсь, заключается в том, что любой может откатить дату и время своей системы, чтобы сохранить действительность лицензии. Есть ли способ в Java определить, что системная дата и время изменены. Я уже пробовал Network Time Protocol, чтобы получить текущую дату и время с сервера времени.


person Lalchand    schedule 13.06.2011    source источник
comment
Ни один DRM не защитит вас от пиратов. Я лучше потрачу свою энергию на менее бесполезные вещи.   -  person Paul Manta    schedule 13.06.2011


Ответы (5)


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

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

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

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

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

person Ira Baxter    schedule 13.06.2011
comment
Но если программа закрыта, то как она будет отслеживать дату или вставлять дату в конкретный файл. - person Md. Naushad Alam; 30.09.2014
comment
Почему это должно быть? Он записывает файл лицензии один раз при установке программы. После этого файл лицензии не меняется. (Если пользователь подменяет или удалит файл лицензии, программное обеспечение перестанет работать, поэтому он не будет этого делать, если он умный). - person Ira Baxter; 30.09.2014

С этим в принципе невозможно что-либо сделать. Пользователь может «восстановить» весь свой компьютер, чтобы программа думала, что он работает в любую конкретную дату.

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

Похожие вопросы/ответы:

person aioobe    schedule 13.06.2011
comment
я уже пробовал NTP, что делать, если пользовательский брандмауэр блокирует доступ к серверу времени - person Lalchand; 13.06.2011
comment
Без подключения к Интернету я не верю, что есть идеальное решение. Подумайте об этом так: если пользователь управляет часами компьютера и всем вводом/выводом, вы не сможете отличить вчерашний день от сегодняшнего. Что, если пользователь переведет время вспять, восстановит образ жесткого диска со вчерашнего дня и реплицирует весь ввод/вывод, как если бы он был виден накануне. - person aioobe; 13.06.2011

Как сказал @aioobe, приложения не контролируют среду, в которой они работают.

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

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

При использовании всех трех ваша лицензия истечет через год, откат или x часов работы.

person rsp    schedule 13.06.2011
comment
Но даже этот метод, чтобы взломать все, что вам нужно сделать, это выяснить, где хранится эта информация, скопировать ее после новой установки и время от времени вставлять поверх «обновленной» информации. - person Paul Manta; 13.06.2011
comment
.. или просто восстановить весь раздел в предыдущее состояние с помощью любой программы для резервного копирования. - person aioobe; 13.06.2011
comment
@aiobe Это немного перебор. :П - person Paul Manta; 13.06.2011
comment
@aioobe, вот почему я сказал, поддерживает ли ваша программа данные, которые важны для ваших пользователей. Если приложение не имеет состояния, восстановление системы снова запустит его. Если приложение находится в состоянии с полным состоянием, восстановление может/отменит вашу собственную работу, которая нежелательна. Так что смешайте ваши лицензионные данные с данными клиентов. - person rsp; 13.06.2011
comment
@rsp: (при обнаружении отката вывести сообщение с зашифрованным кодом для передачи вам .. Хорошо, поэтому я использую это программное обеспечение на своем ноутбуке глубоко за полярным кругом (без доступа к «WiFi») & измените часы, чтобы увидеть. Пожалуйста, свяжитесь с полным bstar для новой лицензии - программное обеспечение заблокировано !? Почему этот ответ получил 4 голоса? Это больше *зло, чем ключ. :-( - person Andrew Thompson; 13.06.2011
comment
@Paul, нет, если программа запутана, шифрует состояние счетчика и каким-то неприятным образом объединяет его в том же файле, зависящем от приложения. - person aioobe; 13.06.2011
comment
@Эндрю, любая проверка отката, конечно, должна допускать некоторые корректировки часов. В зависимости от последствий блокировки вы можете определить льготный период, в течение которого ключ разблокировки может быть предоставлен по телефону. - person rsp; 13.06.2011

У вас есть несколько сценариев для борьбы:

  1. Пользователь, который переводит свои системные часы вспять перед установкой вашего продукта, и
  2. Пользователь, который откатывает системные часы после их установки.

Существует несколько уровней безопасности, которые вы можете применить, и если это является серьезной проблемой, вы можете использовать их все.

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

person Dominic    schedule 14.06.2011

Закодируйте свое приложение, чтобы отправлять вам электронные письма с использованием сеанса пользователя и проверять время прибытия. Автоматизируйте мониторинг электронной почты! В противном случае вы станете рабом своего успеха.

Хорхе

person jorge sampaio    schedule 27.02.2015
comment
Если бы я узнал, что приложение отправляет электронные письма без моего разрешения, я бы не только удалил его, я вполне мог бы отправить несколько неприятных электронных писем, чтобы пожаловаться на него. - person Amos M. Carpenter; 27.02.2015