防止申请被关闭

时间:2015-01-19 19:06:36

标签: vb.net

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

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

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

Dim Stream As New Stream = FileOpen("MyApplicationPath", FileAccess.ReadWrite, FileShare.None)

但是,它给了我一个错误:“该文件已被使用”。我可以想象它会给我这个错误,因为机器需要访问可执行文件。

还有其他办法吗?

谢谢!

修改

致Andrew Morton:在你的文章中,有人说:“[...]要检查密码是否正确,我们需要盐,因此它通常与哈希一起存储在用户帐户数据库中,或者哈希字符串本身的一部分。“这意味着我必须在某处储存盐。我在哪里可以存放?怎么样?

如果我有一个密码:“你好”,用盐“gfogkdfn”,我需要在某处存储“gfogkdfn”。我将存储它的任何地方,它很容易找到,我的系统将被破解...如果我也想加密盐,我需要一个“静态”加密密钥,这也很容易破解(只做一个逆向工程我的计划或我不知道的任何其他方式。)

我认为这是这种方法的问题。你有什么可能的解决方案吗? 感谢

1 个答案:

答案 0 :(得分:3)

长答案: 完全有可能确保应用程序很少关闭。这样做有很多可能的方法和技巧:

  • 编写一个小的“观察者”服务,该服务保留在后台,如果进程从进程列表中消失,则重新启动应用程序。当然,有人也可以关闭它。也许应用程序和观察者服务都可以保持彼此活着。
  • 使用Windows任务计划程序重复运行任务(批处理文件,小型引导程序),该任务检查您的应用程序是否正在运行,如果不是,则启动它。
  • 进入一些低级操作系统例程,例如* .exe文件的shell处理程序,这样当在机器上执行任何程序时,您的应用程序将保证正在运行。

正如您所提到的,防病毒程序一直使用这样的技术。在硬币的另一面,恶意软件和间谍软件经常使用这些技巧(尤其是最后一个 - 最初很难检测到的东西!)以确保它们始终在运行。

正如我所说,这样的技巧可以帮助保证您的应用很少关闭。我说“很少”,因为总有一种情况是你的观察者服务崩溃,或者用户能够同时杀死两者,或者启动到安全模式......等等。如果您正在尝试防止恶意破解尝试,那么这一点就更加真实了。任何这些技术都不会分阶段使用中等智能的裂解装置。

如果您的目的是保护敏感用户数据,那么最大的问题是,即使您的文件被锁定<强> 100%的时间,一个有动力的攻击者可以简单地拔掉电脑,放入存储设备进入另一台机器,并尽可能多地阅读。

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