我正在开发一个c#应用程序,当用户安装应用程序并在我第一次询问用户输入密钥以及是否输入正确密钥时运行应用程序时进行串行加密。我运行应用程序。但是我的要求是这个过程应该只在安装后一次, 我认为有两种可能性。
将软件验证状态存储在变量中并使用它来允许运行应用程序(我不想使用XML,对象序列化,因为我必须保存一个变量的状态,用户也可以删除由序列)。
在安装应用程序时向用户询问密钥,如果输入错误的密钥,则无法安装该软件。
某人可以回答
或者 2.如何手动触发安装程序(验证后)。
答案 0 :(得分:5)
Software Protection是一个古老而广阔的话题。目前最先进的技术是,保护您的软件不可能100%可靠。迟早,如果有足够的曝光和/或兴趣,有人会破解它。
尽管如此,很多人和公司都在保护自己的软件产品,但有很多方法(不过100%可靠)。
从您的问题来看,您的要求并不清楚。鉴于您所描述的内容,最简单的选择是使用密码压缩安装程序。如果用户不知道正确的密码,他们将无法解压缩zip文件并安装您的程序。
这通常不太实用,因为为每个人提供了相同的密码。您想要进行自己的串行密钥验证,并考虑在安装时执行此操作。如果这是您想要的路线,则需要提供一些脚本来验证您的安装系统。您表示您正在使用Windows安装程序。您可以使用Windows Installer XML (WiX) toolset来创作安装。如果有足够的耐心,您可以在Windows安装程序包中构建密钥验证。最实用的方法是调用你在wix包中用c#编写的验证例程。您可以使用Conditional Syntax检查安装中的条件。这应该涵盖您的选项2.
对于选项1,那么无论何时在系统中存储您的信息,用户总是能够到达并更改它(毕竟它是他们的计算机)。有些人将其存储在注册表中,一些存储在关键文件中。删除这些文件通常不是问题,因为如果用户删除它们,您的程序将知道它不应该运行。但是,用户可以在其他机器上复制它们等。
Isolated Storage是另一个用.NET存储信息的地方。最终,无论如何,它都是文件系统中的一些深埋文件。
软件保护再次成为一个复杂的主题,由您决定,您的要求是什么,您可以承担哪些妥协以及您选择实施什么。
祝你好运!答案 1 :(得分:2)
对于这样的事情,我会加密它并将其存储在注册表中。这不是您想要存储在设置文件中的类型。您可以查看有关如何使用C#访问注册表的this codeproject文章。