首页 > 学院 > 开发设计 > 正文

C#程序集系列09,程序集签名

2019-11-17 02:53:49
字体:
来源:转载
供稿:网友

C#程序集系列09,程序集签名

在"C#程序集系列08,设置程序集版本"中体验了为程序集设置版本,但对于程序集的安全性来说,还远远不够。本篇体验程序集的签名。

□ 程序集的签名

→F盘as文件夹下有多个文件51→在程序集所在文件夹创建密匙52→打印密匙53密匙是一堆乱码,这是经过加密了。→在密匙的基础上创建公匙Public Key54→打印公匙Public Key55注意:这里的public token是public key经过哈希算法而获得的。当程序集被引用,该程序集对外是以public token形式存在的。

→现在重新编译"C#程序集系列08,设置程序集版本"中的Cow.cs,但这次使用密匙56→重新编译"C#程序集系列08,设置程序集版本"中的MainClass.cs,引用刚创建的Farm.dll57→运行MainClass.exe58→现在模拟一个病毒程序集,首先在F盘的as文件夹中创建CowVirus.cs→用记事本打开CowVirus.cs,编写如下,保存

using System;
using System.Reflection;
[assembly: AssemblyVersion("3.3.3.3")]
public class Cow
{
    public static void Moo()
    {
        Console.WriteLine("我是病毒");
    }
}

→编译CowVirus.cs,生成新的Farm.dll,重写原先的Farm.dll,并且在没有私匙的情况下59→再次运行MainClass.exe60

可见,病毒程序虽然模拟了一个相同名称的程序集,但由于没有签名,该程序集不会得到主程序的认可。

□ Public Token

如果一个A程序集有public key,且被B程序引用,如果我们反编译B程序,在B程序的IL代码中就可以看到A程序集有一个public token,这个public token是根据A程序集的public key经哈希算法而得到的。

→再次重写Farm.dll,编译Cow.cs文件,并且使用密匙61→反编译Farm.dll62来看Farm程序集的清单部分:

.assembly Farm
{
<PRe style="font-size: 11px; font-family: consolas,'Courier New',co
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表