栏目分类

热点资讯

sex5.

你的位置:AV网站 > sex5. > hongkongdoll 免费视频 [翻译]基于MSIL字节码注入操作.NET门径-外文翻译-看雪-安全社区|安全招聘|kanxue.com

hongkongdoll 免费视频 [翻译]基于MSIL字节码注入操作.NET门径-外文翻译-看雪-安全社区|安全招聘|kanxue.com

发布日期:2024-10-04 19:41    点击次数:115

hongkongdoll 免费视频 [翻译]基于MSIL字节码注入操作.NET门径-外文翻译-看雪-安全社区|安全招聘|kanxue.com

目次

1 – 引子hongkongdoll 免费视频

2 - CLR 环境

    2.1 – 基本成见

        2.1.1 - Metadata表

        2.1.2 - Metadata  token

        2.1.3 - MSIL 字节码

    2.2 – 实施环境

3 - JIT 编译器

    3.1 – 编译方法

    3.2 – Hook编译方法

4 - .NET Instrumentation

    4.1 – MSIL注入计谋

    4.2 - Resolving the method handle

    4.3 – 基于call领导达成一个跳板

    4.4 – 制作一个动态方法

    4.5 – 调用用户自界说代码

    4.6 – 建立SHE表

5 – 现实样例

    5.1 – Web应用密码盗取

    5.2 – 坏心软件检测

6 – 论断

7 – 援用

8 – 源代码

--[ 1 – 引子

为了找一种在.NET门径运行历程中操作它的新方法,本文咱们将深刻探索.NET框架里面。 践诺上,也曾有一些库不错操作.NET门径,它们大多hook某个方法编译后的代码,或者修改汇编领导并将修改成果写回环件。微软也提供了API用于操作某个门径的实施历程。然则必须在门径实施前通过缔造一些环境变量使该API可用。

咱们的想法是,在不碰二进制汇编代码的情况下,操作运行中的门径。统统功能通过使用一个高档.NET言语达成。正如将看到的,咱们通过在贪图方法被编译前注入稀奇的MSIL代码来达成。

--[ 2 – CLR环境

在在意刻画如安在方法中注入稀奇的MSIL代码之前,有必要先先容一些基本成见,如:.NET框架怎样责任,它的基本组件有哪些。咱们只先容与咱们的想法关系的成见。

---[ 2.1 – 基本成见

.NET二进制代码践诺上不错看作念是汇编代码(尽管它践诺上莫得任何汇编代码)。它是个自刻画的结构,这意味着在汇编代码中你能找到运行需要的统统信息(更多关系信息见[01])。正如将看到的,这些信息不错通过内存映象窥探到。内存映象大致让咱们对汇编代码界说了哪些类型和方法有全面的了解。咱们相似不错取得传给特定方法的参数的类型和称号。独一丢失的信息是腹地变量的称号,不外这对咱们不进军。

----[ 2.1.1 - Metadata 表

注:元数据是刻画数据的数据,.NET是基于面向对象的,是以元数据刻画的主要贪图等于面向对象的基本元素:类、类型、属性、方法、字段、参数、特色等。

上头提到的统统信息存在叫作念Metadata tables的表中。底下的列表摘自援用[02],列出了咫尺统统Metadata表的索引和称号:

00 - Module            01 - TypeRef          02 - TypeDef04 - Field             06 - MethodDef        08 - Param09 - InterfaceImpl     10 - MemberRef        11 - Constant12 - CustomAttribute   13 - FieldMarshal     14 - DeclSecurity15 - ClassLayout       16 - FieldLayout      17 - StandAloneSig18 - EventMap          20 - Event            21 - PropertyMap23 - Property          24 - MethodSemantics  25 - MethodImpl26 - ModuleRef         27 - TypeSpec         28 - ImplMap29 - FieldRVA          32 - Assembly         33 - AssemblyProcessor34 - AssemblyOS        35 - AssemblyRef      36 - AssemblyRefProcessor37 - AssemblyRefOS     38 - File             39 - ExportedType40 - ManifestResource  41 - NestedClass      42 - GenericParam44 - GenericParamConstraint每个表由一系列行构成。行的大小由表的类型决定,而况不错包含对其它Metadata表的援用。那些表皆通过Metadata token来援用,下一节先容Metadata token的成见。

----[ 2.1.2 – Metadata token

Metadata token(或短 token)是CLR框架的基本成见。 token准许你援用指定表中指定索引值的项。它是个4字节值,由两部分构成[08]:表索引+RID。表索引是 token的最高字节,指向一个表。RID从 token字节偏移1起,长3字节,是表内的一个纪录的指针(其实是个偏移,从2运行每个+1)。动作一个例子,咱们来看底下的Metadata token:

(06)00000F

0x06是援用的表的编号,本例中援用的是MethodDef表(参照2.1.1的表)。临了三字节是RID,本例中值是0x0F。

----[ 2.1.3 - MSIL字节码

当咱们用.NET高档言语写门径,编译器将代码诊疗成MSIL或ECMA-335[03]CIL中间暗示时势,它非常于经常所说的中间言语。装配VS会统统装配一个相等好用的器具ILDasm,愚弄它不错通过列出MSIL代码和其它有效信息来反汇编一个汇编门径。动作例子,咱们编译如下的C#源代码:

JIT中实施一个方法有两种情况。第一,方法也曾被编译,这种情况咱们不错平直jump到编译后的unmanaged代码。第二,方法还莫得被编译,这种情况代码jump到一个存根函数,存根函数call导出的compileMethod方法编译并实施该方法,该函数界说在corjit.h [04]。

---[ 3.1 - The compileMethod

再多分析一下这个进军的方法。该方法的函数原型如下:

compileMethod由Clrjit.dll导出(老版块.NET中由mscorjit.dll导出),咱们不错很容易地装配一个hook阻挠统统编译央求。底下是该历程

的F#伪代码:

绝色诱惑

接下来修改咱们遴荐的方法的MSIL缓存并重定向实施流到咱们的代码。正如将看到的,这是一个陡立的历程,要正式一些方面。

---[ 4.1 – MSIL注入计谋

为了调用咱们的代码,要解任的要津如下:

在代码运行位置装配一个跳板。该跳板将调用一个动态界说的方法。界说一个特定签名的动态方法构造一个对象数组,包含传给方法的参数。调用一个转发函数,该函数加载咱们的汇编代码,并最终通过一个指向原方法的句柄和包含参数的对象数组动作参数来调用咱们的代码。

咱们要创建的结构解任底下图表界说的旅途:

|     -----------       hongkongdoll 免费视频

Powered by AV网站 @2013-2022 RSS地图 HTML地图

Copyright Powered by站群 © 2013-2024