ddc
联网
平面设计 画册 VI欣赏 包装 CG-插画 搜索 个人网页 Alexa排名 CSS 建站资源 下载专区 JS特效 品牌服装 服装院校 专题欣赏 SEO 图标欣赏 专题
网站建设 域名注册 网站建设 虚拟主机 广州网站设计 域名注册 广州网站建设 上海网站建设 虚拟主机 广州网页设计 虚拟主机 域名注册 acg王国 ACG玩家 品牌设计 上海网站建设
求创科技
网站建设
中国互联
素材出售
中国设计秀
中资源
当前位置:网络学院首页 >> 编程开发 >> .net >> mscorwks.dll文件是dotNet的核心

mscorwks.dll文件是dotNet的核心 (1)

来源:中国设计秀    作者:    点击:50     加入收藏    发表评论
0
顶一下
  mscorwks.dll是dotNet的核心文件,尤其是在net2.0中,以前分散的功能都集中到了这个dll中。
  net1.1中,还有一个文件mscorsvr.dll 和 mscorwks.dll 是同等地位的。
  它们分别对应于 windows service程序以及 desktop 程序。
  在net2.0中,它们都统一到了 mscorwks。dll中。
  同时在net2.0中mscorsn.dll 的功能也合并到了 mscorwks.dll中。
  它就是dotnet运行库的核心。
  DotNet的执行引擎(ee),内部对象的实现都在这个dll里面。
  
  在我们用reflector查看dotnet类库源代码时经常会遇到一些函数看不到源代码,只是标记成内部实现。这些函数基本上实际实现的代码就在这个dll里面,是native实现的。如反射功能的相关对象以及实现就是这里面。
  
  net程序的执行主要由它来完成,还有另外一个重要的文件mscorjit.dll 被它所调用。
  现在我们把 mscorwks.dll 分成两个区 A 和 B,
  A 是主要执行引擎(ee)和native 实现。
  B 是ee调用jit的处理部分。
  
  net2.0的反射功能是在A区实现的。加密壳如果要实现完美的兼容性(即不破坏DotNet本身的任何功能和特性)就应该在 A 区挂入其内核。
  在A区有一个函数实现获取方法体的内容,ee层需要取得方法体内容是通过这个函数来获得的。因此完美的方法就是 替换这个函数,用加密壳的内核实现这个函数。
  
  这样的最大缺点就是反射漏洞,因为反射也是调用这个函数取得方法体的。
  
  在这个基础上要要破坏反射有什么办法呢?
  在反射是需要调用Method的成员函数GetMethodBody,这个函数是native实现的,就在mscorwks。dll中,因此加密壳可以hook这个函数做一些预防处理。
  但是效果不理想,破解者可以恢复这个函数的原始实现。
  
  还有一个方法,不是完美,但是有效,即不直接替换获取方法体的函数,
  而是只替换编译前获取方法体的地方。这样只在要编译方法时才提供内核解密服务。
  
  效果如何?也不太理想,破解这可以修改反射的实现函数,直接jmp到加密壳的内核服务。
  
  这种方式就是DNGuard v1.0采用的方法,似乎也是某壳目前版本的方法。
  当然,DNGuard 1.0还简单的加入了放内存修改,不过这个效果也能太乐观,破解者也能够把这部分屏蔽掉。
  因为反射在A区实现,如果壳的内核也挂接A区,反射就比较容易修复。
  
  在我做DNGuard 2.0之前,我曾想过一种方法,能使反射无效,甚至难于修复。
[1] [2]
2007-07-25 09:50:00    出处:
Google
网站地图 | 关于我们 | 联系我们 | 网站建设 | 广告服务 | 版权声明 | 免责声明 | 网站公告 | 友情链接 | 留言 | 旧版入口