`
txf2004
  • 浏览: 7044672 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

mscorwks.dll在DotNet中的地位以及在.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代码的加解密 ”时已经进行过测试了。

分享到:
评论

相关推荐

    mscorwks.dll

    mscorwks.dll文件,可用来替换损坏的这种文件。

    Winsxs文件夹是什么文件.docx

    3. 保证 Windows 的正常运行:WinSxS 文件夹中的文件支撑着 mscorwks.dll,这是一个非常重要的组件,mscorwks.dll 无法加载如果没有这些文件。 因此,对于那些想对 Windows 进行瘦身的朋友一定要慎重,WinSxS ...

    Microsoft.NET.zip .net4.0环境压缩包

    此目录下可能有mscorwks.dll或clr.dll,它们是.NET Framework的核心运行时,负责执行托管代码。还有mscorlib.dll,它是.NET Framework的基础类库,提供许多基本类型和系统服务。 3. **Framework64**:这个目录是...

    sources文件sxs目录(终极解决无法安装.net framework3.5方法) 打包

    3. **cab** 文件:这些是 cabinet 文件,包含实际的.NET Framework组件,比如mscorwks.dll、mscorlib.dll等,这些都是.NET Framework运行时的核心组成部分。 安装步骤如下: 1. 将压缩包解压到本地文件夹,确保...

    使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试

    ### 使用SOS – 在Visual Studio中启用非托管代码调试来支持本机代码调试 #### 一、概述 在开发过程中,经常会遇到需要调试混合模式(同时包含托管代码和非托管代码)的应用程序的情况。Visual Studio 提供了一种...

    RAD Studio 10.2 Toyko Update2 10.2.2 KEYGEN 亲测可用

    为了便于在 Lite 14.x 中使用大侠们的特别补丁,初步写成这个:Activator.exe 他的主要作用: 1、整合 elseif、unis、x-force、cjack 大虾的 Keygen 相对原始部署方式,这个 Activator 实现“一键激活”! 使用...

    framework3.5手动安装包sxs

    这些文件通常以dll(动态链接库)格式存在,如mscorwks.dll和mscorlib.dll等,它们是.NET Framework运行时的核心组成部分。手动安装时,这些文件会被复制到系统的系统目录下,如C:\Windows\WinSxS。 总的来说,了解...

    微软常用运行库合集-2020.03.25-X64.zip

    .NET Framework的运行库组件(如mscorwks.dll或clr.dll)是执行.NET程序的基础。 3. **Windows Installer**:这是微软的安装和部署技术,通常用于安装和卸载应用程序。运行库可能包含必要的组件来支持安装过程。 4...

    Windbg使用手册(IIS)

    3. 在 Windbg 命令窗口执行“.loadby sos mscorwks”加载 sos.dll,如果报未找到 mscorwks,直接执行第 4 条。 4. 在 Windbg 命令窗口执行“.load C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\sos.dll”; C:\...

    windbg命令,windbg命令,windbg命令

    Windbg是一款强大的Windows调试工具,尤其在C#应用程序的调试中有着不可或缺的地位。它由Microsoft开发,用于诊断和分析各种类型的系统崩溃、内存泄漏、线程同步问题以及其他复杂的软件问题。Windbg支持对用户模式和...

    vs2010如何修改工程使得应用程序崩溃自动生成dump文件

    ### 如何在VS2010中配置程序以在崩溃时自动创建DUMP文件 本文档将详细介绍如何在Visual Studio 2010 (VS2010)中配置一个项目,使其能够在程序崩溃时自动生成DUMP文件,并提供一些基本的DUMP文件分析方法。 #### 一...

    WinDbg 调试程序崩溃操作详解

    对于.NET应用程序,WinDbg配合 sos.dll (Son of Strike) 扩展,可以进行更深入的.NET调试。 1. **加载sos扩展**:使用`.loadby sos mscorwks`(对于.NET Framework)或`.loadby sos coreclr`(对于.NET Core)加载...

    windows xp sp3 symbol

    - **.loadby sos mscorwks**:对于.NET应用程序,加载 sos.dll 扩展以进行托管代码调试。 - **!threads**:显示当前进程中的所有线程状态,帮助定位并发问题。 8. **安全与隐私** 在使用公共符号服务器时,确保...

    手动清理C盘多余的系统垃圾.docx

    winsxs文件夹的作用是支撑着mscorwks.dll,如果强行删除后,可能只能以安全模式能勉强进入Windows,Windows也就"挂"了。 手动清理C盘多余的系统垃圾的步骤可以分为四步: 第一步:建立链接。从官方下载PendMoves和...

    indows7再提速,winsxs文件夹优化.docx

    winsxs文件夹的存在是为了支持mscorwks.dll的运行,如果删除其中的文件,可能会导致Windows只能在安全模式下启动,甚至可能导致系统崩溃。 2. winsxs文件夹的体积问题:由于winsxs文件夹包含了许多不同版本的系统...

    应用程序调试技术

    在IT行业中,应用程序调试是开发过程中的重要环节,它帮助我们发现并修复代码中的错误,提高软件质量。本文将深入探讨“应用程序调试技术”,特别是针对Windows环境下的C++和MFC程序员,我们将聚焦于“windbg”这个...

    C盘Windows下的winsxs是什么文件?.docx

    这些文件夹支撑着mscorwks.dll,如果强行删除后,可能只能以安全模式能勉强进入Windows,Windows也就"挂"了。 winsxs文件夹中的文件都是系统必要文件,不能删除。这些文件都是与system32文件夹中的文件重复的,占用...

    windbg-sos参考

    1. **加载SOS**:在Windbg中,使用`.loadby sos mscorwks`或`.load sos.dll`命令加载SOS扩展,前者会根据正在调试的.NET版本自动找到SOS库。 2. **垃圾回收(GC)信息**:SOS的`!gcroot`命令可以帮助我们找出对象的...

    WinDBG用法详解

    - `.dll`:加载扩展DLL,如`sos.dll`,提供对.NET环境的调试支持。 - `!threads`:显示当前进程中的线程信息。 - `!heap -stat`:分析内存堆的状态,查找内存泄漏。 9. **调试技巧与实践** - 使用kdexts扩展:...

    Windows 更新清理工具

    这些文件支撑着mscorwks.dll,没有它们,mscorwks也无法加载。强行删除后可能只有以安全模式能勉强进入Windows,Windows也就废了。 那么怎么办?这款工具应运而生了!Windows 更新清理工具正是这些垃圾文件的清洁工...

Global site tag (gtag.js) - Google Analytics