保护许可证验证

sar*_*rat 5 .net c#

我已经实现了一个C#程序集,它验证了应用程序的许可证.问题是将此传送给客户端,他们可以轻松找到我们用来加密字符串的密钥.

签名

签署应用程序有点痛苦,因为正在使用的几个组件未经过签名和编译.所以我们必须用snk文件再次手动拆解和组装.装配负载是一种连锁反应.我想澄清只有正在加载的直接程序集才需要签名?从这些卫星组件进一步装载的组件也需要签名?

困惑

社区版并没有真正混淆字符串.代码基本上是可见的.我应该去专业版吗?

我对此很陌生.请帮忙.

agi*_*hua 5

我想指出一个问题,我相信您在尝试保护您的软件时已经意识到这一问题。由于运行应用程序的计算机必须能够“查看”您使用的所有代码和数据,因此其他人总会有某种方式对您的应用程序进行逆向工程。用于保护您的软件的所有密钥和机密都将在随附的数据和程序集中提供...

签约

签名(强命名)用于阻止其他开发人员用他们控制的组件替换您的关键程序集(许可证验证),这将允许他们绕过您的保护。由强命名程序集加载的所有程序集本身都必须是强命名的。这样做的原因是,否则其他人可能会用实际上破坏许可证验证功能的新实现替换次要依赖项之一(链下游的非强命名程序集)。

是的,您必须对链下游的所有程序集进行强命名。我从经验中知道,这可能会很痛苦,因为许多免费库不是作为强命名程序集分发的。在许多情况下,您可以使用 Ilmerge 合并两个 DLL,然后对生成的组合 DLL 进行强命名来解决此问题。请参阅此处的 ilmerge 调用示例

混淆

有免费的混淆工具可以正确地混淆字符串,否则您必须使用更高级别的大多数付费混淆工具。我个人喜欢的工具是Eazfuscator,它功能齐全且免费。除了混淆之外,Eazfuscator 还支持合并程序集和强命名。

许可证验证注释

自己实施许可证验证是一件痛苦且容易出错的事情。我建议您考虑其他替代方案,要么根本不进行许可证验证,因为它会增加软件的维护程度和复杂性,而实际上可能不会带来任何经济利益。或者查看现成的许可证实现,例如这个小选择(按初始价格顺序):

这只是可用内容的一小部分,搜索网络将提供许多很多现成的解决方案。

免责声明:我开发了上述“简单软件许可”产品,作为Donationcoder 新年编程挑战的一部分。