在先前的文章中,我們探討了如何讓 .NET 程式脫離 .NET Framework 運行,但該方法仍依賴 rsdeploy.dll。本文將深入剖析這個 DLL 的核心實現原理。
實現一個簡易的虛擬框架環境,主要包含以下關鍵步驟:
COMPLUS_InstallRoot 設定為當前 DLL 所在目錄,欺騙 CLR 以此為安裝根目錄。C:\Windows\Microsoft.NET\Framework\v1.1.4322 或 v2.0.50727 目錄完整複製到 DLL 目錄下。mscoree.dll 及 CRT 運行庫放置於 DLL 目錄中。完成上述配置後,簡單的 .NET 程式即可在這個獨立環境中運行。對於更複雜的應用,還需實現一個虛擬註冊表系統(僅需實現唯讀功能即可)。
考慮到相容性,建議在 Ring 3 (用戶模式) 實現。核心思路是使用 API Hook 技術:在 DLL 載入時,Hook advapi32.dll 中所有以 Reg 開頭的函數(如 RegOpenKeyEx, RegQueryValueEx 等),將註冊表讀取請求重定向至自定義的虛擬註冊表數據結構中。搭建好這個攔截框架後,剩下的工作便是填充具體的鍵值數據邏輯。