.NET对PE结构的扩展

akshare 布林通道策略 import datetime import pandas as pd import backtrader as bt import matplotlib.pyplot as plt from datetime import datetime import matplotlib import akshare as ak %matplotlib inline class Boll_strategy(bt.Strategy): #自定义参数,每次买入1800手 params=(('size'. 阅读详情
 

可执行文件的格式是反映一个系统程序运行机制的重要方面,Win32下可执行文件是读者已经非常熟悉的PE格式, 在.NET系统中,运行机制的改变带来了可执行文件格式的扩展。一方面,.NET建立在Win32/64的基础上,兼容性的要求决定了.NET的可执行文 件必须是在PE的基础上进行扩展;另一方面,Win32中PE文件存储的是汇编代码,而.NET中存储的是MSIL与元数据,后者无论是在逻辑结构还是物 理结构上,都与传统PE格式有很大区别。本章将详细讨论元数据的意义及其在可执行文件中的存储,读者需要对传统PE格式有所了解,因为本章会跳过这些基础 内容而直接进入.NET的扩展部分。

如果用普通的PE文件结构工具查看.NET可执行文件,不会发现它有什么特别之处,因为所有的头结构、节名称都和Win32下的相同。但细心的读者会发 现,.NET PE文件的第15项数据目录COM大多数情况下的RVA为0x2008,大小为0x48,而该地址正指向了.text节。没错,.NET对PE的扩展主要 体现在了.text节的构造上:在Win32下,.text节保存的是汇编;而.NET中保存的是MSIL、元数据、以及各种特殊的.NET结构。本节首 先带领读者认识大变样后的.text节,随后介绍.NET PE中最重要的结构:CLR头。

图3.1为一般情况下.NET PE文件的.text节结构,通常包含八部分内容,比较重要的有以下几项:Common Language Runtime头(CLR头),这是整个.NET可执行文件综合信息的存放处,其作用类似于Win32下的PE头;MSIL代码和可选的异常处理表,这是 加密软件重点关注的数据,也是解密时最希望得到的数据;强名称及其hash数据,当一个文件被签署了强名称后,相应的强名称数据保存于此;最后则是元数 据。

图3.1  .NET PE文件中的.text节结构

前面叙述了.text节中存储了哪些内容,接着将介绍它们具体的结构及含义。先介绍最重要的结构CLR头,它的定义在SDK安装目录里include目录下的CorHdr.h文件中,结构名叫IMAGE_COR20_HEADER,精简后的C++代码如下:
// COM+ 2.0 header structure.
typedef struct IMAGE_COR20_HEADER
{
DWORD                   cb;             
WORD                    MajorRuntimeVersion;
WORD                    MinorRuntimeVersion;
IMAGE_DATA_DIRECTORY    MetaData;       
DWORD                   Flags;          
union {
DWORD               EntryPointToken;
DWORD               EntryPointRVA;
};
IMAGE_DATA_DIRECTORY    Resources;
IMAGE_DATA_DIRECTORY    StrongNameSignature;
IMAGE_DATA_DIRECTORY    CodeManagerTable;
IMAGE_DATA_DIRECTORY    VTableFixups;
IMAGE_DATA_DIRECTORY    ExportAddressTableJumps;
IMAGE_DATA_DIRECTORY    ManagedNativeHeader;   
} IMAGE_COR20_HEADER, *PIMAGE_COR20_HEADER;

表3-1详细解释了该结构中各项的意义。整个结构的大小为0x48,正是倒数第2项数据目录中指出的大小。

表3-1  CLR头的结构与说明


偏移

大小

名    称

说    明

0

4

Cb

CLR头的大小,以byte为单位

4

2

MajorRuntimeVersion

能运行该程序的最小.NET版本的主版本号

6

2

MinorRuntimeVersion

能运行该程序的.NET版本的副版本号

8

8

MetaData

元数据的RVA和Size

16

4

Flags

属性字段,可以在IL中以.corflags进行显式设置,也可以在编译时用/FLAGS选项进行设置,其中命令行设置的优先级较高

20

4

EntryPointToken
/EntryPointRVA

入口方法的元数据ID(也就是token),在EXE文件必须有,而DLL文件中此项可以为0(.NET 2.0中,此项还可以是本地入口代码的RVA值)

24

8

Resources

托管资源的RVA和Size

32

8

StrongNameSignature

