為你講解VB.NET虛擬框架原理
虛擬這個詞語給人一個不真實的感覺,就好像看不見摸不著似的,對于向虛擬內存,java中的虛擬機這些詞你能深入的理解?今天來解讀一下VB.NET虛擬框架的實現原理,先來介紹一下VB.NET吧。
大家都知道微軟公司推出的.NETFramework3.5SP1,自今年二月以來就已經測試,還有Visual Studio 2008的SP1,這兩種產品都是新推出的,.NET Framework3.5在去年11月發布,而Visual Studio 2008在2008年2月發布。 微軟相關負責人表示,此次更新的特色和功能,不僅僅是修補漏洞,更是微軟軟件功能、特色的提升。 微軟一位發言人表示,.NET SP1增加一個新的功能,.NET Framework客戶端配置文件,能夠準確識別安裝客戶所要的應用程序,而不是籠統地安裝整個架構,這樣可以減小安裝文件的86.5%。
此外,.NET Framework3.5 SP1,將作20%至45%的改變與完善。對于Visual Studio 2008 SP1,微軟補充,也添加了對SQL Server 2008中的新日期的支持,提高WindowsPresentation Foundation的性能,方便客戶操作使用。 微軟相關負責人表示,這將是一個大的安全服務包。 對.NET的服務包,添加了許多功能,只有10%的改善,而90%都是添加新功能,可以修護許多錯誤,是微軟新的工作重點。
Visual Studio 2008已經很穩定,當然,此次對其更新,也受到客戶的歡迎。 .NET Framework3.5 servicepack和Visual Studio 2008 servicepack都可以從微軟許多相關網站下載,如TechNet和MSDN。
在讓.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程序就可以在這個環境中運行了。如果是復雜的程序還需要實現一個虛擬注冊表系統。對于我們VB.NET虛擬框架這個應用來說,只需要實現一個只讀的虛擬注冊表就OK了。這個實現可以ring0 也可以ring3,考慮到兼容性直接用ring3實現好了。 實現方式可以使用api hook的方式,即在我們的dll加載時hook advapi32.dll 中所有Reg開頭的函數。虛擬注冊表系統的框架就完成了,剩下的就是實現了。
這段時間忙著做DNGuard的官方網站http://www.dnguard.net/ ,英文的基本完工了,中文的還沒做,現在還得開發一個網站的客戶中心。等網站的事結了,就發布DNGuard hvm的專業版。在之后看看時間上的安排,有空的話會考慮自己實現一下這個VB.NET虛擬框架,做一個小工具出來。 這個VB.NET虛擬框架最核心的就是設置環境變量COMPLUS_InstallRoot 。
虛擬注冊表系統只是一個擴展。我們還可以再擴展一下,增加一個虛擬文件系統。這樣就可以做成像 xenocode vas 那樣了。把整個程序部署成單一文件。
【編輯推薦】