【问题标题】:.NET 'Private' Application.NET“私人”应用程序
【发布时间】:2010-09-23 17:51:53
【问题描述】:

我创建了一个 .NET (WPF) 应用程序,并将其编译为 .EXE。然后我创建第二个项目,并添加对编译的 .exe 的引用,我可以看到所有的类和表单,并且可以将它们用于自动化等。

我想防止其他人将我编译的 .exe 用作 .dll,因此我将所有类都更改为“朋友”而不是“公共”,但这不适用于 (wpf) 表单。而且每次我创建一个新班级时,我都必须记得将其更改为“朋友”。

那么,有没有更好的解决方案来防止您的应用被用作 DLL?

更新:我知道 .NET 很容易反编译,并且访问修饰符可以被确定的“破解者”修改。但我只想让它更难一点,而不仅仅是添加参考。

也许我应该以不同的方式陈述我的问题:如何在我的项目“朋友”中创建所有表单/类,而不为每个项目指定它。

【问题讨论】:

标签: .net reference private friend


【解决方案1】:

最终,你无能为力;反射将让您绕过您所做的任何访问声明。

您可以混淆您的代码,使其更难理解和使用,但它不能防止确定的入侵。

【讨论】:

  • 你 100% 确定吗?我只是偶然发现了msdn.microsoft.com/en-us/library/wd40t7ad.aspx。强命名程序集。在 .Net 4.0 之前,它们很容易被绕过,但从 4.0 开始,它们应该是可靠的。我会阅读更多关于它们的信息,如果没有解决方案,我会接受你的回答。谢谢。
  • @Drazic:强命名程序集仅保证它们及其引用没有被更改。任何人都可以引用强命名程序集并使用其声明的类型。
  • 感谢 Randolpho,但如果我将所有内容都设为“朋友”,然后为我的程序集命名,难道不能解决问题吗?
  • @Drazic:不。即使它们是内部的,或者即使它们是完全私有的,也不能阻止反射实例化类型。
【解决方案2】:

做到这一点的最佳方法是在最终用户许可协议中注明不允许这样做。

将课程更改为朋友不会阻止某人使用它,如果他们真的想要的话。他们所要做的就是修改 DLL 以使类公开,而您的保护系统已失败。

【讨论】:

  • 通常我讨厌 EULA 和它们所代表的一切,所以我不敢相信我在这里同意,但是……从法律上讲,EULA 可能是一个很好的预防措施。 +1
  • 谢谢马克,但如果有人真的下定决心,他们甚至可以提取代码。我唯一想要的就是让它变得更难,而不仅仅是添加参考。
猜你喜欢
  • 1970-01-01
  • 2015-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多