强名称数据的RVA和Size(强名称的意义在后面介绍)

40

8

CodeManagerTable

CodeManagerTable的RVA与Size,此项暂未使用,为0

48

8

VTableFixups

v-table项的RVA和Size,主要供使用v-table的C++语言进行重定位

56

8

ExportAddressTableJumps

用于C++的输出跳转地址表的RVA和Size,大多数情况为0

64

8

ManagedNativeHeader

仅在由ngen生成本地模块中该项不为0,其余情况均为0

其中Flags项定义了该exe文件的最基本性质,包含以下设置:
COMIMAGE_FLAGS_ILONLY           =0x00000001,//此程序由纯IL代码组成
COMIMAGE_FLAGS_32BITREQUIRED    =0x00000002,//此程序仅在32位系统上运行
COMIMAGE_FLAGS_IL_LIBRARY       =0x00000004,//此程序仅作为IL代码库(很少用)
COMIMAGE_FLAGS_STRONGNAMESIGNED =0x00000008,//此程序有强名称(重要)
COMIMAGE_FLAGS_NATIVE_ENTRYPOINT    =0x00000008,//此程序入口方法为非托管
COMIMAGE_FLAGS_TRACKDEBUGDATA   =0x00010000,//loader和JIT需要追踪调试信息

如果读者是初次接触上述内容,建议使用UltraEdit等编辑工具打开某个.NET PE文件,在十六进制编码的基础上对照表中各项进行学习。通常在进行软件分析时,该头结构中的大多数信息是不变的,若有特殊需要,可利用专门的文件结构查 看工具进行浏览,如传统的Win32文件结构查看工具如PEiD、PEInfo、LordPE等,以及专为.NET编写的查看工具,如 Researcher .NET、Spices.NET的元数据结构浏览组件、CFF Explorer等,有兴趣的读者还可以自己编写类似工具。图3.2便是用LordPE载入mscorlib.dll后显示的CLR头的数 据,mscorlib.dll是.NET平台的基础文件之一,位于(系统盘)/WINDOWS/Microsoft.NET/ Framework/v2.0.50727目录下。


图3.2  LordPE显示mscorlib.dll的CLR头结构

CLR头中最重要的项是MetaData,它是IMAGE_DATA_DIRECTORY格式,指出了该文件中元数据存放的位置和大小。而这,就是3.2节将详细阐述的内容。

2025届程序技术类笔试题 希尔排序在直接插入排序的基础上进行了改进,它通过比较相距一定间隔的元素来进行,各轮比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一轮排序为止。某人逆着水流的方向向岸边划船,每次行进前进x米后需要休息一下,休息期间船会自行倒退y米,每次休息后再次行进,前进距离缩短1/5,若起始距离岸边为m米,问:能否到达岸上,需要行进多少次才能上岸。直接插入排序的原理是将第i个元素插入前面i-1个已排好序的记录中,将比第i个元素大的记录依次向后移动一个位置,将第i个元素插入空位。第二轮相邻比较,后移2次。 阅读详情

相关推荐

华为云Stack的学习(三)

LVS是四层负载均衡,建立在OSI模型的传输层之上,所以效率非常高。NAT模式的转发主要通过修改IP地址(位于OSI模型的第三层网络层)实现转发。DR模式的转发主要通过修改MAC地址(位于OSI模型的第二层数据链路层)实现转发。云服务框架中使用的DR模式。域名解析服务器分为管理侧(OM)和租户侧(Tenant)**DNS-OM:**作为云服务的本地DNS服务器,为云服务提供域名解析服务,并代理公网域名的解析。

Ciyaso的博客 8562

windows系统平台下的PE文件格式和数据定义详解(附带详细高清大图)

PE(Portable Executable)格式,是微软Win32环境可移植可执行文件(如exe、dll、vxd、sys和vdm等)的标准文件格式。 PE格式衍生于早期建立在VAX(R)VMS(R)上的COFF(Common Object File Format)文件格式。Portable 是指对于不同的 Windows版本和不同的CPU类型上PE文件的格式是一样的,当然CPU不一样了,CP

关注互联网安全的小虾米一枚 6022

Obsidian免费同步全攻略:手把手教你用OneDrive+Remotely Save插件跨设备同步笔记

