c++ - 使用 VC++ 在 Windows 上保护虚拟磁盘

标签 c++ windows security file-access

我有一个我想使用的软件的 DLL。在 DLL API 中,有一个函数“LoadConfigFile(char* file)”,它需要一个带有绝对路径的文件名(例如“C:\TestFolder\ConfigFile.cfg”)。然后该函数会加载配置文件本身。

出于安全原因,我希望仅允许使用 DLL 的程序访问文件(内容)。

所以我想知道如何做到这一点并在互联网上搜索解决方案。在寻找解决方案时,我想到了以下选项和问题:

  • 我可以加密该文件。 -> 有人知道这个的免费图书馆吗? -> 那么是否可以将文件作为字符串提供给该函数,并且该函数可以读取该文件?

  • 也许可以使用虚拟文件系统。我的意思是从加密源加载文件,解密并将其保存在虚拟磁盘或文件夹的 RAM 中。然后将链接作为字符串提供给 DLL 函数 -> 这可能吗? -> 有人知道有一个免费的图书馆可以这样做吗?

  • 我还读过一些有关“内存数据库”的内容。 -> 这可以解决我的问题吗?

我的开发环境是VC++ 2010,操作系统是Windows XP。

我希望有人能帮我解决这个问题。

最佳答案

太复杂了。最简单的解决方案(因为您是控制过程)是:

  1. 创建一个临时文件,并以独占方式打开它(甚至不共享读取)。传递 FILE_ATTRIBUTE_TEMPORARYFILE_FLAG_DELETE_ON_CLOSE 因为它不是持久的
  2. 将配置文件解密到此临时文件。保持 handle 打开。
  3. 将临时文件名传递给 DLL。它在您的进程中,因此不受独占锁的影响。
  4. 完成 DLL 后,将临时文件清零。
  5. 关闭 handle 。这将删除该文件。

由于临时文件只要包含 secret 内容就会被锁定,因此其他进程无法访问它。而且由于它被标记为临时的,关闭时删除,Windows 不会费心将其刷新到物理磁盘。

当然,这并不是完美的安全性。任何可以读取您的进程内存的人(即拥有SeDebugPrivilege)都可以访问此信息,但这是显而易见的。只需在 LoadConfigFile 上放置一个调试断点即可。

关于c++ - 使用 VC++ 在 Windows 上保护虚拟磁盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9872048/

相关文章:

c++ - 链接器无法找到函数,即使它们位于静态库中

windows - 从主机操作系统访问 guest 虚拟 PC 上的 VPN 连接

c - 将连接的客户端添加到列表 - C

windows - curl 将下载放在哪里?

security - 无需硬编码密码即可加密、解密

c++ - 如何使用索引访问 C++ 结构属性值?

c++ - 在 Rcpp 中使用其他包中的 C 函数

c# - SSL 是从远程到网络服务器交换信息的唯一途径吗?

c++ - 简单的 while 循环不终止(初学者)

iphone - django 服务器和 iphone 应用程序之间的安全通信