.Net 虛擬框架的實現原理

iDotNetSpace發表於2009-01-19
 在讓.Net 程式脫離.net framework框架執行(原始碼實現說明) 中我們介紹的脫離框架執行的方法,仍然需要依賴rsdeploy.dll才行。今回我們就介紹這個dll的實現原理。

  簡單的實現方式:首先我們需要用到一個undocumented features,在dll被載入時,設定環境變數 COMPLUS_InstallRoot 為當前dll所在目錄。

  另外複製c:\windows\microsoft.net\framework\v1.14322或者v2.0.50727到dll所在目錄。把mscoree.dll 以及crt執行庫放到dll目錄中。在dll目錄中建立一個本地的GAC目錄,再把需要的GAC assemblies複製進去。

  這樣子就OK了,簡單的.Net程式就可以在這個環境中執行了。如果是複雜的程式還需要實現一個虛擬登錄檔系統。對於我們虛擬框架這個應用來說,只需要實現一個只讀的虛擬登錄檔就OK了。

  這個實現可以ring0 也可以ring3,考慮到相容性直接用ring3實現好了。

  實現方式可以使用api hook的方式,即在我們的dll載入時hook advapi32.dll 中所有Reg開頭的函式。虛擬登錄檔系統的框架就完成了,剩下的就是實現了。

  這段時間忙著做DNGuard的官方網站http://www.dnguard.net/ ,英文的基本完工了,中文的還沒做,現在還得開發一個網站的客戶中心。等網站的事結了,就釋出DNGuard hvm的專業版。在之後看看時間上的安排,有空的話會考慮自己實現一下這個虛擬框架,做一個小工具出來。

  這個虛擬框架最核心的就是設定環境變數COMPLUS_InstallRoot 。

  虛擬註冊表系統只是一個擴充套件。我們還可以再擴充套件一下,增加一個虛擬檔案系統。這樣就可以做成像 xenocode vas 那樣了。把整個程式部署成單一檔案。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-541451/,如需轉載,請註明出處,否則將追究法律責任。

相關文章