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

最近在想怎么才能防止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

你可能感兴趣的:(dll)