如何保护dll?

Jos*_*osh 15 c# dll

如何保护我项目的dll,使其无法被其他人引用和使用?

谢谢

RBe*_*eig 22

简短的回答是,除了显而易见的事情之外,你无能为力.

您可能想要考虑的显而易见的事情(大致按照增加难度和降低合理性的顺序)包括:

  • 静态链接所以没有DLL可以攻击.
  • 剥去所有符号.
  • 使用.DEF文件和导入库只能使用导出ID才能知道匿名导出.
  • 将DLL保留在资源中,并在运行时将其暴露在文件系统中(在一个适当模糊的名称下,甚至可能在运行时生成).
  • 隐藏工厂方法背后的所有实际函数,这些函数用于交换真实方法的函数指针表的秘密(更好的,秘密知识的证明).
  • 使用从恶意软件世界借来的反调试技术来防止逆向工程.(请注意,这可能会让您从AV工具中得到误报.)

无论如何,充分确定的用户仍然可以找到使用它的方法.一个体面的反汇编程序将迅速提供所需的所有信息.

请注意,如果您的DLL实际上是一个COM对象,或者更糟糕的是CLR程序集,那么有大量的运行时类型信息,您无法在不破坏其预期用途的情况下将其剥离.

编辑:既然你已经重申暗示C#和.NET是环境而不是用C编写的纯Win32 DLL,那么我真的应该将上面的内容修改为"你不能,但是......"

很长一段时间以来,混淆工具一直存在一个市场,需要处理必须提供可编译源的环境,但是您不希望提供有用的资源.有一些C#产品在这个市场上发挥作用,看起来至少有一个产品已经上市了.

因为加载程序集需要从框架中付出相当大的努力,所以很可能存在权限位,它们对程序集的诚实提供者和使用者施加一些控制.我没有看到任何关于这些方法提供的真正安全性的讨论,只是不知道它们对确定的攻击有多么有效.

很多将取决于您的用例.如果您只想防止随便使用,您可能会找到适合您的解决方案.如果您想保护有价值的商业机密免受逆向工程和重用,您可能不会那么开心.


j_r*_*ker 12

您将面临与DRM的支持者相同的问题.

如果您的程序(您希望能够运行DLL)可由某个用户帐户运行,那么没有任何东西可以阻止一个充分确定的程序员,该程序员可以作为该用户登录,从而隔离执行解密和使用的代码解密你的DLL并运行它.

您当然可以使执行此逆向工程变得不方便,这可能就足够了.


Pau*_*der 5

看一下StrongNameIdentityPermissionAttribute.它允许您声明对程序集的访问权限.结合良好的代码保护工具(如CodeVeil(免责声明,我销售CodeVeil)),你会很高兴.