仅限 MS Windows:需要一种在进程范围内创建私有文件系统的方法
Posted
技术标签:
【中文标题】仅限 MS Windows:需要一种在进程范围内创建私有文件系统的方法【英文标题】:MS Windows Only: Need a way to create a private filesystem within the scope of a process 【发布时间】:2020-01-30 16:57:19 【问题描述】:我有一个应用程序将 CPU/GPU 密集型应用程序作为子进程启动。在每个子进程中,我正在寻找一种方法来创建只有该进程才能访问的进程私有文件系统(加密、隐藏等)。该文件系统可以驻留在本地磁盘、UNC 路径或映射驱动器上。只有创建该私有文件系统(子文件夹)的进程才能访问它。任何其他进程,包括用户和管理员,都不能“看到”该私有文件系统的内容。该文件系统可以是基于磁盘或基于内存的(只要基于内存的文件系统可以通过映射驱动器访问)
可能的解决方案:
-
进程专用 RAMDISK。 (登录用户不可见或无法访问)
可以由进程维护的唯一(随机)密码管理的加密文件夹。同样,绝不允许用户和管理员访问此文件系统的内容。
自定义设备驱动程序?
注意:“文件系统”可以是实际的基于磁盘的文件系统,也可以是驻留在现有磁盘层次结构上的文件夹。
任何帮助将不胜感激。
【问题讨论】:
欢迎来到 SE。很难给出一个详尽的“否”答案,但我可以告诉你,不可能有任何办法。查看隐藏文件夹很容易,访问加密文件夹更难,但由于进程在机器上运行,因此获取文件夹密码只是逆向工程的问题。如果它是在我的机器上创建的,并且我有足够的动力,我将能够阅读它。 【参考方案1】:我认为这不可能,但我会告诉你原因,因为这些信息有望帮助你决定使用什么方法来阻止用户访问信息。
隐藏文件夹
这里的问题是,您使用常规方式隐藏的任何内容我几乎可以保证找到。在 Windows 上,这甚至不是一个特别困难的过程。我在 PC 上运行的任何应用程序都可以使用 process monitor 进行调查 - 这个 Microsoft 程序将允许您查看进程访问、读取或写入的每个文件。它非常易于使用(考虑到普通用户使用的很少),并且会显示访问的确切文件或使用的任何注册表项的详细程度。
加密/密码保护
这是一种比隐藏内容更可靠的解决方案,但不能保证。 '任何客户端软件都在敌人手中'这句古老的格言在这里是相关的。如果您打算从加密文件夹中读取,则需要某种解密方式,类似地,如果它受密码保护,那么您将需要某种方式为文件系统提供密码。如果您打算在我的计算机上执行此操作,我可以看到您所做的一切。它可能需要像ollyDbg 这样的软件,它可以让我看到你正在处理的指令在我的机器上运行,我个人觉得这比使用进程监视器更多的努力。这不是简单地附加到进程然后查看所有读/写文件的列表的问题——尽管 ollyDbg 确实让它变得如此简单。有字符串列表、可搜索的操作码,以及想要访问您的加密/密码保护数据的人所需要的一切。
混淆
您没有提到这一点,但值得一看。 Obfuscation 基本上意味着将您的数据隐藏在平面视野中。如果你混淆你的代码来处理加密/密码,那么事情就会变得更加困难。如果没有更多关于你在做什么的数据,很难就如何混淆提出具体的建议——事实上,如果你特别偏执,你不会想要遵循我的建议,因为这将是你的代码如何被任何人混淆的指南在谷歌上找到。
【讨论】:
大家好,感谢您的反馈。我的应用程序启动处理任务,这些任务可能包含我想保密的敏感信息......即;防止任何人(除了提交者)不知道内容......这包括本地管理员。我将继续寻找选项,并将在这篇文章中发布任何发现。再次感谢!!!【参考方案2】:在我工作的一个项目中,有一个“文件系统”,它基本上有一个哈希映射: [路径,fileInMemory]。
在我们的例子中,文件系统是静态的,存储在多个文件之间并被加密。
在程序初始化时,它被解密并填充了地图。 在我们的例子中,我们使用的所有“虚拟路径”都希望访问“磁盘 D:”,例如“d:\file”,这是因为我们支持在真实 fs 中使用未加密文件并使用它们(更容易开发)
但是,它有一个问题,你必须修改源代码或......
使用 MinHook 或 Detour。
您可以使用我的方法(或类似方法)与 detour 或 minhook 挂钩 WIN32 文件 api,这样您可以重定向/对文件执行任何您想要的操作,将它们存储在内存中等......或更简单,让它们位于您想要的任何文件夹中,但在调用 api 时对其进行加密和解密。
这些想法可能不太理想,我希望至少我给了你更多的选择。
【讨论】:
太棒了!!!我会做一些研究和 MinHook/Detour 并在这里发布任何可靠的发现......谢谢!以上是关于仅限 MS Windows:需要一种在进程范围内创建私有文件系统的方法的主要内容,如果未能解决你的问题,请参考以下文章