本文提供了一份详细的Obsidian免费同步方案指南,核心是利用OneDrive云存储与Remotely Save插件实现跨设备笔记同步。文章手把手教学,涵盖插件安装、OneDrive授权配置、桌面端与移动端的同步设置,并解答了常见问题,帮助用户在不依赖官方付费服务的情况下,构建稳定、自主的免费同步工作流。

bash7scripter的博客 850

PE文件解析-调试、版权与.NET信息(COM表)

一、映像调试信息     PE文件头可选映像头中数据目录表的第7成员IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG]指向映像调试信息,它保存在PE文件中,通常在".debug"区段。   映像调试信息是一个IMAGE_DEBUG_DIRECTORY结构体数组,该结构体定义如下: typedef struct _I...

zhyulo的博客 3170

CRaxsRat v7.6 安装与使用教程(附工具下载)

摘要:本文介绍远程管理工具CRaxsRat v7.6的合法应用与基本操作,强调仅限授权环境使用。该工具支持多客户端管理、TLS加密及文件/进程控制等功能,适用于内网维护与安全测试。安装需Windows 10/11系统及.NET 4.8,步骤包括解压运行、配置监听端口及生成客户端。文中提醒防火墙设置与杀软误报问题,并重申禁止非法用途,建议在虚拟机或隔离环境学习使用。

lzj781210的博客 3795

MS2107 CVBS转USB2.0 音视频采集芯片,支持1080P@30HZ输出

MS2107 是一款视频和音频采集芯片,支持CVBS转USB2.0 ;可以将 CVBS、S-Video 和音频信号通过 USB接口传送到 PC、智能手机和平板电脑上预览或采集。

TEL18967112838的博客 2076

深入探究 Win32 PE 文件格式,第二部分

深入探究 Win32 PE 文件格式,第二部分<br />Matt Pietrek<br />这篇文章假定你熟悉 C++ 和 Win32。<br />概述 Win32 可移植可执行(PE)文件格式被设计为可在所有版本的操作系统、所有受支持的处理器上都可使用的标准可执行文件格式。自从它被引入以来,PE 格式经历过一些大的变化,特别是 64 位 Windows 的出现。这篇文章的第一部分介绍了 RVA、数据目录和文件头。在第二部分将探究可执行文件中的各种节。包括导出节、导出转送、绑定和延迟加载。还包括调试目录、

sqcfj的专栏 2892

目标检测中回归损失函数(L1Loss,L2Loss,Smooth L1Loss,IOU,GIOU,DIOU,CIOU,EIOU,αIOU ,SIOU)

为了解决CIoU的问题,有学者在CIOU的基础上将纵横比拆开,提出了EIOU Loss,并且加入Focal聚焦优质的预测框,与CIoU相似的,EIoU是损失函数的解决方案,只用于训练。在错误率小的地方,梯度的值也应当小,反之在错误率大的地方,梯度也应当大,因为这时候我们需要对错误率小的情况进行微调,而错误率大的地方进行大刀阔斧的调整;如下图所示,三种情况IoU都相等,但看得出来他们的重合度是不一样的,左边的图回归的效果最好,右边的最差。DIoU的作者考虑到,在两个框中心点重合时,c与d的值都不变。

zyw2002的博客 6632

再探.NET的PE文件结构(安全篇)

一、开篇   首先写在前面,这篇文章源于个人的研究和探索,由于.NET有自己的反射机制,可以清楚的将源码反射出来,这样你的软件就很容易被破解,当然这篇文章不会说怎么样保护你的软件不被破解,相反是借用一个软件来讲述是怎么被攻破的,也会有人说这是一篇破文,我其实这篇文章已经写了很长时间了,不知道以什么形式发出来,因为毕竟是有些破解类的东西。但是我觉得从这篇文章相反的是能够带来一些启发。大家应该都...

weixin_30678821的博客 351

企业网络改造必看:如何用华为S5700三层交换机解决多部门隔离通信?

本文详细介绍了如何利用华为S5700三层交换机解决企业多部门网络隔离与通信需求。通过划分VLAN实现逻辑隔离,并配置三层路由实现受控互通,结合ACL进行精细访问控制,构建安全高效的企业网络。文章提供了从拓扑规划、地址分配到核心配置的完整实战指南。

weixin_29260291的博客 263

【C语言】一文搞懂C语言文件操作

读写文件、文件相关库函数详解、文件缓冲区介绍

StackFrame 5663

浅析MSIL中间语言——PE文件结构篇

