C# 如何使文件夹不可压缩
我有一个程序,可以解密zip文件,将其解压缩到一个秘密位置,然后在解压缩的文件夹中运行一个程序。我想确保没有任何外部程序可以将提取文件夹复制到另一个位置(程序完成后将删除机密文件夹) 我已经消除了Windows资源管理器,使我的解密程序成为一个“始终在顶部”的程序,如果机密文件夹被杀死,它将被删除(通过使用解密程序启动的另一个隐藏程序)。我担心的是,另一个程序可能会监视进程列表,发现文件夹位置并执行复制C# 如何使文件夹不可压缩,c#,windows,c#-4.0,C#,Windows,C# 4.0,我有一个程序,可以解密zip文件,将其解压缩到一个秘密位置,然后在解压缩的文件夹中运行一个程序。我想确保没有任何外部程序可以将提取文件夹复制到另一个位置(程序完成后将删除机密文件夹) 我已经消除了Windows资源管理器,使我的解密程序成为一个“始终在顶部”的程序,如果机密文件夹被杀死,它将被删除(通过使用解密程序启动的另一个隐藏程序)。我担心的是,另一个程序可能会监视进程列表,发现文件夹位置并执行复制 有没有一种方法可以防止以编程方式复制目录或文件?为此,您需要设置共享模式。不确定C#解决方案
有没有一种方法可以防止以编程方式复制目录或文件?为此,您需要设置共享模式。不确定C#解决方案,但据我所知,在C#中,您可以使用Win32,因此需要使用打开该文件夹中的文件,并将
dwShareMode
设置为零
另外,如果您想在程序终止后删除所有内容,可以使用FILE\u FLAG\u delete\u ON\u CLOSE
FLAG
正如我所说,不确定用C语言来做这件事是否容易,但是你可以一直信任C++,它让我们在较低的层次上做这些事情。
< P>文件系统在从用户上下文运行时总是公共的。您可以尝试将“文件夹”提取为二进制流,并在文件系统上创建一个没有明显意义的原始二进制文件,例如,创建您自己的临时“文件系统”简短回答:您不能
- 请注意,隐藏窗口/始终在顶部显示窗口是非常弱的保护,从另一个过程中很容易改变这一点
- 还请注意,您始终可以挂起进程而不是终止它们,因此也可以很容易地防止执行任何逻辑,例如“如果您被杀死,那么我执行XXX”
DirectorySecurity
构造函数重载来实例化具有相同权限的DirectorySecurity
对象
当然,另一种方法是创建与上面相同类型的“模型目录”,并创建“机密”工作目录作为该目录的子目录,继承父目录的权限集
要安全地删除磁盘上的内容,请查看问题“”
如果信息如此敏感,您可能应该将其解密到内存中,而不是磁盘中。但你应该意识到这也不安全。最近,Target的POS系统遭受的数据泄露是由于定制设计的恶意软件从进程内存中获取纯文本信用卡和其他PCI/敏感数据造成的。有人可以将调试器附加到正在运行的程序并转储其内容。使用专用用户帐户运行应用程序,然后在上配置文件夹权限您正在工作的文件夹,只有该用户才能访问。完成后,该文件夹将被“删除”。存储数据的扇区是否会被随机1和0覆盖七次?(严肃的问题)。在这之前(有时,即使发生了),数据仍然可以恢复。你正在与坚定的对手进行一场失败的战斗,那么你愿意走多远?不,我还没有走到随机覆盖的地步。我怀疑它有什么不同,但它实际上是提取到一个VHD(这是我后来删除的)。大多数情况下,我都在寻找最简单/最快捷的方法来确保尽可能的安全。不幸的是,运行所有内容的帐户都是管理员帐户,所以我不确定这是否能解决很多问题。谢谢你的意见。你能为你在回答中提到的问题提供更好的保护吗?保护程序对我来说有点新鲜。我能让windows从这样的文件启动进程吗?我喜欢这个想法。如果我理解您的建议,在启动该过程后,我会将dwShareMode的文件句柄打开为零,以防止其他人访问它?是的,您应该保持文件打开,并且不要与其他人共享它们。但是,正如注释中所提到的,这应该可以工作,没有办法100%保证它工作,因为用户可能会附加调试器,将驱动器作为物理设备读取等+1,即使不是100%,这是我所看到的第一个解决方案,它表明至少可以使攻击者难以执行复制。我解密到内存中,然后提取到磁盘。是否可以从内存启动新进程?