我有一个应用程序,使用FileShare.None
锁定包含个人用户数据的文件。问题是如果另一个进程或用户关闭了应用程序,该文件将被解锁,每个人都可以访问存储的密码。该文件已加密,但遗憾的是很容易找到密码。
所以,我的问题是:有没有办法防止用户或任务管理器关闭应用程序。与防病毒软件类似,例如:如果您尝试关闭 ESET NOD32 ,则无法阻止它。
我试图将此代码插入到我的应用程序的表单加载事件中:
Dim Stream As New Stream = FileOpen("MyApplicationPath", FileAccess.ReadWrite, FileShare.None)
但是,它给了我一个错误:“该文件已被使用”。我可以想象它会给我这个错误,因为机器需要访问可执行文件。
还有其他办法吗?
谢谢!
修改
致Andrew Morton:在你的文章中,有人说:“[...]要检查密码是否正确,我们需要盐,因此它通常与哈希一起存储在用户帐户数据库中,或者哈希字符串本身的一部分。“这意味着我必须在某处储存盐。我在哪里可以存放?怎么样?
如果我有一个密码:“你好”,用盐“gfogkdfn”,我需要在某处存储“gfogkdfn”。我将存储它的任何地方,它很容易找到,我的系统将被破解...如果我也想加密盐,我需要一个“静态”加密密钥,这也很容易破解(只做一个逆向工程我的计划或我不知道的任何其他方式。)
我认为这是这种方法的问题。你有什么可能的解决方案吗? 感谢
答案 0 :(得分:3)
长答案: 完全有可能确保应用程序很少关闭。这样做有很多可能的方法和技巧:
正如您所提到的,防病毒程序一直使用这样的技术。在硬币的另一面,恶意软件和间谍软件经常使用这些技巧(尤其是最后一个 - 最初很难检测到的东西!)以确保它们始终在运行。
正如我所说,这样的技巧可以帮助保证您的应用很少关闭。我说“很少”,因为总有一种情况是你的观察者服务崩溃,或者用户能够同时杀死两者,或者启动到安全模式......等等。如果您正在尝试防止恶意破解尝试,那么这一点就更加真实了。任何这些技术都不会分阶段使用中等智能的裂解装置。
如果您的目的是保护敏感用户数据,那么最大的问题是,即使您的文件被锁定<强> 100%的时间,一个有动力的攻击者可以简单地拔掉电脑,放入存储设备进入另一台机器,并尽可能多地阅读。
简答:这是解决问题的错误方法。您应该假设每个人都可以看到数据,并使用良好,安全的方法对其进行强加密,这样就无所谓了。