如何保护.NET DLL

时间:2010-12-13 18:24:14

标签: .net vb.net programming-languages

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

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

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

4 个答案:

答案 0 :(得分:5)

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

最终,当您的代码在黑客的计算机上执行时,没有绝对的方法可以阻止确定的黑客访问您的代码。可以通过足够先进的工具和经验将机器可执行的所有代码拆解并重新组装成其他代码。

解决代码安全问题的最佳方法是提出一个问题:“如果没有许可证或授权,我们有多难让某人使用此代码,以及我们愿意花多少时间/金钱来实现这一目标? “如果你什么都不做,那么有人可以很容易地在其他项目中使用你的DLL。如果你做了一些简单的事情,你可能会让别人在其他地方使用你的DLL变得不方便。如果你投入了数月的努力,你可能会让某人滥用你的代码变得非常困难,但你永远无法让它变得不可能。

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

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

答案 1 :(得分:1)

使用Open Key机制建立身份验证。只有在提供有效密钥和令牌时,DLL中的函数才会起作用。

答案 2 :(得分:1)

如果有人可以使用所有这些程序集访问该计算机,那么除了有人重用它们之外,您还有更多的担心,他们可以直接转到数据库而不是使用程序集。

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

答案 3 :(得分:1)

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

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