歡迎來到 黑吧安全網 聚焦網絡安全前沿資訊,精華內容,交流技術心得!

使用公共語言運行時獲取持久性(下)

來源:本站整理 作者:佚名 時間:2019-09-23 TAG: 我要投稿


上篇文章,雖然我們已經知道可以重寫的方法和屬性,以及如何更改CLR使用的默認應用程序域管理器。今天,我們就來繼續說說如何將實現System.AppDomainManager的強名稱程序集安裝到GAC中,并最終實現使用公共語言運行時獲取持久性。
程序集和全局程序集緩存
如上所述,必須將實現System.AppDomainManager的強名稱程序集安裝到GAC中,但是,仍有很多問題,比如:
1.什么是程序集?
2.什么是全局程序集緩存(GAC)?
3.為什么以及如何將強名稱程序集安裝到GAC中?
對于.Net Framework,程序集是一個單元,每個程序集都可以包含MSIL代碼、類型、資源和清單。所有這些數據可以分組到一個文件(例如assembly.dll)或拆分成多個文件(例如assembly.dll,assembly.dll.manifest和picture.png)。應該注意的是,只需要清單就可以了。

清單包含用于描述程序集的所有信息,例如程序集名稱(例如Context.CLRHooking)、版本(例如1.0.0.0)、 語言文化(culture)屬性屬性屬性(例如neutral)、強名稱信息、程序集中所有文件的列表、類型引用信息和關于引用程序集的信息。名稱、版本、語言文化(culture)屬性屬性屬性和強名稱的組合表示程序集的標識。
強名稱程序集只不過是使用強名稱密鑰(SNK)文件簽名的程序集,該文件使用公鑰加密并為程序集提供唯一標識。
程序集可以設計為由一個應用程序使用,也可以在多個應用程序之間共享。在這種情況下,全局程序集緩存(GAC)會發揮作用,因為GAC會存儲任何打算在整個系統范圍內共享的程序集。
在Windows 10或Windows Server 2019等最新的系統中,都有兩個GAC,一個位于“C:\Windows\assembly\”,用于在4.0版之前使用.Net Framework的應用程序,另一個位于“C:\Windows\Microsoft.NET\assembly”適用于使用.Net Framework 4.0及以上版本的應用程序。
有兩種常規方法可以將程序集安裝到GAC中;
1.安裝應用程序時,Microsoft安裝程序將自動將需要在GAC中的任何程序集安裝到GAC中;
2.通過使用Windows軟件開發工具包(SDK)中的GAC工具“gacutil.exe”。
由于目標系統不太可能安裝Windows SDK,并且安裝應用程序不方便,因此應采用其他解決方案。應該注意,無論使用何種技術,都需要管理權限才能將強名稱程序集安裝到GAC中。
雖然可以手動安裝,但是,需要提前了解GAC如何存儲程序集。
GAC的根文件夾包含三個文件夾,其中 'GAC_32'包含32位程序集,'GAC_64'包含64位程序集,'GAC_MSIL'包含針對任何平臺的程序集。

如果強名稱程序集安裝到'AC_MSIL'文件夾中,則32位和64位運行時主機都可以使用它。
通過分析已安裝到GAC中的強名稱程序集,可以找到強名稱程序集使用的全名和.Net Framework版本。 'System.Reflection.Assembly'中的'LoadFrom'靜態方法用于將程序集加載并存儲到變量中。從此變量中,可以訪問“FullName”和“ImageRuntimeVersion”屬性。

程序集的全名是 ‘Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a’ ,.Net Framework版本是“v4.0.30319”。該程序集位于:‘Accessibility\v4.0_4.0.0.0__ b03f5f7f11d50a3a’。
基于以上所述,可以得出結論,當使用Microsoft安裝程序或GAC工具將程序集安裝到GAC中時,它們首先創建一個名為“GAC_32”,“GAC_64”或“GAC_64”下程序集名稱的文件夾。 “GAC_32”,“GAC_64”或“GAC_64”都是基于編譯程序集的平臺。然后,創建一個子目錄,該目錄的名稱基于程序集的標識。
格式如下:
1.“v”字符+ .Net Framework版本+“_”字符的主要版本;
2.程序集的版本+“_”字符;
3. 語言文化(culture)屬性屬性屬性如果不是中性+“_”字;
4.程序集強名稱;
例如,如果強名稱程序集全名為“Context.Hook,Version = 0.0.0.0,Culture = en,PublicKeyToken = 343c81d3defacaa9”且運行時版本為“v4.0.30319”,則程序集理論上應位于:“C:\ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ Context.Hook \ v4.0_0.0.0.0_en_343c81d3defacaa9 \”。
要自動將程序集安裝到GAC中,可以使用以下PowerShell腳本:https://gitlab.com/snippets/1878274。

最后,需要將程序集安裝到GAC中的原因是它們需要完全受信任,但也因為運行時主機具有一種特定的方法來定位和將程序集嵌入到系統上。
實際上,CLR執行了四個步驟。首先,CLR檢查應用程序配置文件、發布服務器策略文件和機器配置文件,以便定位必須加載的程序集和依賴項。其次,CLR檢查運行時主機或應用程序域是否已經加載了程序集。如果已經加載,CLR將使用先前加載的程序集。第三,如果請求強名稱程序集,CLR將在GAC中搜索強名稱程序集。最后,如果程序集不是強名稱程序集或在GAC中找不到,則CLR將探測應用程序庫。
如果強名稱程序集不引用語言文化(culture)屬性屬性屬性(即中性),則CLR將探測以下目錄:

[1] [2] [3]  下一頁

【聲明】:黑吧安全網(http://www.eyhadu.live)登載此文出于傳遞更多信息之目的,并不代表本站贊同其觀點和對其真實性負責,僅適于網絡安全技術愛好者學習研究使用,學習中請遵循國家相關法律法規。如有問題請聯系我們,聯系郵箱[email protected],我們會在最短的時間內進行處理。
  • 最新更新
    • 相關閱讀
      • 本類熱門
        • 最近下載
        彩票大数据