大家做项目开发一般都是分层的,比如UI层,业务层,数据访问层。业务层引用数据访问层的DLL(比如dataAccess.dll),并使用dataAccess.dll中的方法。当项目完成并给客户用了,可有些心里BT的客户这个时候也可以请个稍微懂NET的人来引用你的dataAccess.dll并调用其中的方法搞破坏。比如可以直接使用里面的ChangePwd(string UserName,string Pwd)方法把其他用户的密码改了,这个时候就你就.......
具体我不知道怎么做,我想实现的是dataAccess.dll只有我能调用,其他外部不能调用急用,谢谢!

解决方案 »

  1.   

    首先要防止反编译,可以混淆下。然后生成数字签名文件(.SNK),为类添加 StrongNameIdentityPermissionAttribute属性,指定SNK文件中的公钥,就可确保只有指定强名称的caller才能创建这个类的实例。 
    sn -k c:\Key.snk 生成密钥对snk文件. 程序集中:[assembly: AssemblyKeyFile("c:\\Key.snk")] 
    sn -p c:\Key.snk  c:\public.snk 从密钥对中提取公钥 
    然后用下面的命令: 
    sn -tp c:\public.snk 公钥值, 把它传给StrongNameIdentityPermissionAttribute的PublicKey,形如: 
    [StrongNameIdentityPermissionAttribute(SecurityAction.LinkDemand, PublicKey="00240000048...97e85d098615")] 
    public class dataAccess{...}这样为dataAccess指定了PublicKey属性,只有与PublicKey配对的私钥签署的程序集才能创建dataAccess的实例。
      

  2.   

    楼上说的混淆。楼主可以用 xencode  这个很牛 X,也可以把多人 dll 合成一人。建议学习。
      

  3.   

    把DLL文件做一下反编译处理,(有个小软件,网上soso)客户反编译不出来,不就好了
      

  4.   

    把DLL文件做一下反编译处理,(有个小软件,网上soso)客户反编译不出来,不就好了
      

  5.   

    现在都不管我的DLL被人反编译了,
     因为业务层要访问 dataAccess.dll 所以 dataAccess.dll里面的类肯定是pulibc 的吧@!
    这样的话,所有人拿到dataAccess.dll都能调用! 所以想让dataAccess.dll只能给业务层访问不能给其他人访问
      

  6.   

    用过.SNK,强名称 可是没出效果,可能是我笨,我用的vs2005 能不能给个工程例子给我
    [email protected] 谢谢
      

  7.   

    回楼主:不好意思,在VS2005下,这种方法失效了。
    找了下资料:得到这么两句
    在 .NET Framework 1.0 和 1.1 版中,即使调用程序集受到完全信任,对标识权限的要求也仍然有效。即,即使调用程序集已获得完全信任,如果该程序集不满足要求的条件,对标识权限的请求也将失败。在 .NET Framework 2.0 版中,如果调用程序集已获得完全信任,则对标识权限的要求将无效。这样做可确保所有权限的一致性,避免了标识权限的处理特殊化现象。
      

  8.   

    要彻底防范是防范不了的.只能说增加客户不按照正常流程去使用的难度.
    混淆器是种方法而已.
    我有点不明白.为什么你的修改密码的函数不需要提供原始的用户名和密码就能修改?
    如果这个方法是administrator的, 客户没权限去操作,那你何不把这个函数和所有administrator的方法都独立到另一个DLL中不发给客户.
      

  9.   

    大哥.我不知道你什么意思,你的意思是说.NET 20对程序集是完全信任,没什么可不可以调用,,
    不能限制调用着了???
      

  10.   


    ChangePwd(string UserName,string Pwd)不是只针对这个方法,如果是AddUser()添加用户!!!
    本来添加用户是管理员才可以添加的!
    我只要找到这个DataAcces.Dll的入口就能添加用户,根本前面没有经过我的业务层的判断是否是管理员归根到底是就不想用户非法操作数据层!!一定要经过业务层的验证,让业务层进行调用数据层!
      

  11.   

    但现在的问题是不用反编译都能使用DLL
      

  12.   

    http://www.cnblogs.com/BearsTaR/archive/2006/05/25/ProtectDll.html
    大家能否看下这个例子!!!我是试过了,照了上面说了!!没出现效果,不知道怎么搞!!郁闷ING..............
      

  13.   

    前面说过,这种方法在VS2003下可以,到了VS2005,VS2008都不行了. 我以前只在VS2003下试过,所以以为 VS2005,VS2008也可以。
    请参考:
    http://msdn.microsoft.com/zh-cn/library/system.security.permissions.strongnameidentitypermission(VS.85).aspx
      

  14.   

    感觉不可能不被调用
    方法只有你把源代码隐藏
    不让他们看到源代码
    这样就不能修改代码
    自然就不会调用你的dll了
      

  15.   

    呵呵,不是的!!
    我想我最终的目的是安全性!即使服务器被人入侵话,被人更改ASPX,看到一些重要数据的话!那不好!!
    数据的安全我是放在第一位的,功能的话都是大同小异!
      

  16.   

    谢谢,我也用过混淆器,但是我是C/S, 
    混淆后自己都无法调用了,可能是因为aspx也被混淆后的DLL视为外部调用了!
    .aspx文件也能混淆??????貌似只有DLL和EXE文件才能用混淆器吧???
      

  17.   

      用webservice把你的业务逻辑层封装,然后部署到安全的服务器,UI层直接调用webservice,别说你的webservice也是运行在客户的服务器上。
      

  18.   

    客户干什么乱改自己的数据?况且如果客户要改自己的数据,打开数据库改就是啊,它没必要通过你的dll改啊。
      

  19.   

    最主要的是如何保护你的dll文件,防止被反编译才是王道。
    可以上面提及的dll混淆,加强名称方法。
      

  20.   

    dll确实拿来就能用,不需要反编译的。只是这个应该就是客户的问题了把,他们干嘛不把自己的dll保护好呢
      

  21.   

    最主要的是如何保护你的dll文件,防止被反编译才是王道。
    可以上面提及的dll混淆,加强名称方法。