当前位置:  开发笔记 > 后端 > 正文

如何防止他人使用我的.Net程序集?

如何解决《如何防止他人使用我的.Net程序集?》经验,为你挑选了3个好方法。

我有一个程序集,除了指定的可执行文件之外,应该被任何应用程序使用.请给我一些指示.



1> Hallgrim..:

您可以使用相同的密钥对程序集和可执行文件进行签名,然后检查要保护的类的构造函数:

public class NotForAnyoneElse {
  public NotForAnyoneElse() {
    if (typeof(NotForAnyoneElse).Assembly.GetName().GetPublicKeyToken() != Assembly.GetEntryAssembly().GetName().GetPublicKeyToken()) {
      throw new SomeException(...);
    }
  }
}


我认为下面提到的InternalsVisibleTo选项更好.没有编码,它与这个答案是一回事.您需要签署InternalsVisibleTo的程序集才能工作.使用这两种技术,其他用户可以查看方法并使用反射调用它们; 但如果调用程序集没有相同的密钥,则这两种技术都将失败.

2> Lou Franco..:

在.Net 2.0或更高版本中,将所有内容都设置为内部,然后使用朋友程序集

http://msdn.microsoft.com/en-us/library/0tke9fxk.aspx

这不会停止反思.我想结合下面的一些信息.如果你绝对需要阻止任何人打电话,可能最好的解决方案是:

    ILMerge .exe和.dll

    混淆最终的.exe

您还可以检查调用堆栈并获取每个调用者的程序集,并确保它们都使用与程序集相同的键进行签名.



3> Chris Smith..:

没有跳过一些篮球,100%完全不可能.

使用.NET的一个好处是能够使用反射,即加载程序集并检查它,动态调用方法等.这使得VB.NET和F#之间的互操作成为可能.

但是,由于您的代码位于托管程序集中,这意味着任何人都可以添加对代码的引用并调用其公共方法或使用反射和调用私有方法加载它.即使你"混淆"了你的代码,人们仍然可以使用反射并调用你的代码.但是,由于所有的名字都会被掩盖做任何事情都是非常困难的.

如果您必须以阻止其他人执行它的方式发送您的.NET代码,您可能能够将您的二进制文件(编译为x86)并运送这些二进制文件.

我不知道你的具体情况,但混淆应该足够好.

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有