Защищенный виртуальный диск на Windows с VC ++ - PullRequest
2 голосов
/ 26 марта 2012

У меня есть DLL программного обеспечения, которое я хочу использовать. В API DLL есть функция «LoadConfigFile (char * file)», которой требуется имя файла с полным путем к нему (например, «C: \ TestFolder \ ConfigFile.cfg»). Затем функция загружает сам файл конфигурации.

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

Поэтому мне было интересно, как это можно сделать, и я искал решения в Интернете. Следующие варианты и вопросы приходили на ум при поиске решения:

  • Я мог бы зашифровать файл. -> Кто-нибудь знает бесплатную библиотеку для этого? -> Можно ли дать функции файл в виде строки, и функция сможет прочитать файл?

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

  • Я также читал кое-что о "в базах данных памяти". -> Может ли это быть ответом на мою проблему?

Моя среда разработки - VC ++ 2010, а ОС - Windows XP.

Надеюсь, кто-нибудь сможет мне помочь с этим вопросом.

Ответы [ 3 ]

1 голос
/ 26 марта 2012

Единственное, о чем я могу подумать - и я не имею исходного кода для него под рукой - это хэш и расшифровка .

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

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

Обычно CryptProtectData делает и предоставляет параметр pOptionalEntropy для дополнительной безопасности (затем принимайте ответ @Patrick, а не мой).

1 голос
/ 26 марта 2012

Слишком сложно. Самое простое решение (поскольку вы управляете процессом):

  1. Создайте временный файл и откройте его исключительно (даже не читайте в общем доступе). Пройдите FILE_ATTRIBUTE_TEMPORARY и FILE_FLAG_DELETE_ON_CLOSE, поскольку оно не является постоянным
  2. Расшифруйте файл конфигурации в этот временный файл. Держите ручку открытой.
  3. Передать временное имя файла в DLL. Он находится в вашем процессе, поэтому эксклюзивная блокировка на него не влияет.
  4. Когда DLL будет готова, обнулите временный файл.
  5. Закройте ручку. Это удалит файл.

Поскольку временный файл блокируется, если он содержит конфиденциальный контент, никакой другой процесс не может получить к нему доступ. А так как он помечен как временный, удаление при закрытии, Windows не потрудится сбросить его на физический диск.

Конечно, это не идеальная безопасность. Любой, кто может прочитать вашу память процесса (у меня есть SeDebugPrivilege), может получить доступ к этой информации, но это тривиально очевидно. Просто установите точку отладки на LoadConfigFile.

1 голос
/ 26 марта 2012

Насколько конфиденциальны ваши данные?И какова цель вашего приложения?

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

Если ваши данные нуждаются в тщательном шифровании, посмотрите нафункции шифрования Windows (например, CryptProtectData, см. http://msdn.microsoft.com/en-us/library/aa380261(VS.85).aspx).

. В некоторых случаях вы не хотите шифровать свои данные, а просто хотите убедиться, что никто не изменяет их. В этом случае добавьте хеш-значение (SHA-2, см. http://en.wikipedia.org/wiki/SHA-2) к вашему файлу.

...