2008年(5645)
分类:
2008-04-28 14:20:13
大家做项目开发一般都是分层的,比如UI层,业务层,数据访问层。业务层引用数据访问层的DLL(比如dataAccess.dll),并使用dataAccess.dll中的方法。当项目完成并给客户用了,可有些心里BT的客户这个时候也可以请个稍微懂NET的人来引用你的dataAccess.dll并调用其中的方法搞破坏。比如可以直接使用里面的ChangePwd(string UserName,string Pwd)方法把其他用户的密码改了,这个时候就你就.......
好了,该开始说怎么保护我们的代码了:
首先我们需要把我们的程序集做成强命名的程序集。
这里我们在.NET 命令提示中输入sn -k c:\test.snk 创建一个新的随机密钥对并将其存储在 c:\test.snk 中
然后新建立类库ClassLibrary1,里面只有个类文件Class1.cs,代码如下:
以下为引用的内容: 1using System; 2 3namespace ClassLibrary1 4{ 5 public class Class1 6 { 7 public Class1() 8 { 9 // 10 // TODO: 在此处添加构造函数逻辑 11 // 12 } 13 14 public string Insert() 15 { 16 return "ok"; 17 } 18 } 19} 20 AssemblyInfo.cs代码: //............其他的就用默认 |
[assembly: AssemblyKeyFile("c:\\test.snk")] // 连接上面用强命名工具SN.exe生成的文件
接着创建个WindowApplication来调用我们的ClassLibrary1,代码:
以下为引用的内容: private void button1_Click(object sender, System.EventArgs e) { MessageBox.Show(new ClassLibrary1.Class1().Insert()); }不修改WindowApplication的AssemblyInfo.cs。 |
在这里就可以直接运行了,不过大家都看的出来,这样是能成功调用Class1中的方法的。
现在让我们来修改下Class1.cs,代码:
以下为引用的内容: using System; namespace ClassLibrary1 { [StrongNameIdentityPermissionAttribute(SecurityAction.LinkDemand, PublicKey = "00240000048000009400000006020000002400005253413100040000010001000551684edd1600" "8ccbdd337b1cf1490490d97fe0048c5f3629cc4f5104578499eace9b2a94115022edd620def472" "8b4f088291cfa77a40659afba611fdafbb7894b93a64049d439936bd0cd8dc0704625aeb735892" "e9eb3f910a49a2925af10515d935654d7adac5567ff6d780d23d587de0ff4d271da7b30680fa88" "a47a4ba4")] public class Class1 { public Class1() { // 大家做项目开发一般都是分层的,比如UI层,业务层,数据访问层。业务层引用数据访问层的DLL(比如dataAccess.dll),并使用dataAccess.dll中的方法。当项目完成并给客户用了,可有些心里BT的客户这个时候也可以请个稍微懂NET的人来引用你的dataAccess.dll并调用其中的方法搞破坏。比如可以直接使用里面的ChangePwd(string UserName,string Pwd)方法把其他用户的密码改了,这个时候就你就....... 好了,该开始说怎么保护我们的代码了: 首先我们需要把我们的程序集做成强命名的程序集。 这里我们在.NET 命令提示中输入sn -k c:\test.snk 创建一个新的随机密钥对并将其存储在 c:\test.snk 中 然后新建立类库ClassLibrary1,里面只有个类文件Class1.cs,代码如下:
[assembly: AssemblyKeyFile("c:\\test.snk")] // 连接上面用强命名工具SN.exe生成的文件 接着创建个WindowApplication来调用我们的ClassLibrary1,代码:
在这里就可以直接运行了,不过大家都看的出来,这样是能成功调用Class1中的方法的。 现在让我们来修改下Class1.cs,代码:
|