通過前文共同體驗了強名稱對程式集的保護方式和原理,但是這種保護的強度到底有多大呢?能有效地防禦惡意篡改者嗎?先看下面的例子。
回到上篇文章的**清單
9-7,重新對
strongnamereferencelib
專案進行強名稱簽名,然後編譯
strongname
專案。在
strongname
專案的bin
目錄裡有
strongnam.exe
和strongnamereferencelib.dll
兩個檔案,然後使用
ildasm
開啟strongnamereferencelib.dll
檔案,轉儲為
il檔案,這裡使用記事本開啟
il檔案,如圖
9-19
所示。
圖9-19strongnamereferencelib.dll的il原始碼
在.il
檔案中找到三處**:
publickkeytoken
、publickey
和hash
,把對應的內容都刪除,再重新使用
ilasm
編譯,這時該程式集的強名稱就被成功去除。
替換程式集的強名稱方法基本相同。目前網路上有很多去除和替換強名稱的工具,這裡不再演示。
----------------------------注:本文部分內容改編自《.net 安全揭秘》
強名稱保護
用 籤強名稱我會 中 sn k key.snk csc keyfile key.snk cs 強名稱的去除 頭中的flag項,去除comimage flags strongnamesigned標誌 頭中的strongnamesignature,與 為 表中的 項,送去0 0001 標識 通常變後為0...
強名稱程式集不能引用非強名稱程式集
想生成乙個強名稱程式集,引用了乙個非強名稱程式集裡的型別,結果在編譯時出錯 error cs1577 程式集生成失敗 引用的程式集 mytypes 沒有強名稱 檢視msdn中編號為cs1577的編譯器錯誤,顯示如下資訊 程式集生成失敗 原因 編譯的程式集生成部分失敗。有關更多資訊,請參見 alink...
為何使用強名稱,publickeytoken的作用
概念 一 dotnet中的版本組成 dotnet中的版本由4個物理號碼組成,如圖 一 圖 一 在程式集裡面,我們可以通過加上assemblyversion特性來設定它,如 assembly assemblyversion 2.0.2.11 二 gac 計算機範圍內的 快取,它儲存專門安裝的程式集,這...