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