我在哪里可以存储(和管理)应用程序许可信息?我正在开发一个Windows应用程序。这需要用户注册才能使用它...现在,我将我的许可证信息作为一个文件存储在APPData中。但删除该文件会重置试用版日期。所以,我现在打算将它保存在注册表中。但是,大多数用户在Windows中没有管理权限(受限用户)来访问注册表。我能做些什么?我在哪里可以保存我的序列号和日期?在我看来,关键在于您必须改变管理权限的方式。我写了一个项目(托管在git上)来演示这里描述的一些技术。如果他们删除了许可证数据文件,试用会在哪里重新开始?如果该文件不存在,请不要启动应用程序并在首次安装时使用安装操作创建应用程序。现在你面临第二个问题:如果他们卸载并重新安装应用程序怎么办?第二步是将此文件移动到应用程序数据文件夹(例如Environment.SpecialFolder.CommonApplicationData)。它只是更安全一点(因为卸载时不会删除应用程序数据)但他们仍然可以手动找到并删除它。如果应用程序将由低权限用户安装,您无能为力(您不能尝试将许可证隐藏在注册表中的某处)。现在这是你和黑客之间的游戏。他们总是赢。您只会让合法用户的生活更加艰难,所以请阅读cumgranosalis。您可以在哪里存储许可证数据:如何在文件中隐藏许可证?如果您打算使用一个文件(无论它位于何处),您可能会考虑让破解者的生活变得(稍微)困难一些。我现在想到两个解决方案:可能还有很多其他解决方案(幻想是我们的主人)但不要忘记......破解者会找到它(如果他们真的想要的话),所以你必须平衡你的努力。如何保持你的许可模式,你现在已经走到了尽头。您必须做出的决定是,他们使用试用版的次数是否超过允许的风险高于他们因无聊保护而停止使用您的应用程序的风险。验证如果您可以假设他们有网络连接,那么您可以使用一些唯一的ID在线验证许可证(仅在他们第一次运行您的应用程序时)(即使它是关于Windows8的,您可以在这篇文章中查看)。服务器端验证可能非常棘手(如果您想以正确的方式进行),这篇文章中解释了以正确方式管理它的程序流程示例。数据混淆/加密您的许可证文件/数据现在位于安全的地方。很少有饼干会找到它。现在你需要另一个步骤:混淆。如果您的许可证数据在找到您的文件后是纯文本,那么更改它就太容易了。您有一些选择(按增加的安全性和复杂性排序):请注意,数据混淆/加密可以与上述隐写术结合使用(例如,在图像中隐藏加密的许可证文件)。代码混淆如果您没有使用非对称加密进行许可签名,最后一步是混淆代码。无论您做什么,他们都可以看到您的代码、检查您的算法并进行修复。抱歉,您正在部署食谱!如果需要,您可以使用混淆器进行混淆,但我强烈建议将许可证检查移到不太明显的位置。我喜欢这种方法,因为他们会看到有许可证检查,但是……他们找不到许可证代码。当然,任何好的破解器都可以在10分钟内解决这个问题,但您可以(稍微多一点)安全地随机破解。结论总而言之,这里列出了您可以采取哪些措施来提供更强的许可检查(当然,您可以跳过一个或多个步骤,但这会降低安全性):附录:软件保护加密狗有关硬件密钥的小附录(软件保护加密狗).它们是保护软件的重要工具,但您必须更仔细地设计保护。您可以假设硬件本身是高度安全的,但缺点是它与计算机的连接以及与软件的通信。想象一下,只要将许可证存储到密钥中,破解者就可以使用外部USB(假设您的SPD是USB)与多台计算机共享同一个密钥。您还应该在密钥中存储一些硬件唯一ID,但在这种情况下,弱点是连接(硬件可以由软件驱动程序模拟)。这是一个非常简单的黑客攻击,这种错误的安全感(“我正在使用软件保护加密狗,我的软件是安全的”)将使您的应用程序更容易受到攻击(因为您可能会忘记其他基本保护措施,例如简化许可证管理)。使用SPD保护不良设计的成本与收益应该让您考虑使用普通的USB笔式驱动器。对于SPD,它的价格为1美元,而不是15/20美元(或更多),并且您对随意破解者具有相同级别的保护。当然,它不会阻止严重的cookie,但设计不佳的SPD也不会。真正的保护(假设您没有在支持DRM的设备上运行)是一个加密狗,它也可以执行您的代码。如果您可以将一些基本算法(至少解密重要的和动态的支持文件)放入密钥中,然后破解您的软件,他们将需要破解硬件。对于一个半像样的加密狗来说,这是一项非常非常困难的任务。你设计得越仔细,你转移到密钥的代码越多,你就会越安全。无论如何,您应该对营销活动持怀疑态度:使用加密狗保护软件并不容易。它可以(更)安全,但并不像供应商说的那么容易。在我看来,与其好处相比,即插即用保护的成本太高了(好处=让黑客的日子更难过了)。不幸的是,无论您在客户计算机上存储什么许可证信息都可能被滥用(因为这是他们的计算机!)。唯一安全的方法是让您的程序通过远程服务签入,这显然需要大量开销。我自己的方法是,如果客户弄乱了他们的许可证密钥,那么他们应该会遇到问题,而您没有义务提供帮助。我会确保您的密钥包含有关它正在运行的机器的信息(以防止简单地复制密钥),但在其他方面保持非常简单。在我自己研究许可的过程中,我发现了一个我倾向于坚持的哲学——通过复杂的许可设置而不是通过盗版,你会赶走更多的潜在客户。我的建议是你反转你的逻辑-与其允许删除许可证密钥以重新开始免费试用,不如强制他们拥有许可证密钥来解锁整个应用程序?如果您正在写信给HKEY_CURRENT_USER,则不需要管理权限。另一方面,写入HKEY_LOCAL_MACHINE需要管理权限。当您打开写入密钥时,请确保像这样调用它RegistryKeykey=Registry.CurrentUser.OpenSubKey(@"SoftwareYourAppPath",true);如果这对你不起作用,有一个技巧可以写入可执行文件本身,但那是另一回事了。C#学习教程就是这些:我可以在哪里存储(和管理)应用程序许可信息?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
