Jie

心若无尘,一花一世界,一鸟一天堂;心若静,已如涅磐,风声物语,皆可成言.
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

关于强名称的使用来防止DLL被非法调用

Posted on 2008-06-15 11:30  JieNet  阅读(1244)  评论(0编辑  收藏  举报
最近在想怎么才能防止DLL非法调用的问题,想来想去也没想到什么好的方法。
只想到了下面这么一个方法,但是对一般的人来说还是管用的。

平台:WinXP sp3,Visual Studio 2008 Professional(CN)

1)程序分为:MyEXE.exe 和 MyDLL.dll

2)用MyKey.snk 签名 MyEXE.exe 和 MyDLL.dll

3)测试代码如下:
//MyDLL
namespace MyDLL
{
    
sealed public class MyClass
    
{
        
static public void ShowMsg()
        
{
            
if (ValidateUser() == false)
                
return;
            Console.WriteLine(
"Hello,my name is MyDLL.MyClass.");
        }


        
/// <summary>
        
/// 验证使用者
        
/// </summary>
        
/// <returns></returns>

        static private bool ValidateUser()
        
{
            
//MyEXE, Version=1.0.0.0, Culture=neutral, PublicKeyToken=52b73f80d00d732b
            if (Assembly.GetEntryAssembly().GetName().FullName ==
                
"MyEXE, Version=1.0.0.0, Culture=neutral, PublicKeyToken=52b73f80d00d732b")
                
return true;
            
return false;
        }

    }

}



//MyEXE
namespace MyEXE
{
    
class MyProgram
    
{
        
static void Main(string[] args)
        
{
            MyDLL.MyClass.ShowMsg();
            Console.ReadLine();
        }

    }

}


4)这样就差不多了,我试验了一下用别的EXE调用DLL,失败。但是限于水平,我总感觉这样不是很好,但我现在也不知道怎么破解的了。

5)最后就是要注意代码的编写了,sealed 就 sealed,能 private 就 private