前文已詳述強名稱對組件的保護機制與原理,但這層保護的實際強度究竟如何?能否有效抵禦惡意篡改?本文將透過實際操作示範強名稱的脆弱性。
承接上一篇的代碼清單 9-7,重新對 StrongNameReferenceLib 專案進行強名稱簽名,並編譯 StrongName 專案。在輸出目錄下會產生 StrongName.exe 與 StrongNameReferenceLib.dll 兩個檔案。接著使用 ILDasm 開啟 StrongNameReferenceLib.dll 並轉儲為 IL 檔案,用記事本開啟可見其 IL 原始碼(如圖 9-19)。

圖 9-19 StrongNameReferenceLib.dll 的 IL 原始碼
在 IL 檔案中找到三處關鍵資訊:publickeytoken、publickey 與 hash,將對應內容刪除後,再以 ILAsm 重新編譯,該組件的強名稱即被成功移除。替換強名稱的手法大同小異,網路上已有現成工具可自動完成去除與替換,此不再贅述。
這個實驗揭示了強名稱的核心弱點:由於 .NET 組件可被反組譯為 IL,攻擊者得以直接修改中繼資料與簽名資料,繞過完整性驗證。因此,強名稱僅能提供基礎的防篡改檢查,無法作為唯一的安全防線。
作者:玄魂
出處:https://www.cnblogs.com/xuanhun/