当前位置:编程学习 > C#/ASP.NET >>

强名称程序集被篡改后仍然正常运行,为什么?

按照CLR via C#中的说法,"如果强名称程序集的文件是从GAC之外的一个位置加载的,CLR会在程序集加载时比较哈希值.换言之,应用程序每次执行并加载程序集时,都会对文件执行一次哈希处理,以牺牲一定性能为代价,保证程序集文件的内容没有被篡改.CLR在运行时检测到不匹配的哈希值,会抛出一个System.IO.FileLoadException异常."
然而我进行了实验,修改了一个强命名的程序集,运行时并未抛出异常.实验方法如下:
程序集代码: 
class Program
{
    public static void Main()
    {
        System.Console.WriteLine("xxxxxxxxxxxxxxxxxxx");
    }
}

生成密钥:
 
sn -k myKey.snk
编译强命名程序集:
csc /keyfile:mykey.snk main.cs
修改程序集:
用16进制编辑器打开main.exe,找到字符串"xxxxxxxxxxxxxxxxxxx"(78 00 78 00...),修改成"yxxxxxxxxxxxxxxxxxx"(79 00 78 00...),保存.
运行main.exe,正常输出yxxxxxxxxxxxxxxxxxx,并未抛出System.IO.FileLoadException异常,为什么? --------------------编程问答-------------------- 首先你要檢查你強簽名是否正確, sn -Tp x.exe --------------------编程问答-------------------- 你是指sn -v xxx.exe吧?
验证是失败的,也无法安装到GAC,但运行无问题. --------------------编程问答--------------------
引用 2 楼 a013231 的回复:
你是指sn -v xxx.exe吧?
验证是失败的,也无法安装到GAC,但运行无问题.


我告訴你了,你怎麼不試試呢?我說的命令是查看你強簽名是否正確

還有這個程序沒有窗體的,你在dos下運行它,會有錯誤的 --------------------编程问答-------------------- sn -Tp显示了程序集的公钥和公钥标记,并无错误。 --------------------编程问答--------------------
引用 4 楼 a013231 的回复:
sn -Tp显示了程序集的公钥和公钥标记,并无错误。

我測試,是有報錯的,但是我dos下運行。。。
补充:.NET技术 ,  .NET Framework
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,