许可WPF、Silverlight和WP7程序集

3
我正在寻找一种许可证解决方案,用于对WPF、Silverlight和WP7程序集进行授权。所涉及的程序集是一个图表控件,具有跨平台使用的单个API。我正在为每个平台(WPF、SL、WP7)创建单独的MSI,用户可以下载和安装。这样可以在其GAC中注册程序集以供开发使用。
我希望确保单个开发许可证仅由一个开发人员使用。它不必非常安全,只要足以阻止可能的黑客即可。最好能够覆盖所有三个平台的解决方案会更好。
我已经拥有了一个跨平台混淆器,我非常满意。遗憾的是,它不包括许可证!
编辑:附加要求是,我将允许用户从购买日期起一年内下载更新,但无论是否更新,他们购买的程序集都将永久供其使用。程序集将进行再分发,因此任何许可模型都必须可重新分发到WPF / SL / WP7平台上。
欢迎您提出建议/评论。
最好的问候,

这更适合于http://programmers.stackexchange.com - paparazzo
能否移动它?如果我知道怎么做,我会这样做的,否则就重新发布。问候, - Dr. Andrew Burnett-Thompson
2
Silverlight和WP7没有内置组件许可技术,您可能需要考虑其他非技术手段来强制客户使用组件。 - Jeff Wilcox
@JeffWilcox 感谢您的评论。有什么想法吗?我计划在下个月发布一个组件。刚刚完成了代码并修复了一些错误。下一个任务是打包、电子商务和许可证。我只需要一些基本的东西来“完成工作”并防止低级别的许可证滥用。 - Dr. Andrew Burnett-Thompson
1个回答

1

针对您关于许可方法“能够完成工作”并防止低级别的许可滥用的要求,我个人建议不要太花哨;也就是避免使用基于Web激活/维护的许可。我的建议与此处所述的方法类似 here

  1. 选择对称加密算法,使用上述链接中描述的.NET库之一。
  2. 使用随机生成器创建所需的加密密钥(如果需要,请联系我,我很乐意分享我开发的生成各种随机字符串/密钥的代码),也可以使用.NET类通过生成伪随机数(RNGCryptoServiceProvider)自行完成。
  3. 将密钥进行转换/自定义哈希以提供新的“哈希加密密钥”。
  4. 使用此密钥生成初始化向量(IV),并加密您的许可文件。

现在如何部署应用程序(许可方面)取决于您。以下两种方法适用于上述所有三种应用程序类型,并将为每个产品的许可提供某些一致性。上述方法使用两个文件进行许可。'ProductKey.myExtension'和'LicenceFile.myOtherExtension'。第一个包含随机生成的密钥,将以与许可证生成器应用程序中相同的方式“哈希”/转换(您将需要单独的(小型)应用程序来“剪切”/创建许可证文件)。第二个是加密文件,其中包含用户信息、许可期等。

A. 您现在可以为您的应用程序提供一个安装包,该安装包将在相关目录(即C:\Pogram Files等)中安装您的应用程序,而不提供许可文件,在这种情况下,您可以使用许可证安装程序部署许可文件。然后,可以为每个用户分别安装许可证,采用“Environment.SpecialFolder”以确保每个用户都有自己的许可证(当然,这将假定“管理员”最初为所有用户安装了应用程序,并且许可证安装包将按用户逐个运行)。注意:我目前不熟悉WP7应用程序和这种情况的具体情况。

B. 第二种方法是允许个别用户安装该应用程序,并在应用程序安装时安装相关的许可证文件。

我已经使用了这种方法部署了多个 WinForm 应用程序,在经过深入的研究后,它似乎运行良好。希望这对您有所帮助。


1
嗨,安德鲁,抱歉回复你有些晚了,今天是那种忙碌的日子。在编写这种方法时,您根本不需要涉及System.Reflection或'IL Injection'。如果您需要帮助,请随时给我发电子邮件。您目前使用哪个混淆包?我目前正在使用PreEmptive Solution的'Dotfuscator',这被证明是一种昂贵的选择! - MoonKnight
1
抱歉,我明白你的意思。是的,即使进行了混淆,仍然有可能反映CIL代码,但他们必须非常出色并且愿意浪费大量时间。这就是为什么在加密之前,我会包括对加密密钥进行“哈希”/转换-它会“扩散”解密代码,并使黑客更加困惑,因为黑客当然正在入口点寻找许可证信息... - MoonKnight
1
此外,使用“哈希”算法,您可以在启动时(检查许可证时)存储“哈希”的结果,并在某些核心处理期间再次运行廉价的“哈希”过程以验证ProductKey.txt。任何对初始检查的篡改都会导致此过程失败(关闭应用程序并向您发送电子邮件?)。这将为他们提供更多要筛选的CIL代码行! - MoonKnight
1
编写安全代码似乎等同于编写意大利面条式代码。有趣的是,我正在开发的组件相当复杂,代码块被分解到内部类中以允许混淆完成其工作。幸运的是,它足够小,可以导航。我会尝试一下 - 感谢您的信息,并随时发送给我您的联系方式(请参阅我的个人资料以获取电子邮件地址)。问候, - Dr. Andrew Burnett-Thompson
1
最近似乎市场上存在一个WP7/SL/WPF跨平台许可证的空缺,如果你有兴趣建立一个的话;-) - Dr. Andrew Burnett-Thompson
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接