当前位置: 首页 > 图文教程 > .Net技术 > VB.NET > .Net 虚拟框架的实现原理

VB.NET
大话“基于对象”与“面向对象”
VB 内存分配与流读写 代码
VB.NET语法基础
vb.net与c#.net区别
用VB.Net读写数据库
百万程序员的苦恼-选择VB.NET还是C#
VB.net 多线程实例
VB.NET也区会大小写
VB.NET 2005编写定时关机程序
VB.NET控件编程定制拦截击键动作
如何实现.net程序的进程注入
VB.NET 菜单设计初级入门
VB.NET中关于DataGrid颜色的自定义
VB网络编程中Winsock的使用
VB.net编程教程:编写文字加解密程序
VB.NET中快速访问注册表技巧
VB.NET:在VB.NET中串行化对象
VB.NET:在 VB.NET 编程中使用数组
VB.NET:VB.NET路在何方?
大话“基于对象”与“面向对象”

VB.NET 中的 .Net 虚拟框架的实现原理


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 161 ::
收藏到网摘: n/a

.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 那样了。把整个程序部署成单一文件