Windows: надежный способ узнать, прошла ли определенная дата? - PullRequest
1 голос
/ 19 июля 2010

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

Каковы стандартные способы сделать это?

Один из предложенных способов - проверить, есть ли файлы, которые были изменены после проверенной даты. это звучит хорошо, но какие файлы я должен проверить? Очевидно, что я не хочу начинать случайное перемещение по диску пользователя.

Редактировать - Я бы хотел избежать сетевого решения.

Ответы [ 7 ]

2 голосов
/ 19 июля 2010

Я читаю между строк. Я думаю, что вы хотите сделать "пробную версию". Тем более, что вы упоминаете «взлом».

Лучшее не сетевое решение, которое я могу себе представить для дат «пробного периода», - не беспокоиться об абсолютной дате, а вместо этого внедрить обратный отсчет дней. Даже если пользователь потерпел поражение в течение нескольких дней, когда пользователь изменил дату и время CMOS / BIOS, вы все равно можете сохранить дату и время, а также счетчик системных тиков во время последней загрузки и при следующей загрузке. вверх, если выяснится, что дата сделала что-то иное, чем продвижение вперед на небольшое количество времени, которое меньше суток, то уменьшите счетчик «дней, оставшихся в пробной версии». Вы также можете посчитать часы, в течение которых приложение было активным, и просчитать это. Кто-то может продлить срок действия пробной версии на неопределенный срок, не допуская вашего приложения в сети и откатывая время, но если вы запустите службу, которая всегда работает в фоновом режиме, вы сможете отловить откаты часов и отключаются после некоторого числа (скажем, три) откаты часов обнаружены вашей фоновой службой.

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

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

Профессиональный эскиз Google использует технику "обратного отсчета часов", и я обнаружил, что оценивать ее намного проще.

Я думаю, что этот ответ на другой вопрос - лучший, который я видел: Каков наилучший способ создания программы, которая работает только в предварительно определенный испытательный период (период оценки)?

Реальный ответ: «все, что вы можете сделать, есть много людей, которые попытаются победить и взломать это». Шутки в сторону. Сколько времени вы хотите потратить на шифрование и запутывание? Вы не будете зарабатывать деньги таким образом.

1 голос
/ 19 июля 2010

Опираясь на ОС для проверки даты, которая может быть изменена -> вы уже проиграли игру

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

Ключевыми словами на ваш вопрос является

Надежный

ипростой ответ НЕТ , нет смысла вбивать квадратный колышек в круглое отверстие ..

Редактировать 1: Слабое решение

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

Мы знаем, что время должно только увеличиваться, поэтому, исходя из этого предположения,быть нашим «тестом».Нарушение этого правила позволяет нам предполагать, что кто-то вмешивается во время, и поэтому блокировать это дело.

(1) При первом запуске приложения создайте зашифрованный файл с текущей датой (отметкой времени).

(2) Каждый раз, когда приложение запускается, сначала проверьте этот файл и проверьте текущее время из ОС.

(3) из нашего базового предположения, мы должны ожидать, что текущийвремя всегда должно быть больше сохраненного времени.Если это так, мы можем ДЕЙСТВИТЕЛЬНО предположить, что время ОС «Надежно».

(3) Если текущее время меньше сохраненного времени, то кто-то изменяет время ОС -> плохой парень.

(5) При закрытии зашифруйте текущее время.

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

0 голосов
/ 19 июля 2010

Я не уверен, что значит шуш, не имея сетевых решений. Доступен веб-сервис для получения даты и времени в любом месте.

EarthTools

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

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

Вот пример запроса для Нью-Йорка: http://www.earthtools.org/timezone/40.71417/-74.00639

Вот пример ответа:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<timezone xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="http://www.earthtools.org/timezone.xsd">
    <version>1.1</version>
    <location>
        <latitude>40.71417</latitude>
        <longitude>-74.00639</longitude>
    </location>
    <offset>-5</offset>
    <suffix>R</suffix>
    <localtime>4 Dec 2005 12:06:56</localtime>
    <isotime>2005-12-04 12:06:56 -0500</isotime>
    <utctime>2005-12-04 17:06:56</utctime>
    <dst>False</dst>
</timezone>
0 голосов
/ 19 июля 2010

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

0 голосов
/ 19 июля 2010

Вы можете запросить любой общедоступный веб-сервер (например, www.com) и получить дату из заголовка ответа.

0 голосов
/ 19 июля 2010

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

0 голосов
/ 19 июля 2010

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

...