ASP教程 |PHP教程 |JSP教程 |.net教程 |CGI教程 |XML教程 |AJAX |HTML |网站重构 |CSS教程 |JS教程 |网页设计 |数据库 |服务器 |开发工具 |网站运营
论坛模板 |CMS模板 |产品网页 |商务 |主机网站 |旅游网站 |体育 |娱乐 |艺术网站 |建筑网页 |动植食物 |人物网站 |教育网页 |企业网站 |简约 |另类
编程 |界面设计 |加解密 |浏览阅读 |装机必备 |IIS软件 |FTP软件 |安全软件 |远程监控 |邮件系统 |虚拟主机 |web服务 |组件 |设计软件 |数据库
网站运营 |asp电子书 |PHP电子书 |.net电子书 |JSP电子书 |CGI |数据库XML |服务器 |HTML |设计教程 |AJAX |C语言 |VB |DELPHI |安全 |其它
asp源码 |ASP.NET源码 |PHP源码 |JSP源码 |CGI源码 |FLASH源码 |AJAX源码 |电子商务 |办公OA源码 |公司网站源码 |整站源码
系统 |房屋 |苹果 |文件夹 |电脑 |影视 |动植物 |表情 |系列 |软件 |文件 |游戏 |工具 |CD光盘 |交通 |人物 |食物 |体育 |国旗 |卡通 |标志 |桌面
风景图片 |花草图片 |水资源图片 |动物 | 美食 |人物图片 |抽象 |民族艺术 |静物图片 |宇宙图片 |建筑图片 |装修图片 |科技交通 |体育图片 |精美图片
书法家字体 |迷你 |金梅 |汉仪 |华文 |长城 |创艺 |汉鼎 |金桥 |文鼎 |微软 |超世纪 |中国龙 |四通利方 |华康 |经典 |王汉宗 |中文 |英文 |其它
韩国酷站 |欧美酷站 |中国酷站 |日本酷站 |黑色酷站白色酷站 |灰色酷站 | 红色酷站 |橙色酷站 |黄色酷站 |绿色酷站 |青色酷站 |蓝色酷站 |紫色酷站
广告代码 |导航条 |菜单特效 |日期时间 |背景图像 |图层样式 |鼠标特效 |页面窗口 |色彩表格 |文字特效 |表单按钮 | 计数转换 |游戏特效 |实例特效
网站免费登陆 |Alexa排名查询 |广告代码下载 |站长工具 |查询工具 |技术手册查询 |WHOIS信息查询 |PR值查询 |收录查询 |极品万年历 |身份证查询
当前位置: 牛头网主页电脑学院.NET教程→ mscorwks.dll在.Net中的地位及代码保护应用

mscorwks.dll在.Net中的地位及代码保护应用

来源:     作者:     时间:2008-08-17     点击:
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之前,我曾想过一种方法,能使反射无效,甚至难于修复。即同时在内核挂接在 A 区,和 B区。

  先来介绍一下一个函数要被执行是是怎么个流程。

  首先,EE会检查函数是否编译?编译了就直接调用了。没有编译就进行编译。由一个prestub实现。然后EE取得方法体,对方法头和SEH TAble进行简单解析,转换成结构。(这些在A区完成),进入B区调用Jit进行编译。在A区ee只关系方法头和sehtable,而B区调用jit时 il字节码才有实际意义。所以可以将内核分别挂接这两个区,A区中只提供header和seh,B区中提供il字节码。

  不过在我开始做DNGuard v2.0后就放弃了这个想法,因为这样还是不安全。

  不管内核是在A区还是B区,如果一个加密壳的内核只限于在mscorwks.dll进行挂接实现。那么都无法脱逃 jit层脱壳机的脱壳。我在写文章“深入Jit,实现dotNet代码的加解密 ”时已经进行过测试了。

0
顶一下
最新图文
相关文章
最新评论 共有 0 位网友发表了评论  查看所有评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:   匿名?  注册
牛头网
·
为站长提供最便捷的下载服务
本月热门
最近更新
| 设为首页 | 加入收藏 | 联系站长 | 广告服务 | 诚聘英才 | 网站地图 | RSS订阅 | 建站服务 |