/简体中文/
/简体中文/
/简体中文/
//
//
/繁体中文/
/中文/
/简体中文/
//
/英文/
如果某些程序运行不了,弹出缺【quē】失mscorwks.dll文件。首先建议大家下载mscorwks.dll文件。如果还是无法运行【háng】,就重新安【ān】装.NET 4.0吧。
mscorwks.dll是dotNet的核心文【wén】件,不可或缺,缺少mscorwks.dll文件【jiàn】可能会造成某些软件或游戏不能正常运行。
1、解压缩下载的文件。
2、复制文件“mscorwks.dll”到系统目录下。
3、系统目录一般为:C:\WINNT\System32 64位系统为C:\Windows\SysWOW64。
4、最后点击开始菜单-->运行-->输入regsvr32 mscorwks.dll,回【huí】车即可解决错误提【tí】示。
5、以上方法还不行,请重新下载安装【.NET Framework4.0简体中文版【bǎn】】。
应用名称: | Mircosoft.Net.Framework4.0 | |
下载地址: | http://www.7pam.com/down/47855.html |
mscorwks.dll是dotNet的核【hé】心文【wén】件,尤其是在net2.0中【zhōng】,以前分散的功能都集中到了这个dll中。
net1.1中,还【hái】有一个文【wén】件mscorsvr.dll 和 mscorwks.dll 是同等地位的。
它【tā】们分别对应于 windows service程序以及 desktop 程序【xù】。
在net2.0中,它们都【dōu】统一到了 mscorwks。dll中。
同时在net2.0中mscorsn.dll 的功能【néng】也合并到了 mscorwks.dll中。
它就是dotnet运行库的核心。
DotNet的执行引擎(ee),内部对象的【de】实现【xiàn】都在这个dll里面。
在我们【men】用reflector查看dotnet类库【kù】源代码时经常会遇到一【yī】些函数看不到源代码,只是【shì】标记成内部实现。这些函数基本上实际实现的代码就在这个dll里面【miàn】,是native实现的。如反射功【gōng】能的相关对象以及实现【xiàn】就是这里面。
net程序的执【zhí】行【háng】主要由它来完成,还有另外一【yī】个重要的文件mscorjit.dll 被它所调用。
现在我【wǒ】们把 mscorwks.dll 分成【chéng】两个区 A 和 B,
A 是主要执行引擎(ee)和native 实现。
B 是ee调用jit的处理部分。
net2.0的反射功能是在A区实现的。加密壳如果要实现完美的兼容【róng】性(即不破坏DotNet本身【shēn】的任何功能和特性)就应【yīng】该在【zài】 A 区【qū】挂入其内核。
在A区有一个函数【shù】实现获取方法体的内容,ee层需要取得方法体内容是通过这个函数来获得的。因【yīn】此完美的方法就是 替换【huàn】这个函数,用加密壳的内核实现这【zhè】个函数。
这样的最大缺点就【jiù】是反射漏【lòu】洞,因为反射也是调用这个函数取得方法体的。
在这个基础上要要破坏反射有什么办法呢?
在反射是需要【yào】调用Method的成员【yuán】函数GetMethodBody,这个函数是native实【shí】现的,就在mscorwks。dll中,因【yīn】此加密【mì】壳可以hook这个函数做一些预防处理。
但是效果不理想,破解者可以恢复这个【gè】函数【shù】的原始实现。
还有一【yī】个方法,不是完美,但是有效,即不直接替【tì】换获取方法体的函数,
而是只替【tì】换编译前获取方法体的地方。这样只【zhī】在要编译方法时【shí】才提供内核解密服【fú】务。
效果如何?也不太理想,破解这可【kě】以修改反射的实【shí】现函数,直接jmp到加【jiā】密壳【ké】的内核服务。
这种方式就是DNGuard v1.0采用的方法,似乎也是【shì】某壳目前版本的方法。
当然,DNGuard 1.0还简单的加入了放内存修改,不过这个【gè】效【xiào】果也能太乐观,破解者也能够把这部分屏蔽掉。
因为【wéi】反射在A区实现,如果壳的内核也挂接A区,反射就比较容易修复。
在我做DNGuard 2.0之前【qián】,我曾想过一种【zhǒng】方法,能使反射无效,甚至难于修复。
即同时在内核挂接在 A 区,和 B区。
先来介绍一下一个函数要被执行是是怎么个流程。
首先,EE会检查函数是否【fǒu】编译?编译了【le】就直接调用了。没有【yǒu】编译【yì】就进行编译。由一个prestub实现。
然后EE取【qǔ】得方【fāng】法体,对【duì】方法头和SEH TAble进行简单解析,转换成结构。
(这些在A区完成),进入B区调用Jit进行编译。
在A区ee只关系方法【fǎ】头和sehtable,而B区调【diào】用jit时 il字节【jiē】码才有实际意义。
所【suǒ】以可以【yǐ】将内核分别挂接这两个区,A区中只提供header和seh,B区中【zhōng】提供il字节码。
不过在我开【kāi】始做DNGuard v2.0后就放弃了这个想法,因为【wéi】这【zhè】样还是不安全。
参考这里:深入Jit,实现【xiàn】dotNet代码的加解密
不管内核是在A区还是B区,如果一个加密壳的【de】内核只限于在mscorwks.dll进行挂接实【shí】现。那【nà】么都无法脱逃 jit层脱壳机的脱壳。我在写文章【zhāng】“深【shēn】入【rù】Jit,实【shí】现dotNet代码的加解密 ”时已经进行过测试了