我可以在哪里存储(和管理)应用程序许可证信息? [关闭]

2024-02-18

我正在开发一个 Windows 应用程序。这需要用户注册才能使用它...... 现在,我将许可证信息作为文件存储在 APpData 中。但删除该文件会重置试用版日期。所以,我现在打算将其保存在注册表中。 但是,大多数用户在 Windows 中没有管理权限(受限用户)来访问注册表。 我能做些什么 ?我可以在哪里保存我的序列号和日期?


在我看来,关键是你必须改变how您管理您的许可证。

Where

如果他们删除许可证数据文件然后试用会重新启动?如果文件不存在,则不要启动应用程序,并在首次安装时使用安装操作创建它。

现在您面临第二个问题:如果他们卸载并重新安装应用程序怎么办?第二步是将此文件移动到应用程序数据文件夹(例如环境.SpecialFolder.CommonApplicationData http://msdn.microsoft.com/en-us/library/system.environment.specialfolder%28v=vs.110%29.aspx)。这只是更安全一点(因为卸载时应用程序数据不会被删除),但他们仍然可以手动查找并删除它。如果应用程序将由低权限用户安装,那么您无能为力(您不能尝试hide许可证位于注册表中的某个位置)。

现在这是你和crackers。他们会赢,永远。你只会让合法用户的生活变得更加艰难,所以请阅读暨格拉诺萨利斯。您可以存储许可证数据的位置:

  • Registry。优点:容易做。缺点:容易破解,对于低权限用户,每次仅对一个用户有效。注册表项(以每个用户为基础)可以通过某种方式hidden如果有\0以它的名义。看看this https://stackoverflow.com/questions/3381948/best-place-to-hide-a-key-in-the-windows-registry好贴。
  • File。优点:很容易做到,而且在我看来,比注册表更安全一点。缺点:容易破解(但可以隐藏得更多,见下文)。
  • 应用程序本身(将数据附加到您的可执行文件中,关于这一点的几句话这个帖子 https://stackoverflow.com/questions/20361909/c-sharp-play-audio-in-program-on-any-computer/20362046#20362046)。优点:更难检测。缺点:防病毒软件可能会将其视为...病毒,并且应用程序更新也可能会删除许可证(当然,如果您没有正确处理这种情况),因此它会使您的代码和部署更加复杂。

如何在文件中隐藏许可证?
如果您要使用文件(无论它位于何处),您可能会考虑让饼干的寿命(有点)困难。我现在想到两个解决方案:

  • 备用数据流 http://msdn.microsoft.com/en-us/library/windows/desktop/aa364404%28v=vs.85%29.aspx。文件附加到另一个文件,仅在 Windows 资源管理器中搜索是看不到它的。当然,有一些实用程序可以管理它们,但至少他们必须明确地搜索它。

  • 将其隐藏在应用程序数据中(例如位图,使用隐写术 http://en.wikipedia.org/wiki/Steganography)。他们只是不知道这是许可证数据,还有什么更安全的呢?问题是他们可以轻松反编译您的 C# 程序以查看您做了什么(请参阅有关代码混淆).

可能还有很多其他人(这里的幻想是我们的主人),但不要忘记......黑客会找到它(如果他们真的想要),所以你必须平衡你的努力。

How

如果保留您的许可证架构,您现在就走上了一条死路。您必须做出的决定是,他们使用试用时间超过允许时间的风险是否高于他们因无聊的保护而停止使用您的应用程序的风险。

验证
如果您可以假设他们有网络连接,那么您可以使用一些方法在线验证许可证(仅在他们第一次运行您的应用程序时)唯一身份(即使是关于 Windows 8,您也可以看看这篇文章在这里 https://stackoverflow.com/questions/16893746/udid-for-windows-8/16893863#16893863)。服务器端验证可能非常棘手(如果您想以正确的方式进行),在这个帖子 https://stackoverflow.com/questions/3381948/best-place-to-hide-a-key-in-the-windows-registry解释了以正确方式管理该程序流程的示例。

数据混淆/加密
您的许可证文件/数据现在位于安全的地方。破解者几乎找不到它。现在你需要另一个步骤:混淆。如果您的许可证数据是纯文本形式,一旦他们找到您的文件,就很容易更改它。您有一些选择(按安全性和复杂性的提高排序):

  • 混淆你的文件。如果他们无法使用简单的文本编辑器(甚至十六进制编辑器)理解文件内部的内容,那么他​​们将需要更多的时间和精力来破解它。例如,您可以压缩它们:请参阅这篇文章XML 文件压缩混淆 https://stackoverflow.com/questions/20657144/how-to-hide-xml-files-content/20657271#20657271。请注意,简单的 Base64 编码也会混淆您的文本文件。
  • 使用对称算法对它们进行加密。即使是一个非常简单的方法也能很好地工作,在这里你只是想隐藏数据。看这个帖子 https://stackoverflow.com/questions/2150703/symmetric-encrypt-decrypt-in-net举个例子。我看不出有什么理由比更简单的混淆更喜欢这种方法。
  • 用一个加密它们非对称算法. 这种加密方式 https://stackoverflow.com/questions/16261342/asymmetric-encryption-and-decryption是复杂性和安全性方面的一大进步,并且仅当许可证令牌由服务器/外部实体提供时它才会(非常)有用。在这种情况下,它将混淆使用其私钥签名的许可证。客户端应用程序将使用其公钥验证签名,即使破解者找到此文件(并反编译您的代码以读取公钥),他们仍然无法更改它,因为他们没有私钥。

请注意,数据混淆/加密可以与上述隐写术结合使用(例如将加密的许可证文件隐藏在图像内)。

代码混淆
如果您不使用非对称加密的许可证签名,那么最后一步是混淆您的代码。无论你做什么,他们都能够看到你的代码、检查你的算法并解决它。很遗憾,您正在部署说明手册!如果您愿意,可以使用混淆器进行混淆,但我强烈建议将您的许可证检查移到不太明显的地方。

  • 将所有与许可证相关的代码放在单独的 DLL 中。对其进行签名(请注意,签名的程序集可能会被反编译并重新编译以删除签名,甚至有工具几乎可以自动执行此操作)。
  • 将其打包到可执行资源中(使用不太明显的名称)并且不部署 DLL。
  • 处理事件AppDomain.AssemblyResolve http://msdn.microsoft.com/en-us/library/system.appdomain.assemblyresolve%28v=vs.110%29.aspx,当运行时需要您的 DLL 时,您将在内存中解包并返回其字节流。有关此技术的更多信息,请参见这是杰弗里·里克特的帖子 http://blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition.aspx.

我喜欢这种方法,因为他们会看到有许可证检查,但是......他们找不到许可证代码。当然,任何好的破解者都可以在 10 分钟内解决这个问题,但是您将(多一点)免受random ones.

结论

总结一下,这是您所需要的内容的列表may这样做可以提供更强大的许可证检查(当然,您可以跳过一个或多个步骤,但这会降低安全性):

  • 将许可证检查代码拆分为两个程序集(一个用于执行检查和管理许可证,另一个用于为该引擎提供公共接口)。
  • 对所有集会进行强有力的签名。
  • 嵌入您的许可引擎组装在你的里面许可接口装配(参见代码混淆部分)。
  • 创建一个用于管理您的许可证的许可证服务器。请小心确保其安全,确保安全连接和安全身份验证(请参阅验证部分)。
  • 将许可证文件保存在本地safe位置(参见Where部分)并使用非对称加密算法进行加密(参见数据混淆部分)。
  • 有时使用您的许可证服务器验证许可证(请参阅验证部分)。

附录:软件保护加密狗
关于硬件密钥的小附录(软件保护加密狗)。它们是保护您的软件的宝贵工具,但您必须更加仔细地设计您的保护。您可以假设硬件本身是高度安全的,但弱点是它与计算机的连接以及与您的软件的通信。

想象一下,只要将您的许可证存储到密钥中,破解者就可以使用外部 USB(假设您的 SPD 是 USB)与多台计算机共享同一个密钥。您还应该在密钥中存储一些硬件唯一 ID,但在这种情况下,弱点是连接(硬件可以是emulated通过软件驱动程序)。这是一个相当容易的破解和这种错误的安全感(“我正在使用软件保护适配器,我的软件就安全了”)将使您的应用程序更加容易受到攻击(因为您面临着forget其他基本保护以简化许可证管理)。

使用 SPD 设计不良的保护的成本与收益应该让您考虑使用普通的 USB 笔式驱动器。 SPD 的费用为 1 美元,而不是 15/20 美元(或更多),并且您可以获得相同级别的保护casual饼干。当然,这不会阻止serious破解者和设计不良的 SPD 都无法阻止它。

A true保护(假设你没有运行在启用 DRM 的设备) is a 加密狗也可以执行您的代码。如果可以的话move一些基本算法(至少解密重要的和动态的支持文件)到密钥中,然后要破解您的软件,他们将需要破解硬件。对于一个还算不错的加密狗来说,这是一项非常非常艰巨的任务。更仔细地设计这个,将更多代码移入密钥中,这样您就会更安全。

无论如何,您都应该对营销活动表示怀疑:使用加密狗进行软件保护并不容易。它can be(多)更安全,但并不像供应商所说的那么容易。在我看来即插即用与它的好处相比,保护成本太高了(好处=它会让破解者的生活变得更加困难)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以在哪里存储(和管理)应用程序许可证信息? [关闭] 的相关文章

随机推荐