mscorjit的介绍,兼对某壳企业版的分析

在前面介绍mscorwks的时提到了,.net的程序是以函数为单位编译。而在 mscorjit中提供了一个函数
compileMethod 。mscorwks就是通过调用这个函数来编译.Net方法的。
对于EE层,或者虚拟机预处理层的加密壳,只需要hook这个函数就可以dump出方法体的代码了。
需要注意一点,这个函数是 thiscall 调用约定的。

.Net方法体进入 compileMethod  之后是怎么样的处理流程呢?

限于篇幅,这里只能简单介绍一下,具体详情可以参考 sscli 2.0的源代码。
compileMethod 实际上只是一个接口函数,它没有做实际什么工作,
只是简单的 调用另一个函数:jitNativeCode。

在jitNativeCode 函数是一个线程安全的函数,在它里面实际上只是做了一些准备工作。
安装异常处理,然后实例化一个Complier对象。初始化Complier类,再调用
这个类的一个成员函数 compCompile 。

在 compCompile 就开始了实际的编译工作。

所以hook jit来实现脱壳的话,我们有三个选项:
 hook compileMethod  (thiscall)
 hook jitNativeCode (fastcall)
 hook compCompile (thiscall)

对于这三个方案 实现脱壳是完全一样的。在这三个函数里面我们都能够获取到脱壳所需要的结构体。
实际上脱壳需要的结构体是 CORINFO_METHOD_STRUCT,CORINFO_MODULE_STRUCT,CORINFO_METHOD_INFO这三个。

我在脱某壳个人版加密的程序时是采用的方法2,hook jitNativeCode 函数。
hook方法:采用的替换方式,即直接修改 compileMethod  函数,将 call jitNativeCode 改为 call myhook。
在 myhook函数里面处理脱壳工作,然后再调用 call jitNativeCode 。

实际上有一个技巧。一般我们通过反射invoke让一个方法体进入jit处理过程的,然后在 myhook 里面截取dump方法体。
假设我们在dump一个 Exit函数时,如果让它执行了会导致进程退出,因为invoke会执行方法,而我们需要的只是让方法体进入
jit处理过程,以方法dump,而不希望这个方法被执行。所以我们可以不用回调 jitNativeCode 函数,直接返回一个nop地址。

maxtocode 2007企业版具称是虚拟机处理层的壳,那它在虚拟机处理层做了什么工作呢?
具分析 mscorjit.dll 的内存镜像,它实际上做了和 jit层脱壳 差不多的工作,
同时使用了 方案2 和 方案 3. 显然它hook jit的目的不是脱壳,而是实现 方法体的还原。

我们可以很容易确定 在程序运行到 compCompile 中后,加密壳的运行库已经完成了所有解密工作,
因此在 compCompile 函数里面,或者它下级的函数里面是脱壳的好时机。

如是我修改了一下jithook程序,只改了hook位置,即hook compCompile 的下级函数。
然后测试dump。效果如下:

可以dump出源代码。
看来企业版相对个人版来说只是hook位置的变化,对于脱壳来说,基本上没有增加任何难度,
我们也只需要更改一下hook位置,就可以dump了。

另外发现企业版运行库的一个bug,可以用简单的方法脱壳。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RAD Studio 10.2 Toyko Update2 10.2.2 KEYGEN 一键激活,安装时选择试用,安装完毕后一键激活即可。亲测可用!! Win10 Build 16299 旗舰 亲测可用!!! 为了便于在 Lite 14.x 中使用大侠们的特别补丁,初步写成这个:Activator.exe 他的主要作用: 1、整合 elseif、unis、x-force、cjack 大虾的 Keygen 相对原始部署方式,这个 Activator 实现“一键激活”! 使用方法: 1、执行 Activator.exe 发布历史: 2017.12.14 - v14.2 1、根据 25.0.28979.1978 原制作,基于 RadStudioKeygenSourceCodeTokyo10.2Update2CorrectedSetup.zip 的成果 2017.08.11 - v14.1 1、根据 25.0.27659.1188 原制作,基于 elseif-Rad-Studio-Keygen-master upto 10.2.1 的成果 2017.03.26 - v14.0 1、根据 25.0.26309.314 原制作,基于 elseif、unis、x-force、cjack 等大虾的成果 已知问题: 1、在一些操作系统上如果出现安全提示,直接确定即可。 特别感谢: 1、elseif、unis、x-force、cjack、crackerjack、dr、freecat、gateway、huayan889、kerlingen、sinner、yuto 等大侠的特别补丁,感谢诸位我知道的不知道的的大虾们的辛勤劳动! 2、iny、nevergrief、snakejiao、star5、tintin1943、ti9er、wang_80919、wuxiangyang 等等我知道的不知道的的网友们的热情测试! 3、andreas hausladen 等大虾们的无私贡献! O(∩_∩)O~ Delphi 10.2 and C++Builder 10.2 Updata2 亲测可用! Embarcadero® C++Builder 10.2 Version 25.0.28979.1978 Copyright © 2017 Embarcadero Technologies, Inc. All Rights Reserved. advapi32.dll, 10.0.16299.15, C:\WINDOWS\System32\ AEPIC.dll, 10.0.16299.15, C:\WINDOWS\SYSTEM32\ androiddebugide250.bpl, 25.0.28979.1978, d:\program files (x86)\embarcadero\studio\19.0\Bin\ appanalytics250.bpl, 25.0.28979.1978, D:\Program Files (x86)\Embarcadero\Studio\19.0\bin\ apphelp.dll, 10.0.16299.98, C:\WINDOWS\SYSTEM32\ applet250.bpl, 25.0.28979.1978, d:\program files (x86)\embarcadero\studio\19.0\bin\ asmview250.bpl, 25.0.28979.1978, d:\program files (x86)\embarcadero\studio\19.0\Bin\ ATL.DLL, 3.5.2284.0, C:\Windows\System32\ bcbandroid250.bpl, 25.0.28979.1978, d:\program files (x86)\embarcadero\studio\19.0\Bin\ bcbcoment250.bpl, 25.0.28979.1978, d:\program files (x86)\embarcadero\studio\19.0\Bin\ bcbcompro250.bpl, 25.0.28979.1978, d:\program files (x86)\embarcadero\studio\19.0\Bin\ bcbent250.bpl, 25.0.28979.1978, d:\program files (x86)\embarcadero\studio\19.0\Bin\ bcbfmxide250.bpl, 25.0.28979.1978, d:\program files (x86)\embarcadero\s

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值