-1

我有一个加密的图像文件。现在我的程序将读取加密文件并在 char 数组中创建图像。现在我的问题是我需要用一些图像查看器打开图像而不将图像文件写入硬盘。这应该是可能的,因为图像数据已经加载到内存中。

4

3 回答 3

1

我不知道任何能够从内存区域加载图像的图像查看器。即使您要创建自己的图像查看器,您也必须共享内存区域,否则出于安全原因,查看器很可能无法访问您的程序内存。

折衷方案是将图像写入硬盘上的临时目录,用图像查看器打开它并用随机数据覆盖它并在使用后删除文件(对于小文件,您甚至可以在图像查看器完成加载后将其删除)。

从您所写的内容来看,您似乎希望避免将解密的数据写入硬盘,这很好,因为写入硬盘的数据在关机后仍然存在,而 RAM 中的数据将无法生存。但正如 JasonD 在他的评论中指出的那样,这可能会导致一种错误的安全感——操作系统可以随时将内存区域自由地移动到虚拟内存(以及硬盘)。

编辑:打开内存区域可能是可能的,例如您可以尝试使用十六进制编辑器 HxD - 它可以打开和编辑进程分配的内存区域,尽管我不知道它是如何做到的。

于 2012-12-15T19:28:24.920 回答
1

正如其他人所指出的那样,除非图像查看器支持通过进程间通信机制加载图像(我还没有看到这样的查看器),否则数据存在于内存中的事实不会给您任何帮助。

因此,您的选择是使用一些用于 C++ 的图像查看库(这可能是一个完美的选择,顺便说一句)或创建一个虚拟磁盘。

关于交换到磁盘的内存 - 您可以将内存标记为不可交换,但您需要确保可以分配这样的内存块(对于大图像,这是不可能的)。

您可以创建一个虚拟磁盘来公开存储在 RAM 中的数据,但您需要一个内核模式虚拟磁盘驱动程序。不过,这需要在内核模式开发方面有扎实的经验。我们公司提供多种产品(SolFS OS 版本、CallbackDisk),您可以将它们用于您的任务并获得几乎无需编程的加密内存存储。

于 2012-12-16T09:50:31.693 回答
0

只有一种方法可以做到,而且绝对不是简单的方法!您需要一个过滤器驱动程序将虚拟文件系统链接到用户空间。您可以查看“dokan”项目以获取更多信息。

如果这是一个商业项目,你应该非常熟悉 NTFS 驱动程序,因为我认为不支持 dokan。

我用过它,它工作得很好,但我花了大约三个月的时间才开始研究这些东西。

如果它不是“高安全性应用程序”,您可以使用临时文件。

于 2012-12-15T19:36:56.173 回答