【问题标题】:How do I prevent my .Net dll from being added as a reference?如何防止我的 .Net dll 被添加为参考?
【发布时间】:2009-07-21 21:58:29
【问题描述】:

假设我编写了一个 .Net dll 并希望将它与我的应用程序一起分发。如何防止任何精通安装 VS 副本的用户将对此 dll 的引用添加到他们自己的应用程序中?

【问题讨论】:

    标签: .net visual-studio security dll


    【解决方案1】:

    没有办法阻止用户添加参考。这是您的 DLL 部分的被动操作,您无法阻止它发生。

    不过,您可以做的就是让添加引用成为不值得的操作。例如,如果 DLL 中的所有类型都是内部的或私有的,则不仅仅是为用户添加引用以使用 DLL 中的类型。此外,混淆 DLL 会使它变得更加困难。

    【讨论】:

    • Visual Studio 中内置了一个免费的混淆器(如果需要)。 (工具 -> Dotfuscator 社区版)
    • 非常感谢 - 我肯定会看看如何保护我的程序集,尽管我想到如果 dll 中的所有类型都是私有的或内部的,那么该 dll 不会很有用。我还看了一下混淆 - 快速玩了 Dotfuscator CE,这看起来不错 - 但可能需要获得专业版,因为 CE 看起来不够强大。
    • 您可以将其他程序集设为您的朋友,然后他们就可以访问内部类型
    【解决方案2】:

    您不能阻止某人添加对您的 dll 的引用。但是,如果他们确实添加了引用,您可以做的是让他们难以使用它。

    代码访问安全性 (CAS) 可用于防止未经授权的代码调用程序集,但这会影响调用的性能,并且为此目的是多余的。

    另一种方法是将 dll 中的所有内容标记为内部。如果您有其他程序集需要访问 dll 中的类,请使用 InteralsVisibleTo 属性使它们成为朋友程序集。这允许其他程序集访问您的 dll 的内部类。将其与已签名的程序集(与InternalsVisibleTo 定义一起使用)绑定在一起,就足够了。

    【讨论】:

      【解决方案3】:

      您可能会发现“StrongNameIdentityPermission”类很有帮助

      http://msdn.microsoft.com/en-us/library/system.security.permissions.strongnameidentitypermission.aspx

      【讨论】:

        【解决方案4】:

        我严重怀疑这是可能的。即使是这样,一个全力以赴的程序集也可以伪造所有证据并伪装成你的程序。

        【讨论】:

          【解决方案5】:

          虽然 .NET 不允许真正的静态链接,但您可以伪造它,将您的 dll 和 exe 打包到一个程序集中。这是一个可以做到这一点的工具: ILMerge 可能还有其他人。

          【讨论】:

          • 即使您使用 ILMerge 链接所有内容,仍然有人可以添加 exe 作为参考并轻松调用任何公共方法。
          【解决方案6】:

          您可以混淆 DLL(工具 -> Dotfuscator 社区版),使其不值得引用您的 DLL。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-09
            • 2016-08-01
            • 1970-01-01
            • 2012-11-01
            相关资源
            最近更新 更多