c#

位置:IT落伍者 >> c# >> 浏览文章

.Net 虚拟框架的实现原理


发布日期:2019年04月07日
 
.Net 虚拟框架的实现原理

Net 虚拟框架的实现原理

前面介绍了利用第三方虚拟环境来实现 Net程序脱离框架运行并介绍了如何自己编写加载器程序今回我们介绍虚拟框架的核心实现原理感兴趣的朋友可以参考自己实现在让Net 程序 脱离 framework框架 运行(源代码实现说明) 中我们介绍的脱离框架运行的方法仍然需要依赖 rsdeploydll 才行

今回我们就介绍这个 dll 的实现原理

简单的实现方式

首先我们需要用到一个 undocumented features

在dll被加载时设置环境变量 COMPLUS_InstallRoot 为当前dll所在目录

另外复制 c\windows\\framework\v 或者 v 到 dll

所在目录

把mscoreedll 以及crt运行库放到 dll目录中

在dll目录中创建一个本地的 GAC 目录再把 需要的 GAC assemblies 复制进去

这样子就 OK 了简单的 Net程序就可以在这个环境中运行了

如果是复杂的程序 还需要实现一个虚拟注册表系统

对于我们虚拟框架这个应用来说只需要实现一个只读的虚拟注册表就OK了

这个实现可以 ring 也可以 ring考虑到兼容性 直接用ring实现好了

实现方式可以使用 api hook的方式即在我们的dll加载时 hook advapidll 中所

有Reg开头的函数虚拟注册表系统的框架就完成了剩下的就是实现了

这段时间忙着做DNGuard的官方网站 英文的基本完工了

中文的还没做现在还得开发一个网站的客户中心

等网站的事结了就发布DNGuard hvm的专业版在之后看看时间上的安排有空的话

会考虑自己实现一下这个虚拟框架做一个小工具出来

这个虚拟框架最核心的就是 设置环境变量 COMPLUS_InstallRoot

虚拟注册表系统只是一个扩展

我们还可以再扩展一下增加一个虚拟文件系统这样就可以做成像 xenocode vas 那样了把整个程序部署成单一文件

上一篇:公布.NET Framework 2.0升级3.5方案

下一篇:Visual Basic 10开启应用程序的新时代