Vb.net 阻止关闭应用程序

Vb.net 阻止关闭应用程序,vb.net,Vb.net,我有一个应用程序,它使用FileShare.None锁定包含个人用户数据的文件。问题是,如果另一个进程或用户关闭应用程序,文件将被解锁,每个人都可以访问存储的密码。文件是加密的,但不幸的是很容易找到密码 所以,我的问题是:有没有一种方法可以防止应用程序被用户或任务管理器关闭。例如,与防病毒软件类似:如果您试图关闭ESET NOD32,您将无法阻止它 我已尝试将此代码插入到我的应用程序的表单加载事件中: Dim Stream As New Stream = FileOpen("MyApplicat

我有一个应用程序,它使用
FileShare.None
锁定包含个人用户数据的文件。问题是,如果另一个进程或用户关闭应用程序,文件将被解锁,每个人都可以访问存储的密码。文件是加密的,但不幸的是很容易找到密码

所以,我的问题是:有没有一种方法可以防止应用程序被用户或任务管理器关闭。例如,与防病毒软件类似:如果您试图关闭ESET NOD32,您将无法阻止它

我已尝试将此代码插入到我的应用程序的表单加载事件中:

Dim Stream As New Stream = FileOpen("MyApplicationPath", FileAccess.ReadWrite, FileShare.None)
但是,它给了我一个错误:“该文件已在使用中”。我可以想象它会给我这个错误,因为机器需要访问可执行文件

还有别的办法吗

谢谢

编辑:

安德鲁·莫顿:在你的文章中,有这样一句话:“[…]为了检查密码是否正确,我们需要salt,因此它通常与散列一起存储在用户帐户数据库中,或者作为散列字符串本身的一部分。”。这意味着我必须把盐储存在某个地方。我可以把它存放在哪里?怎么做

如果我有一个密码:“hello”和一个salt“gfogkdfn”,我需要将“gfogkdfn”存储在某个地方。无论我在哪里存储它,都很容易找到,我的系统也会被破解。。。如果我也想对salt进行加密,我需要一个“静态”加密密钥,它也很容易破解(只需对我的程序进行反向工程或其他我不知道的方式)

我认为这就是这种方法的问题所在。你有什么可能的解决办法吗?
谢谢

长长的回答: 完全可以确保应用程序很少关闭。有许多可能的方法和技巧可以做到这一点:

  • 编写一个小的“观察者”服务,如果进程从进程列表中消失,它将留在后台并重新启动应用程序。当然,有人也可以关闭它。也许应用程序和watcher服务都可以让彼此保持活力
  • 使用Windows任务计划程序重复运行任务(批处理文件、小型引导程序),检查应用程序是否正在运行,如果没有,则启动它
  • 挂接到一些低级操作系统例程中,例如*.exe文件的shell处理程序,以便在计算机上执行任何程序时,应用程序都能保证运行
正如您所提到的,防病毒程序一直都在使用类似的技术。另一方面,恶意软件和间谍软件经常使用这些技巧(特别是像最后一个这样的东西——一开始很难检测!)来确保它们总是在运行

正如我所说,这样的技术有助于保证应用程序很少关闭。我之所以说“很少”,是因为总有这样一种情况:您的watcher服务崩溃,或者用户能够同时杀死这两个服务,或者启动到安全模式。。。等等如果您试图防止恶意破解尝试,这一点就更加正确了。一个中等智能的破解者不会被这些技术所淘汰

如果您的目的是保护敏感用户数据,这里最大的问题是,即使您的文件在100%的时间内被锁定,有动机的攻击者也可以简单地拔掉计算机插头,将存储设备放在不同的机器上,然后读取他们想要的内容


简短的回答:这是解决问题的错误方法。您应该假设每个人都可以看到数据,并使用良好、安全的方法对其进行强加密,这样就不重要了。

这听起来像是XY问题。我认为您真正的问题应该是“我应该如何保护此应用程序中的用户数据?”嗯,事实并非如此。我已经提出了让你更好地理解我的方案的方法。我问过其他人是否有适合我需要的不同解决方案。无论如何,谢谢你-另外一种在我的应用程序中保护用户数据的方法也是一个好问题。如果有其他方法,请告诉我!是否足以使密码无法读取?如果是这样,你可以添加salt并对其进行散列:。Andrew发布的salt密码散列链接是一个很好的开始。谢谢你,Nate。如果我理解的话,安德鲁的解决方案有一个相当大的问题:我把盐串放在哪里?我现在正在与Windows服务合作,检查我的应用程序是否处于活动状态。。。我认为Windows服务应该不容易关闭。谢谢,-u FWhiteSalted肯定比unsalted好,但任何一种都比依赖基于文件的锁来保证所有安全性要好。让我重申一下,这是一个非常糟糕的主意!Windows服务可以轻松关闭。我不是安全或加密专家,但我强烈建议对加密技术进行一些研究。这个问题以前就已经解决了,现在有一些非常成熟的方法可用于加密敏感数据。此线程中的答案提供了信息,帮助您找到正确的路径:@PWhite我链接的文章告诉您,将盐存储在“明文”中并不重要除了密码,您只需要确保salt有足够的字节,并且每个密码使用不同的salt。