當(dāng)一個(gè)程序集的名稱(chēng),版本,文化,Public Key都做了設(shè)置,就可以把這個(gè)程序集叫做"強(qiáng)名稱(chēng)程序集"。強(qiáng)名稱(chēng)程序集可以防止被仿冒或篡改。本篇首先創(chuàng)建一個(gè)強(qiáng)名稱(chēng)程序集,接著模擬篡改程序集,看看最終結(jié)果如何?
□ 創(chuàng)建一個(gè)強(qiáng)名稱(chēng)程序集
→在"C#程序集系列08,設(shè)置程序集版本"和"C#程序集系列09,程序集簽名"中,在F盤(pán)的as文件夾中創(chuàng)建了一些文件→刪除所有除了.cs類(lèi)型的所有文件→創(chuàng)建一個(gè)密匙
→編譯Cow.cs,并用密匙簽名
→編譯MainClass.cs,引用剛創(chuàng)建的Farm.dll
→運(yùn)行MainClass.exe
□ 模擬篡改程序集
→在F盤(pán)as文件夾中創(chuàng)建Bad.cs文件→用記事本打開(kāi),編寫(xiě)如下,保存
using System.IO;class Bad{static void Main(){//把Farm.dll程序集放到流中Stream victim = File.Open("F://as//Farm.dll", FileMode.Open);byte[] buffer = new byte[victim.Length];//把流中的內(nèi)容讀到數(shù)組中victim.Read(buffer, 0, buffer.Length);//篡改數(shù)組中的一個(gè)元素,使用取反位操作符buffer[1000] = (byte)(~buffer[1000]);victim.Seek(0, SeekOrigin.Begin);//把字節(jié)數(shù)組重新寫(xiě)回到流中victim.Write(buffer, 0, buffer.Length);victim.Flush();victim.Close();}}
→把Bad.cs編譯成可執(zhí)行文件
→運(yùn)行Bad.exe,篡改了Farm.dll中的某些字節(jié)→再次運(yùn)行MainClass.exe
總結(jié):強(qiáng)名稱(chēng)程序集即使被篡改,也得不到主程序的認(rèn)可。
“C#程序集系列”包括:
參考資料:
http://www.computersciencevideos.org/ created by Jamie King
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注