Существует ли Windows абсолютное время для меток времени? (.NET)

Я работаю с приложением WPF/C#, где я должен заблокировать пользователей от получения доступ к конкретной функции для некоторого количества времени. В основном со времени определенный случай происходит, я хочу предотвратить определенный доступ в течение следующих 24 часов.

Простой случай:

  • Случай происходит, сохраните метку времени (использующий DateTime или подобный)
  • Пользователь пытается получить доступ к области 15 часов спустя, выдержать сравнение Теперь для добавления метки времени... к блоку
  • Пользователь пытается получить доступ к области 25 часов спустя, выдержать сравнение Теперь для добавления метки времени... позволяют

Вся польза. Однако у пользователя есть способность изменить системное время, которое по-царски завинчивает меня. Они могут просто установить системное время, 24 часа вперед и мое приложение ничего не узнают.

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

Любое понимание ценится.

9
задан BabaBooey 27 February 2010 в 22:37
поделиться

5 ответов

Environment.TickCount не меняется при изменении системного времени, но сбрасывается при перезагрузке. Один из вариантов - защищенный HTTPS веб-сервис и политика сертификации, которая не допускает сбоев проверки сертификата. В противном случае подделать ответ службы будет довольно тривиально.

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

3
ответ дан 4 December 2019 в 23:06
поделиться

Не совсем. Единственный надежный абсолютный таймер - это внешний таймер, находящийся под вашим контролем или контролем кого-то, кому вы доверяете, например, одного из серверов времени в Интернете (например, time.windows.com). Вы можете получить к ним доступ с помощью библиотеки NTP или SNTP, такой как та, что размещена на http://www.codeproject.com/KB/IP/ntpclient.aspx . Конечно, в этом случае (согласно комментарию к ответу Джоша) вам нужно подумать, что делать, если вы не можете связаться с сервером времени, например пользователь отключает машину от сети.

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

1
ответ дан 4 December 2019 в 23:06
поделиться

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

Вы можете получить время из сетевой службы времени или зайти на сайт www.time.gov и вычистить время из возвращенного html. http://www.time.gov/about.html

Или просто живите с несколькими пользователями, желающими перевести часы вперед.

1
ответ дан 4 December 2019 в 23:06
поделиться

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

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

Вот некоторая информация о перехвате сообщения WM_TIMECHANGE в службе .NET: обнаружение события wm_timechange в службе Windows .net

1
ответ дан 4 December 2019 в 23:06
поделиться

Чтобы получить абсолютную отметку времени, попробуйте запрос NTP к одному из (бесплатных) серверов времени NIST

1
ответ дан 4 December 2019 в 23:06
поделиться
Другие вопросы по тегам:

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