前面介紹了利用第三方虛擬環境來實現 Net程序脫離框架運行並介紹了如何自己編寫加載器程序今回我們介紹虛擬框架的核心實現原理感興趣的朋友可以參考自己實現
在讓 Net 程序 脫離 net framework框架 運行(源代碼實現說明) 中我們介紹的脫離框架運行的方法仍然需要依賴 rsdeploydll 才行今回我們就介紹這個 dll 的實現原理
簡單的實現方式首先我們需要用到一個 undocumented features 在dll被加載時設置環境變量 COMPLUS_InstallRoot 為當前dll所在目錄
另外復制 c:\windows\microsoftnet\framework\v 或者 v 到 dll所在目錄把mscoreedll 以及crt運行庫放到 dll目錄中在dll目錄中創建一個本地的 GAC 目錄再把 需要的 GAC assemblies 復制進去
這樣子就 OK 了簡單的 Net程序就可以在這個環境中運行了如果是復雜的程序 還需要實現一個虛擬注冊表系統對於我們虛擬框架這個應用來說只需要實現一個只讀的虛擬注冊表就OK了
這個實現可以 ring 也可以 ring考慮到兼容性 直接用ring實現好了
實現方式可以使用 api hook的方式即在我們的dll加載時 hook advapidll 中所有Reg開頭的函數虛擬注冊表系統的框架就完成了剩下的就是實現了
這段時間忙著做DNGuard的官方網站 http://wwwdnguardnet/ 英文的基本完工了中文的還沒做現在還得開發一個網站的客戶中心等網站的事結了就發布DNGuard hvm的專業版在之後看看時間上的安排有空的話會考慮自己實現一下這個虛擬框架做一個小工具出來
這個虛擬框架最核心的就是 設置環境變量 COMPLUS_InstallRoot
虛擬注冊表系統只是一個擴展我們還可以再擴展一下增加一個虛擬文件系統這樣就可以做成像 xenocode vas 那樣了把整個程序部署成單一文件
From:http://tw.wingwit.com/Article/program/ASP/201311/21900.html