Где создавать / хранить секретные файлы для лицензионной информации / испытаний на Windows / Mac OS X / Linux? [закрытый]
Я пишу коммерческий продукт, который использует простой механизм регистрации и позволяет пользователю использовать приложение для демо-период перед покупкой.
мое приложение должно где-то хранить регистрационную информацию (если она введена) и/или дату первого запуска, чтобы рассчитать, находится ли пользователь в демо/пробном периоде. Хотя я в значительной степени закончил с самим механизмом регистрации, теперь мне нужно найти хороший способ сохранить регистрацию информация на диске пользователя.
наиболее очевидной идеей было бы сохранить пробный период в файле настроек, но поскольку пользователь время от времени удаляет/возится с ними, было бы неплохо сохранить регистрационную информацию в отдельном, более скрытом файле.
Итак, вот мой вопрос: Какое лучшее место/стратегия для хранения и создания таких скрытых файлов в Windows, Mac OS X и Linux? Вот что пришло мне на ум до сих пор:--2-->
Linux / Mac OS X
большинство Unix-подобных систем довольно заблокированы, когда дело доходит до мест, в которые пользователь может писать файлы. В большинстве случаев, это только /tmp
каталог и домашний каталог пользователя.
Я думаю, что проще всего здесь, вероятно, создать файл с точечным префиксом, чтобы сделать его менее заметным, а затем дать ему имя, которое не сделает очевидным, что он связан с моим приложением.
Windows
вероятно, так же, как Linux / Mac OS X - более поздние версии Windows станьте более ограничительными, когда дело доходит до разрешений файловой системы.
спасибо!
обновление
для меня места для таких файлов более актуальны, чем обсуждение вопроса, если этот способ защиты от копирования хорош или плох.
7 ответов
кого волнует, куда вы положили файл. Его содержимое вы хотите защитить.
на стороне сервера зашифруйте / подпишите информацию о пользователе закрытым ключом и распространите ее пользователю. Отправьте по электронной почте файл лицензии, подключите приложение и загрузите его, что угодно.
в приложении включите открытый ключ. Если вы не можете аутентифицировать/расшифровать файл, сбой. Если можете, продолжайте работать. Вам нужно только повторно подключиться к серверу, если вы не можете аутентифицировать файл лицензии. Для этого вам нужен только самый примитивный "сервер лицензий". Если вы отправляете файл по электронной почте, "сервер лицензий" - это всего лишь скрипт, который шифрует строку и отправляет электронное письмо пользователю.
ничто не защитит вас от изощренных попыток взломать ваше приложение. Но это решение лишит случайных пользователей возможности нарушить вашу лицензию.
и если вы хотите запретить пользователю повторно регистрироваться несколько раз или делиться файлом лицензии со своими друзьями, запишите их MAC-адрес на стороне сервера и в файл лицензии. Лично я не стал бы этого делать. И это не остановит изощренных хакеров, но вам решать, сколько времени провести в игре кошки-мышки.
для Windows, вы можете попробовать, используя Изолированное Хранилище, который будет хранить файл в уникальном местоположении продукта, которое обычно достаточно неясно (и имеет довольно глубокий путь) и имеет преимущество быть полностью прозрачным для разработчика.
системы POSIX должны поместить данные приложения в скрытый файл в домашнем каталоге пользователя. Системы Windows должны поставить что-то под CSIDL_APPDATA
.
честно говоря, независимо от того, что вы делаете, вы будете обнаружены. Если ваша система автономна, то есть не требует подключения к Интернету или какому-либо другому устройству во время выполнения, то обе ваши блокировки и ключ должен быть в вашем коде или данных, которые вы записываете на диск. Таким образом, хотя вы можете запутать ключ (и даже замок), владелец системы может вызвать инструменты трассировки системы или что угодно, чтобы узнать вас. Но я думаю, ты знал это. Каждый крупный поставщик программного обеспечения пробовали различные методы, чтобы сделать эту работу, но каждый раз ломаются.
Я думаю, что ваша единственная реальная надежда-иметь свой программный телефон дома регулярно, чтобы увидеть, если он все еще имеет действительную лицензию.
чтобы проиллюстрировать проблемы с этим подходом, был Linux-сервер, который хранил свою бесплатную пробную метку времени в /usr/bin/.tv
. Требуется только strace
чтобы кто - то понял, что файл доступен-в этом случае просто удаление файла перезапустило пробную версию.
Если вы один разработчик, вам придется потратить много денег и / или времени на реализацию схемы защиты, которая должна быть взломана только одним человеком, чтобы быть доступной для всех. Конечно, вашей целью может быть только сдерживание случайных пиратов программного обеспечения, и в этом случае даже самая простая защита (например, описанный выше метод) сделает свою работу.
в частности, на Mac этот файл должен жить в ~ / Library / Application Support /YourAppName, если лицензия пользователя или/Library/Application Support / YourAppName для лицензии машины.
когда пользователь лицензирует мое приложение, я пишу файл в ~ / Library / Application Support / MyAppName, поскольку это не требует специальных разрешений, но попробуйте прочитать его из обоих мест, чтобы разрешить лицензию на машину, если я когда-либо ее создам.
используйте реестр для версии windows. Он построен для хранения данных в центральном месте, и в качестве дополнительного бонуса, если пользователь удаляет всю папку, настройки ar все еще сидит в реестре ( * )
здесь, на stackoverflow - это статья, описывающая, как получить доступ к реестру с помощью языка программирования Java.
Я не думаю, что Mac имеет что-то подобное, и я знаю, что Linux, конечно, не имеет его, но это начать.
(*) регистр, конечно, также небезопасен для пользователей, которые могут легко удалить ключи, принадлежащие вашему приложению.