天天看點

.Net 虛拟架構的實作原理

.Net 虛拟架構的實作原理

前面介紹了利用第三方虛拟環境來實作 .Net程式脫離架構運作,

并介紹了如何自己編寫加載器程式。

今回我們介紹虛拟架構的核心實作原理,感興趣的朋友可以參考自己實作。

在 讓 .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 那

樣了。把整個程式部署成單一檔案。

繼續閱讀