手机上怎么买彩票双色球 微信上有人推荐买彩票 能合买彩票的平台 夫妻买彩票狂中30亿 买彩票心态 买彩票就买大乐透开奖结果 哪个平台买彩票安全吗 买彩票有买一个号的吗 怎么看走势图买彩票 如何在电脑上买彩票 美国几岁可以买彩票? 福彩工作人员买彩票 彩客网买彩票 能在微信上买彩票吗 怎么买彩票容易中

.NET CLR注入方法探讨

来源£º本站整理 作者£º佚名 时间£º2019-04-09 TAG£º 我要投稿

0x01 基础概念
首先要说一些基础£º
CLR 和 托管代码£¨Manage Code£©
中间语言 (IL)
元数据和PE文件
CLR 和 托管代码£¨Manage Code£©
.NET Framework 提供了一个称为CLR£¨Common Language Runtime£©的运行时环境£¬所以.NET 的程序£¬都是在CLR中运行的¡£
使用基于CLR的语言编译器开发的代码称为托管代码£»托管代码具有许多优点£¬例如£º跨语言集成¡¢跨语言异常处理¡¢增强的安全性¡¢版本控制和部署支持¡¢简化的组件交互模型¡¢调试和分析服务等¡£
MS的一些语言£¬例如C#¡¢VB¡¢F#£¬都是在 CLR 中运行的¡£可以将CLR理解为他们的运行环境¡£
中间语言 (IL)
对.NET 高级语言编写的代码进行编译£¬就会得到一个由IL构成的二进制文件¡£类似于就jvm中的字节码¡£
IL构成的二进制文件在运行时£¬会交由CLR进行接管£¬并由CLR进行翻译£¨JIT£©£¬生成可以直接运行的机器码£¬最后进行执行¡£
IL有时也称为通用中间语言£¨CIL£©或Microsoft中间语言£¨MSIL£©¡£
 
元数据(Metadata)和PE文件
元数据是描述程序的二进制信息£¬存储在PE文件或内存中¡£当将基于dot NET编写的代码编译为PE文件时£¬元数据和IL代码将写入到PE文件中¡£
我?#24378;?#20197;通过反编译来了解程序集或可执行文件中包含的Metadata和IL的秘密£¬打开ILDasm并加载实现准备的程序集£¬我?#24378;?#20197;看到托管PE文件的相关内容£º

.NET是基于面向对象?#27169;?#25152;以元数据描述的主要目标就是面向对象的基本元素£º类¡¢类型¡¢属性¡¢方法¡¢字段¡¢参数¡¢特性等£¬主要包括£º
定义表£¬描述了源代码中定义的类型和成员信息£¬主要包括£ºTypeDef¡¢MehodDef¡¢FieldDef¡¢ModuleDef¡¢PropertyDef等¡£
引用表£¬描述了源代码中引用的类型和成员信息£¬引用元素可以是同一程序集的其他模块£¬?#37096;?#20197;是不同程序集的模块£¬主要包括£ºAssemblyRef¡¢TypeRef¡¢ModuleRef¡¢MethodsRef等¡£
指针表£¬使用指针表引用未知代码£¬主要包括£ºMethodPtr¡¢FieldPtr¡¢ParamPtr等¡£
堆£¬以stream的形式保存的信息堆£¬主要包括£º#String¡¢#Blob¡¢#US¡¢#GUIDe等¡£
.NET 程序编写运行的流程为£º

这里只是简单描述了一些基础£¬还有一些重要的概念£º应用程序域£¬程序集£¬JIT等£¬读者可以进行深入了解¡£
推荐£º
你必须知道的.NET
¡¶CLR via C#¡·
¡¶CLR via C#, Second Edition (Pro Developer)¡·
 
0x02 History Review
开始进入主题¡£
我们的目的是在CLR中£¬对运行的方法进行注入¡¢劫持¡£比如 function A 调用的时候£¬?#23548;?#25191;行的功能确是 function B¡£
已经有人做过该方面的研究£¬也提出了几种可行的方案£º
劫持 compileMethod
Install trampoline
使用Profiling API
每种方案各有优劣£¬稍微介绍一下¡£
0x02-00 劫持 compileMethod
Jerry Wang 提出了一种 hook compileMethod的方法¡£
代码编译得到的PE文件在运行的时候£¬会调用JIT进行处理£¬翻译成机器可以执行的机器码¡£
JIT的实现DLL£¨对于.NET 4以上是 clrjit.dll / 对于.NET 2.0-3.5是 mscorjit.dll £©导出一个 _stdcall 的方法 getJit £¬此方法返回一个 ICorJitCompiler ¡£
CLR的实现DLL£¨对于.NET 4以上是 clr.dll / 对于.NET 2.0-3.5是 mscorwks.dll£©调用 getJit 方法来取得 ICorJitCompiler £¬然后调用它的 compileMethod 方法来将MSIL代码编译为本机代码¡£
JIT 处理操作根据 .NET 版本不同£¬分别位于 clrjit.dll 或者 mscorjit.dll 中£¬其中实现了一个名为getJit返回 ICorJitCompiler¡£
CLR 相关操作根据 .NET 版本不同£¬分别位于 clr.dll 或者 mscorjit.dll£¬调用 getJit 方法来取得 ICorJitCompiler, 然后调用compileMethod 方法将MSIL代码编译为本机代码¡£
//
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
//
#include "standardpch.h"
#include "icorjitcompiler.h"
#include "icorjitinfo.h"
interceptor_IEEMM* current_IEEMM = nullptr; // we want this to live beyond the scope of a single compileMethodCall
CorJitResult __stdcall interceptor_ICJC::compileMethod(ICorJitInfo*                comp,     /* IN */
                                                       struct CORINFO_METHOD_INFO* info,     /* IN */
                                                       unsigned /* code:CorJitFlag */ flags, /* IN */
                                                       BYTE** nativeEntry,                   /* OUT */

[1] [2] [3] [4] [5] [6]  下一页

¡¾声明¡¿:黑吧安全网(http://www.rliwo.live)登载此文出于传递更多信息之目?#27169;?#24182;不代表本站赞同其观点和对其真实性负责£¬仅适于网络安全技术爱好者学习研究使用£¬学习中请遵循国家相关法律法规¡£如有问题请联系我们£¬联系邮箱[email protected]£¬我们会在最短的时间内进行处理¡£
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载
        ¹ºÂò²ÊƱȨÍþÍøÖ·
        手机上怎么买彩票双色球 微信上有人推荐买彩票 能合买彩票的平台 夫妻买彩票狂中30亿 买彩票心态 买彩票就买大乐透开奖结果 哪个平台买彩票安全吗 买彩票有买一个号的吗 怎么看走势图买彩票 如何在电脑上买彩票 美国几岁可以买彩票? 福彩工作人员买彩票 彩客网买彩票 能在微信上买彩票吗 怎么买彩票容易中