如何保护.NET DLL';s

如何保护.NET DLL';s,.net,vb.net,programming-languages,.net,Vb.net,Programming Languages,为您正在处理的项目保护DLL的最佳实践是什么?我感兴趣开发的某些DLL将具有数据访问层(DAL)和业务逻辑层(BLL)功能。可能有几个应用程序最终可以访问这些DLL来执行特定于业务的功能 保护这些DLL的最佳方法是什么,以便它们只能由创建者的应用程序使用 阻止未经授权使用DLL的安全性和防止可能的反编译的安全性都是可取的。使用开放密钥机制建立身份验证。只有提供了有效的密钥和令牌,DLL中的函数才能工作。一个选项可能是将DLL中所有公开的类标记为“内部”而不是“公共”,然后使用DLL中的属性显式命

为您正在处理的项目保护DLL的最佳实践是什么?我感兴趣开发的某些DLL将具有数据访问层(DAL)和业务逻辑层(BLL)功能。可能有几个应用程序最终可以访问这些DLL来执行特定于业务的功能

保护这些DLL的最佳方法是什么,以便它们只能由创建者的应用程序使用


阻止未经授权使用DLL的安全性和防止可能的反编译的安全性都是可取的。

使用开放密钥机制建立身份验证。只有提供了有效的密钥和令牌,DLL中的函数才能工作。

一个选项可能是将DLL中所有公开的类标记为“内部”而不是“公共”,然后使用DLL中的属性显式命名允许使用内部类型的DLL(可能还有EXE)。这可能需要对所有参与者进行strong命名,但无论如何,这是一件好事

最终,当你的代码在黑客的机器上执行时,没有绝对的方法可以阻止一个有决心的黑客访问你的代码。机器可以执行的所有代码都可以用足够先进的工具和经验进行分解和重新组装成其他代码

实现代码安全性的最佳方法是问这样一个问题:“我们想让某人在没有许可证或授权的情况下使用此代码有多困难,我们愿意为此花费多少时间/金钱?”如果您什么都不做,某人很容易在其他项目中使用您的DLL。如果你做一些简单的事情,你可以让别人不方便使用你的DLL在其他地方。如果你投入数月的努力,你可能会让别人很难误用你的代码,但你永远不会让它成为不可能

我能想象的一种近乎绝对安全的技术是:根本不要在客户端(或黑客)的机器上执行代码。而是运行一个web服务,并将您的代码保存在服务器上,黑客不能随意在您的进程上启动调试器或反汇编您的代码。然后,代码安全性由服务器位置的物理安全性和服务器端口的网络访问安全性定义。这些攻击向量比你对在黑客机器上执行的代码所做的任何事情都要难规避许多数量级


对于一些软件公司来说,将一部分应用程序从客户端移动到云端并不是为了获得更好的可扩展性、更容易的更新或更低的成本,而是为了代码安全和防止盗版。

如果有人能够访问带有所有这些程序集的机器,与重用它们相比,您更需要担心的是,它们可能直接进入数据库,而不是使用您的程序集


如果这是一个桌面应用程序或其他东西,而您直接访问数据库,那么您需要重新考虑您的应用程序,通过web服务或其他方式访问数据,而不是直接访问数据库。

如果您以.NET DLL的形式将其发送给客户端,则保护您的知识产权实际上是不可能的。您可以在云中托管应用程序逻辑,尽管这可能不适合您的场景


即使是“最好的”混淆器也不是绝对正确的。你可能会阻止一个随意的黑客,但正如dthorpe所说,如果有人真的想反编译你的程序集,他们会的。

你的意思是保护他们不被反编译,还是仅仅保护他们不被使用?目前我正在寻找使用,但实际上两者都在寻找。相应地更新了问题。你能澄清或提供指向某类示例的链接吗?不太可能。NET也允许您引用exe文件程序集,所以它几乎没有什么区别。即使在可执行文件中,几乎任何东西似乎都可以相对轻松地反编译。那么,在exe中包含这一点实际上能提供很多帮助吗?根据Brian的观点,我收回了“将代码拉入DLL”的建议。其余的情况是:没有绝对的锁定,所以你必须决定你愿意投资多少,以使黑客攻击的结果更加不方便。+1表示“根本不在客户端(或黑客)的机器上执行代码”,该场景存在于复制环境中。这些机器在任何给定的时间都可能连接或不连接互联网,这使得web服务不是一个选项。。。我不明白你的意思。直接与数据库对话是不好的,您仍然没有理由直接与数据库对话。