一、开篇   开篇我想讲一下于本文无关的话题,其实我很想美化一下自己博客园一直没时间弄,无意间找了博客园李宝亨的博客园里面有一篇分享自己主题的文章,我就将这个模板暂时用作我的blog主题,我要讲述一个关于PE文件结构的文章,这篇文章动手能力比较强,希望大家能够动手进行操作,这边文章篇幅有可能会长一些,为了方便大家阅读我可以将其分为几个部分进行讲解,主要分为以下几个部分:   ① PE文件...

weixin_30951389的博客 270

【06】C#入门到精通——C# 多个 .cs文件项目 同一项目下添加多个 .cs文件

本文介绍了如何将C#游戏开发中的代码从单个.cs文件拆分到多个.cs文件中,以提升代码的可维护性和可读性。文章演示了在Visual Studio中创建Hero类和ShowInfo类的具体步骤:通过右键项目名添加新建类,将原有代码分别剪切到对应的类文件中,并自动生成命名空间。拆分后需要在Program.cs中通过"using"指令引用这些类,最后通过运行测试验证功能正常。这种模块化代码组织方式能有效解决单一文件代码过长、结构混乱的问题。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1138

MS.Net CLR 扩展PE结构分析

概述 本系列文章,将从系统层角度,通过对MS.Net CLR架构对PE映像结构的扩展的分析, 解析MS.Net CLR架构的底层部分运行机制,帮助读者从更深层次理解CLR中某些重要概念 本文读者应具备基本的Win32编程经验,了解.Net中常见概念意义,并对Win32之PE映像 结构有一定了解,具体结构请参看Ma...

weixin_30469895的博客 135

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

MS.Net CLR 扩展PE结构分析(转,很不错的文章)

<!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--><script type="text/javascript"

zgqtxwd的专栏 445

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

MS.Net CLR扩展PE结构分析 (1)

1.概述 本文从系统底层角度,通过分析MS.Net CLR架构在Win32平台上对PE可执行文件 映像结构的扩展,解析CLR架构底层的部分运行机制,帮助读者从更深层次理解CLR架构 中某些重要概念。 本文读者应具备基本的Win32编程经验,了解CLR中常见概念意义,并对Win32平台 之PE可执行文件映像结构有一定了解,具体说明请参看Matt Pietrek于...

weixin_30855099的博客 409

MS.Net CLR 扩展PE结构分析2

<!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--><script type="text/javascript"

zgqtxwd的专栏 479

浅析.NET Framework对PE文件格式的扩展(http://webcrazy.yeah.net)

浅析.NET Framework对PE文件格式的扩展              WebCrazy(http://webcrazy.yeah.net)   Microsoft .NET Framework出来小阵子了,我也自从其Beta 1以来,第一次接触。本文将从.NET生成的一个小PE文件着手,旨在理解.NET Framework对PE文件格式的扩展。这种扩展目的是让Windows系统识别Com

FreeXploiT 1569

PE结构扩展与元数据

.net对PE结构的扩展主要体现在.text节上,保存了MSIL、元数据、各种特殊的.net结构。 .text变样后:输入表、CLR头、MSIL代码和可选的异常处理表、强名称的Hash数据、元数据、托管资源数据(可选)、非托管资源数据(可选)、运行时启动信息 CLR头:定义在SDK安装目录的CorHdr.h文件,结构叫IMAGE_COR20_HEADER 元数据:元数据本身也是数据,它的功能...

weixin_33819479的博客 149

[转贴]浅析.NET Framework对PE文件格式的扩展

浅析.NET Framework对PE文件格式的扩展[文章来源:http://www.pcvc.net/category/content.asp?sendid=140]  Microsoft .NET Framework出来小阵子了,我也自从其Beta 1以来,第一次接触。本文将从.NET生成的一个小PE文件着手,旨在理解.NET Framework对PE文件格式的扩展。这种扩展目的是让Windo...

weixin_34362991的博客 176

dumpbin展示.Net PE文件格式

我们写一个很简单的.Net的Console的Application.>>dumpbin -all ConsoleApplication1.exe>c:/b.txt>>notepad c:/b.txt去掉二进制代码之后,我们得到下面的结构和结果:Dump of file ConsoleApplication1.exePE signature found

lbq1221119 760

浅析.NET Framework对PE文件格式的扩展

<!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--><script type="text/javascript"

zgqtxwd的专栏 599
上一篇: DeDe反编译器
下一篇: 换一种方式做加密
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值