All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
第三篇:使用Visual,Studio,2008实现基本的页面交互_[Asp.Net教程]
SQL,Server,2005—有关开发的10个最重要的特点_[SQL,Server教程]_0
Delphi中管理sql server索引
LINQ体验(2)——C#,3.0新语言特性和改进(上篇)_[Asp.Net教程]
.NET自动字符编码识别程序库,NChardet_[Asp.Net教程]
取得当前插入数据库中记录的id值_[PHP教程]
安装Ms SQL Server 2005 开发版时出现性能计数器要求安装错误的解决办法_[SQL Server教程]
PHP编程常用技巧四则_php资料_编程技术
复杂ASP.NET服务器控件调整小技巧_.net资料_编程技术
如何在十天内学会php之第五天_[PHP教程]
Reading number is top 10 pictures
人造器官和铁肺人
避免防盗门的猫眼变成钥匙眼
Desktop Wallpapers1
Sora aoi on twitter4
BingBingFan apple dew point photo gallery2
Photographed the passion of the clients and prostitutes in the sex trade picture1
乳娘帕梅拉安德森1
9.3阅兵全景图3-外国方阵梯队和坦克方阵梯队
Sora aoi on twitter1
XuYing poker perspective garment debut
Download software ranking
Take off clothes to survival
Proficient in JavaScript
Sora aoi 120 minutes
WebService在.NET中的实战应用教学视频 → 第5集
C#与.NET技术平台实战演练
matrix2
VeryCD电驴(EasyMule) V1.1.9 Build09081
豪门浪荡史
虚拟机汉化软件
圣殿祭司的ASP.NET.2.0.开发详解-使用C#
delv published in(发表于) 2014/1/16 9:30:17 Edit(编辑)
mscorwks.dll在.Net中的地位以及在.Net代码保护方面的应用_[Asp.Net教程]

mscorwks.dll在.Net中的地位以及在.Net代码保护方面的应用_[Asp.Net教程]

mscorwks.dll在.Net中的地位以及在.Net代码保护方面的应用_[Asp.Net教程]

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后就放弃了这个想法,因为这样还是不安全。
参考这里:深入Jit,实现dotNet代码的加解密


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


今回到这里,下回介绍mscorjit。dll。



来源:网络







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.