лучшее место для "безопасного" файла на windows - PullRequest
1 голос
/ 06 сентября 2010

Я написал программу для одного клиента.Я реализовал метод лицензирования для него (подписанные файлы XML).Этот клиент хочет, чтобы приложение устанавливалось только один раз на ПК его клиента, и хочет, чтобы я "обезопасил" это ... особенно потому, что его лицензии ограничены по времени.Эти компьютеры не имеют доступа в Интернет.Я сказал ему, что это абсолютно глупо, и он не в состоянии обеспечить такие вещи (например, ВМ), но он хочет хотя бы немного «безопасности».

Теперь я ищу хорошее место наМашина Windows, доступная для записи каждому пользователю (без UAC), где я могу хранить некоторые «секретные» данные (например, последний раз использованные), чтобы пользователь не мог просто повернуть время назад на ПК.

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

Я знаю, что это действительно очень глупо, но мой клиент настаивает на этом ...

Я пытался найти некоторые места, но пока безуспешно.

Есть кто-нибудь из известных вам каталоговчто отвечает этим требованиям?

Ответы [ 4 ]

3 голосов
/ 06 сентября 2010

Может быть, реестр будет лучше? Да, это действительно ужасное требование. Возможно, вы могли бы закодировать дату установки в XML-файл как часть процесса установки, возможно, запутать его каким-то образом.

2 голосов
/ 06 сентября 2010

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

1 голос
/ 08 сентября 2010

Хорошо. Я взял немного предложений от каждого :) Я помещаю файл в unter {sys} {My-GUID} \ и предоставление этому каталогу полных разрешений для всех в моей настройке (innosetup)

Думаю, это должно быть ... хорошо ... как-то:)

И @ NullUserException: он платит за мою машину ... я не могу его уволить:)

Спасибо за ваши ответы

1 голос
/ 06 сентября 2010

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

  1. Во встроенном ресурсе предоставьте программе открытую часть асимметричного ключа
  2. Во время работы проверьте наличие нескольких записей в реестре (подробности позже). Это первый запуск, поэтому они будут отсутствовать
  3. Отправьте на центральный сервер лицензирования серийные номера процессора (и возможно серийный номер продукта)
  4. Сервер проверяет, что ЦП / последовательный порт не был виден раньше, генерирует дату / время истечения. Если у них есть, тянет старый срок действия дата / время. Если дата / время истечения прошло, ничего не возвращает, иначе возвращает старую дату / время
  5. Сервер отправляет клиенту дату истечения срока действия и все информация (срок действия, процессор, серийный номер) подписано секретным ключом
  6. Клиент сохраняет дату / время истечения срока действия и подписанные данные в реестра
  7. При последующих запусках клиент берет всю информацию и сравнивает это с подписью. Если подпись недействительна, реестр информация удалена

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

Недостатком является то, что это зависит от Интернета, и вам нужен сервер лицензирования.

...