强名称(2)引用强名称签名的程序集
强名称(2)引用强名称签名的程序集
引用强名称程序集的过程对我们来说都是透明的,无需做额外的工作。可以通过这种方式来检验强名称程序集的作用。
首先创建一个类库项目StrongNameReferenceLib,对其进行强名称签名。
图9-16引用强名称程序集
接下来修改之前创建的StrongName项目,让它引用StrongNameReferenceLib项目(如图9-16),调用其GetHello方法。
StrongNameReferenceLib项目的主要代码如代码清单9-6所示。
代码清单9-6 StrongNameReferenceLib项目主要代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace StrongNameReferenceLib
{
public class Class1
{
public static string GetHello()
{
return "Hello";
}
}
}
修改后的StrongName项目代码如代码清单9-7所示。
代码清单9-7 StrongName项目代码
using System.Text;
using System.Reflection;
using StrongNameReferenceLib;
namespace StrongName
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine( Class1.GetHello());
Console.Read();
}
}
}
重新编译StrongName项目,得到新的StrongName.exe文件。使用ILDasm打开StrongName.exe文件,查看它的程序集清单,如图9-17所示。
图9-17 StrongName.exe程序集清单
从程序集清单可以看到,它引用了两个具有强名称签名的程序集:mscorlib和(新创建的)StrongNameReferenceLib,对两个程序集分别添加了版本和publickeytoken标识。
下面去除StrongNameReferenceLib的强名称签名,重新编译该项目,但不重新编译StrongName项目,而用新生成的StrongNameReferenceLib.dll替换StrongName.exe之前引用的StrongNameReferenceLib.dll,看看会发生什么事情。结果如图9-18所示。
图9-18StrongName项目替换dll之后结果
从图9-18的异常信息可以看到,StrongName项目找不到匹配的程序集。原因在于在StrongName的程序集清单中存储着PublicKeyToken值,而没有强名称签名的项目是没有该属性的。
-----------------------------------注:本文部分内容改编自《.NET 安全揭秘》
作者:玄魂
出处:http://www.cnblogs.com/xuanhun/
原文链接:http://www.cnblogs.com/xuanhun/
更多内容,请访问我的个人站点 对编程,安全感兴趣的,加qq群:hacking-1群:303242737,hacking-2群:147098303,nw.js,electron交流群 313717550。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
关注我:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)