怎么可能很容易找到,你发布给用户的程序不要带那个.SNK文件,但是要使用你的DLL文件,就必须要.SNK文件!我也是前些日子才领悟,强名称的使用方法的!
具体的可以查看:
http://community.csdn.net/Expert/topic/3132/3132151.xml?temp=.9306757

解决方案 »

  1.   

    我曾经试着获得DLL中。SNK文件中的密钥,但是由于本人能力有限,无法破译 汇编代码!!无法得到公钥 ,我觉得强名还是可以的 ,很安全的
     m777(m777)
    说的我同意
      

  2.   

    //有人说用强名,可是公钥很容易就得到了呀,别人有公钥,就可以加载你的DLL。那样的
    //话你的程序里的任何算法以及技术特点都暴露在别人面前了。
    我知道一个不错得办法是在程序内部加锁。比如你得一个类MyClass。正常情况下定义:
    mc = new MyClass();可以正常运行,但是会弹出一个声明所有权限的dialog。里面加上你自己的license信息。
    用户如果希望去处这个,必须调用static方法MyClass.Register(string regCode, string user)
    只有正确调用之后,你才会去除上面的对话框。//人说用混淆器,可以混淆器不能对变量值时行混淆,别人也可以看到一些你的关键信息,
    //比如说计算注册码时生成的正确注册码。
    混淆器能够加入大量的废码,并且大多数都可以实现变量的重新命名。使得原本容易理解和分析的反编译码变得非常的难读。如果只是为了保护自己的源码不被别人使用,应该足够满足需要了。
    当然,你说容易暴露一些重要的信息,这一点很正确。比如你hard code在程序中的访问密码,混淆器是没有办法帮你把他加密的。不过说实话,一个稍微大型的程序,而且还是经过混淆器加密的,你要从大量的code中找到那个那个你定义密码的地方绝对不是容易的事情。更何况,你还可以自己对这种字符串进行加密,然后调用程序中的一个解码函数解密。这样应该就万无一失了吧!
      

  3.   

    看看这位大侠下面这篇文章,你就会比较深入的了解:http://www.cnblogs.com/flier/archive/2004/07/08/22349.aspx
      

  4.   

    首先我想说说我的理解:
    1、强名的方法。
    使用强名的方法时,私钥可以不发布,但公钥一定要发布。如果别人有了你的公钥,一样可以引用你的DLL。这一点应该是勿庸质疑的。至于别人如何得到你的公钥,那办法太多了。至少我知道ILDASM就可以做到。
    2、混淆器。
    虽然混淆器可以加入一些看不懂的信息,但对于程序运行时产生的变量值,别人也可以有办法到得。一些关键的变量值,如:产品序号、注册码等等无疑是毫无保留的暴露在光天化日之下。
    MS的建议也是使用第三方软件(混淆器)来实现。
    不知各位还有没有其他更好的方法?