c# - 如何保护dll?

标签 c# dll

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

谢谢

最佳答案

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

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

  • 静态链接,因此没有可攻击的 DLL。
  • 去除所有符号。
  • 使用 .DEF 文件和导入库只进行匿名导出,仅通过其导出 ID 知道。
  • 将 DLL 保存在资源中并仅在运行时将其公开在文件系统中(以适当的模糊名称,甚至可能在运行时生成)。
  • 将所有真实函数隐藏在一个工厂方法后面,该方法将 secret (更好的是 secret 知识证明)交换为指向真实方法的函数指针表。
  • 使用从恶意软件领域借鉴的反调试技术来防止逆向工程。 (请注意,这可能会让您从 AV 工具中得到误报。)

无论如何,足够坚定的用户仍然可以找到使用它的方法。一个像样的反汇编程序将快速提供所有需要的信息。

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

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

长期以来,混淆工具市场一直存在,用于处理强制提供可编译源代码但您不想提供有用源代码的环境。有 C# 产品在那个市场上发挥作用,看起来至少有一个已经加入进来。

因为加载一个程序集需要框架做出如此多的努力,所以很可能有一些权限位可以对程序集的诚实提供者和使用者施加一些控制。我还没有看到任何关于这些方法所提供的真正安全性的讨论,并且根本不知道它们对确定的攻击有多有效。

很大程度上取决于您的用例。如果您只是想防止随意使用,您可能会找到适合您的解决方案。如果您想保护有值(value)的商业 secret 免遭逆向工程和重复使用,您可能不会那么高兴。

关于c# - 如何保护dll?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/805461/

相关文章:

C#,我可以在读取 SQL Server 表时插入和删除它吗

c# - 如何使 HtmlGenericControl 属性 runat = "server"。从代码中访问它?

c# - 如何在 C# 中执行 shell 脚本?

C# - String.Split() 删除最后一项

c# - CS8176 : Iterators cannot have by-reference locals

php 为什么我找不到类 'Thread'

c# - MSBuild 要求将 DLL 复制到 .NET 目录和当前构建目录

c++ - 减小 Qt GUI 应用程序的大小

c++ - DLL依赖问题/SetDLLDirectory

c++ - 隐式 DLL 链接和类内部函数