有人能告诉我在.Net 中保护我的组件 DLL 的最佳方法是什么吗?
我编写了一些将公开可用的 DLL 组件。他们将获得相应的许可,但我想以编程方式确保没有人非法使用其解决方案中的组件。
有任何想法吗?
有人能告诉我在.Net 中保护我的组件 DLL 的最佳方法是什么吗?
我编写了一些将公开可用的 DLL 组件。他们将获得相应的许可,但我想以编程方式确保没有人非法使用其解决方案中的组件。
有任何想法吗?
试图阻止人们在技术层面做事只会导致你通过逆向工程(混淆代码永远不会阻止他们,只会减慢他们)、洁净室设计和等等。您最好的办法是向那些获得使用您的图书馆许可的人加强使用条款,并维护您执行使用条款的合法权利。
除了“不分发它们”之外,没有 100% 确定的方法可以防止未经授权的访问。
您可以查看硬件或软件许可设备。在整个代码中散布许可证检查,如果设备不存在,只需中止一切。
另一个想法是在程序集中声明所有类型,internal
然后将主应用程序 EXE 设置为具有程序InternalsVisibleTo
集属性的朋友程序集。这通常用于对内部成员进行单元测试,我不知道它在实践中的安全性。这不会阻止人们拆卸您的程序集,因此您可能仍然想要混淆,如果您正在销售库并且只打算让许可证客户使用它,这根本不起作用(因为您必须为每个人提供自定义构建顾客)。
就像 phoenix 说的那样,实际上没有办法完全保护您的代码,因为它们仍然可以通过反射器之类的工具进行反编译。
一种这样的工具是使用Dotfuscator。
由于您的代码已经被混淆,您可以在调用任何方法之前强制使用许可证密钥实例化内置类。如果您发现密钥无效/不存在,您可以显示一个消息框或返回错误/异常。有很多这样做的例子(查看 Xceed.com),但正如之前的帖子所暗示的,它只是为了阻止最终用户试图非法使用你的程序集。不能完全阻止。只要有足够的时间和动力,任何事情都可能被打破。