下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

保护你的DLL和Code不被别人使用的方法

作者:课课家     来源: http://www.kokojia.com/点击数:622发布时间: 2015-11-15 12:22:30

标签: 编程语言编程视频编程开发

大神带你学编程,欢迎选课
今天小编带领大家一起学习有关编程语言的内容,让我们熟练的驾驭编程语言的天空,让我们一起感受知识的力量

wordpress教程大家做项目开发一般都是分层的,比如UI层,业务层,数据访问层。业务层引用数据访问层的DLL(比如data.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。

"我从事编程语言统计很多年了,有大量的数据来源包括代码存储库、Q&A讨论、招聘广告、社交媒体情况、教程页面访问、学习视频视图、开发者调查等等。数据发表在不同的时间,都可以被认为是精确的,
也可以被认为是有缺陷的,但是它们可以用于发现行业趋势。最后,不要期望一夜之间就变成一个编码忍者。有些人有一种天然的能力,但也是花了很多很多时间来磨练他们的技能,不断的学习新的技术和技巧。"
在过去三年中 XML 经历了许多反复,所以目前存在不同版本的 Microsoft XML 分析器也不奇怪。Internet Explorer 4.0 包含早期版本的 XML 分析器,它比 XSL、XML 数据或者大多数其他的 XML 技术(并且有完全不同的 DOM 模型)要早。该早期版本的分析器包含在 MSXML.dll 库中。从 MSDN XML 开发人员中心(英文)可将分析器升级到较新的一种。
  我们极力建议您升级到新的分析器,因为它要强大得多。Internet Explorer 5.0 包括 MSXML 2.0 分析器,它包含 XSL 和 XML 架构的基本版本。MSXML2 是 SQL Server 2000 附带的分析器版本。MSXML2 包含了许多性能增强的功能,并且在总体上提高了性能和可伸缩性。MSXML3 是当前作为“技术预览”附带的版本。MSXML3 包括 XSLT 和 XPath 支持以及 SAX 接口。

html5教程在这里就可以直接运行了,不过大家都看的出来,这样是能成功调用Class1中的方法的。
现在让我们来修改下Class1.cs,代码:

以下为引用的内容:
using System;
using System.Security.Permissions;

namespace ClassLibrary1
{
    [StrongNameIdentityPermissionAttribute(SecurityAction.LinkDemand, PublicKey =
         "00240000048000009400000006020000002400005253413100040000010001000551684edd1600"+
         "8ccbdd337b1cf1490490d97fe0048c5f3629cc4f5104578499eace9b2a94115022edd620def472"+
         "8b4f088291cfa77a40659afba611fdafbb7894b93a64049d439936bd0cd8dc0704625aeb735892"+
         "e9eb3f910a49a2925af10515d935654d7adac5567ff6d780d23d587de0ff4d271da7b30680fa88"+
         "a47a4ba4")]
    public class Class1
    {
        public Class1()
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
        }
        public string Insert()
        {
            return "ok";
        }
    }
}


然后再编译后运行windowapplication调用class1中的方法就会出错。
这里的StrongNameIdentityPermissionAttribute是NET提供的CAS(Code Access Security)中的1个类,具体可参考MSDN,SecurityAction.LinkDemand 是要求直接调用方已被授予了指定的权限,这里即windowapplication要授予了权限才行,如果使用SecurityAction.Demand要求调用堆栈中的所有高级调用方都已被授予了当前权限对象所指定的权限。他们的区别是:如果windowapplication已授权访问,而还有个windowapplication2(未授权访问)通过调用windowapplication中的button1_Click方法来调用class1,这个时候如果使用SecurityAction.LinkDemand就能成功调用,而使用SecurityAction.Demand  windowapplication2就不能调用,windowapplication 在这2种情况下都能调用。
axurerp7.0视频教程说到这里大家一定再问PublicKey=后面一串那么长的字符串怎么来。PublicKey后面的字符串是你开始生成的c:\\\\test.snk文件中保存的公钥。那怎么才能看到这个公钥了,照样是用SN.EXE。
输入sn -p c:\\\\test.snk  c:\\\\publicKey.snk (从 test.snk 中提取公钥并将其存储在 publicKey.snk 中)
再输入sn -tp c:\\\\publicKey.snk (显示公钥信息)
上面这个命令就能看到PublicKey后面的字符串了,还想什么啊,把那字符串copy下来啊。
最后大家一定在关心这个时候windowapplication 要怎么调用class1了,其实也简单,只要把windowapplication 的AssemblyInfo.cs修改为:
[assembly: AssemblyKeyFile("c:\\\\\\\\test.snk")]
到这里就一切OK了,大家都看到最关键的就是test.snk文件了,所以一定要保护好你自己的test.snk文件。
下面是我的代码,大家可以下载看看,在使用的时候记的要把我KEY文件夹下的test.snk copy到c盘。
不然会出错。

看完小编的文章是不是很精彩,是不是想要成为编程语言的高手,更多关于在线教育的文章尽在课课家,希望你们多多关注。
赞(108)
踩(1)
分享到:
华为认证网络工程师 HCIE直播课视频教程