PE文件解析-资源(Resource)

WindowsPE 第七章 资源表 第七章 资源表     在程序设计中,总会设计一些数据。这些数据可能是源代码内部需要用到的常量,菜单选项、界面描述等;也可能是源代码外部的,比如程序的图标文件、北京音乐文件、配置文件等,以上这些数据统称为资源。按照程序与数据分离的设计思想,最理想的方案是单独为程序所需要的数据安排一节来存储-PE中的资源就是这么做的。 7.1资源分类     资源数据在PE里是最复杂的一种。其难度主要体现在对 阅读详情

一、位置

    PE文件头可选映像头中数据目录表的第3成员IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE]指向映像调试信息,它保存在PE文件中,通常在".rsrc"区段。

二、资源简介

    程序内部和外部的界面等元素的二进制数据统称为资源,程序把它们放在一个特定的表中,符合数据和程序分离的设计原则。资源包括加速键(Accelerator)、位图(Bitmap)、光标(Cursor)、对话框(Dialog Box)、图标(Icon)、菜单(Menu)、串表(String Table)、工具栏(Toolbar)和版本信息(Version Information)等。

    资源有很多种类型,每种类型的资源中可能存在多个资源项,这些资源项用不同的ID 或者名称来区分。但是要将这么多种类型的不同ID 的资源有序地组织起来是一件非常痛苦的事情,因此,我们采取类似于磁盘目录结构的方式保存。

    PE 文件中的资源是按照 资源类型 -> 资源ID -> 资源代码页 的3层树型目录结构来组织资源的,通过层层索引才能够进入相应的子目录找到正确的资源。

    每一层都是以IMAGE_RESOURCE_DIRECTORY结构为头部的,并且后面跟着一个IMAGE_RESOURCE_DIRECTORY_ENTRY结构数组。其中IMAGE_RESOURCE_DIRECTORY负责指出后面数组中的成员个数,IMAGE_RESOURCE_DIRECTORY_ENTRY数组成员分别指向下一层目录结构。

三、数据结构

    资源目录结构:

IMAGE_RESOURCE_DIRECTORY与IMAGE_RESOURCE_DIRECTORY_ENTRY结构体定义如下:

typedef struct _IMAGE_RESOURCE_DIRECTORY {
    DWORD   Characteristics;      //属性,一般为0
    DWORD   TimeDateStamp;        //资源的产生时刻,一般为0
    WORD    MajorVersion;         //主版本号,一般为0
    WORD    MinorVersion;         //次版本号,一般为0
    WORD    NumberOfNamedEntries; //以名称(字符串)命名的资源数量
    WORD    NumberOfIdEntries;    //以ID(整型数字)命名的资源数量
} IMAGE_RESOURCE_DIRECTORY, *PIMAGE_RESOURCE_DIRECTORY;

typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY {
    union {
        struct {
            DWORD NameOffset:31;
            DWORD NameIsString:1;
        };
        DWORD   Name;
        WORD    Id;
    };
    union {
        DWORD   OffsetToData;
        struct {
            DWORD   OffsetToDirectory:31;
            DWORD   DataIsDirectory:1;
        };
    };
} IMAGE_RESOURCE_DIRECTORY_ENTRY, *PIMAGE_RESOURCE_DIRECTORY_ENTRY;

1.第一层

    第一层起始于一个IMAGE_RESOURCE_DIRECTORY头,后面紧接着是IMAGE_RESOURCE_DIRECTORY_ENTRY数组。数组个数=NumberOfNamedEntries+NumberOfIdEntries。

    IMAGE_RESOURCE_DIRECTORY_ENTRY使用的是Name与OffsetToDirectory,分别代表了资源类型与第二层的数据偏移地址。Name与资源类型的匹配如下:

    OffsetToDirectory数据偏移地址是相对整个资源结构来说的,也就是说首个第一层的起始偏移地址加上OffsetToDirectory就是第二层的偏移地址。

2.第二层

    与第一层一样,第二层起始于一个IMAGE_RESOURCE_DIRECTORY头,后面紧接着是IMAGE_RESOURCE_DIRECTORY_ENTRY数组。数组个数=NumberOfNamedEntries+NumberOfIdEntries。

    IMAGE_RESOURCE_DIRECTORY_ENTRY使用的是NameIsString、NameOffset、Id与OffsetToDirectory。其中OffsetToDirectory与第一层一样,代表了第三层的数据偏移地址,同样是相对整个资源结构来说的。

    如果NameIsString=1,说明该资源以名称(UNICODE编码的字符串)定义的,NameOffset是名称的相对整个资源结构的偏移地址。相反,如果NameIsString=0,说明该资源以ID(整型数字)定义的,ID号为Id。

    NameOffset相对地址指向的是IMAGE_RESOURCE_DIR_STRING_U结构体,该结构体定义如下:

typedef struct _IMAGE_RESOURCE_DIR_STRING_U {
    WORD    Length;           //字符串的长度
    WCHAR   NameString[ 1 ];  //UNICODE字符串,由于字符串是不定长的。由Length 制定长度
} IMAGE_RESOURCE_DIR_STRING_U, *PIMAGE_RESOURCE_DIR_STRING_U;

3.第三层

    与前两层一样,第二层起始于一个IMAGE_RESOURCE_DIRECTORY头,后面紧接着是IMAGE_RESOURCE_DIRECTORY_ENTRY数组,但不同的是数组个数=1。

    IMAGE_RESOURCE_DIRECTORY_ENTRY使用的是Name与OffsetToData,分别代表了资源语言类型与资源数据相对地址。Name是指语言内码,比如936代表简体中文。

    OffsetToData是相对整个资源结构的偏移地址,指向一个IMAGE_RESOURCE_DATA_ENTRY结构体,该结构体定义如下:

typedef struct _IMAGE_RESOURCE_DATA_ENTRY {
    DWORD   OffsetToData;  //资源数据的RVA
    DWORD   Size;          //资源数据的长度
    DWORD   CodePage;      //代码页, 一般为0
    DWORD   Reserved;      //保留字段
} IMAGE_RESOURCE_DATA_ENTRY, *PIMAGE_RESOURCE_DATA_ENTRY;

 

【PE结构】资源表 一、前言 二、PE整体结构 三、DOS头 四、NT头 五、区段头 六、导出表 七、导入表 八、资源表 九、其他表 1.概念 程序中通常包含图片、菜单、控件、不同样式的文本等多种多样的内容。 这些内容或界面元素,都以二进制的形式保存在PE文件中。 这些数据保存的位置,就是PE文件的资源段(.rsrc) 这些数据的组织格式,我们成为资源表 2.资源表定... 阅读详情

相关推荐

PE文件结构简述

简述: PE文件结构分为五个部分: DOS文件头 DOS加载模块 PE文件头 区段表 区段 PE文件中显示的所有地址基本都是RVA,倘若想要换算成VA一般需要加上基地址ImageBase与文件偏移地址RVA。 虚拟地址(VA=virtual address):每个32位PE文件被加载到内存的时候都会被分配4GB的虚拟内存,虚拟地址等于“程序的相对虚拟地址+基地址”。 相对虚拟地址(RVA=relatively virtual address):相对虚拟地址是相比较于文件开头的地

Shanfenglan's blog 35万+

PE文件格式学习(五):资源表(Resource)

1.概述 程序内部和外部的界面等元素的二进制数据统称为资源,程序把它们放在一个特定的表中,符合数据和程序分离的设计原则。 Windows程序中的资源大致分为六类:菜单、对话框、位图、光标、图标、自定义资源 资源表是数据目录表中的第三个元素,排在导入表的后面。 2.资源表解析 资源表的解析比较复杂,可能是所有数据目录表中最复杂的一个。我将结合例子说明,这样会比较好理解。 我们的文件在十六进制工具01...

tutucoo 1999

PE总结12---PE文件结构之资源表 (IMAGE_RESOURCE_DIRECTORY)

资源在PE中是以目录的形式存在的,一般有3层:资源类型,目标资源ID与资源代码页 都是以IMAGE_RESOURCE_DIRECTORY结构为头部的,并且后面跟着一个IMAGE_RESOURCE_DIRECTORY_ENTRY结构数组。 IMAGE_RESOURCE_DIRECTORY,负责指出后面数组中的成员个数 IMAGE_RESOURCE_DIRECTORY_ENTRY,数组成员分

oBuYiSeng的博客 7758

PE文件结构-导入表详解

当PE文件运行时,PE文件将被系统加载进入内存中,此时Windows加载器会定位所有的导入的函数或者将定位到的内容填写到可执行文件的某个位置供使用,这个定位是需要借助于可执行文件的导入表来实现的。导入表中存放了所使用的DLL模块名称及导入函数的名称或者函数序列。 在PE文件中定位到PE头部的可选头的位置,可选头IMAGE_OPTIONAL_HEADER中最后一个成员: IMAGE_DATA_DI...

wxf明的博客 1868

解析资源表

一、资源表简介 资源表是PE所有表里边最复杂的表,造成资源表复杂是有历史原因的,简单说就是微软设计PE的时候错误的以为只要定义16中资源类型就够了,后来发现远远不够,但是PE结构已经定下来了,只能在原有基础上修改,因此就造成了资源表这块比较不好理解。 所谓的不好理解,就是它里边用到的结构,其中的属性会出现位段/位域的用法,同一个4字节,要根据高位判断它到底是一个整数还是一个偏移;然后偏移并不是RVA,而是相对于资源表的偏移。 但是这些并不能难倒我,我花了一天,把解析程序写出来了。 推荐一本书叫《WINDOW

hambaga的博客 1236

Windows PE文件资源提取与结构分析便携工具包(含PE Explorer和Resource Hacker)

直接双击运行的Windows PE文件分析组合工具,专注EXE/DLL等可执行文件的资源提取、修改与底层结构查看。PE Explorer部分提供完整的PE头解析能力,能读取节表、导入导出表、重定位表、调试信息及嵌入式资源;配套pexdata.rdat索引数据和pexplorer.chm帮助文档,便于快速定位关键结构字段。Resource Hacker独立模块支持可视化编辑图标、位图、字符串表、对话框、菜单、版本信息等资源内容,兼容.def定义文件导入导出,支持.ini配置保存和.hlp/.cnt帮助系统集成

silver的专栏 296

【免杀前置课——PE文件结构】十八、数据目录表及其内容详解——数据目录表(导出表、导入表、IAT表、TLS表)详解;如何在程序在被调试之前反击?TLS反调试(附代码)

【免杀前置课——PE文件结构】十八、数据目录表及其内容详解——数据目录表(导出表、导入表、IAT表、TLS表)详解;如何在程序在被调试之前反击?TLS反调试(附代码)

m0_62783065的博客 1653

PyCharm配置WSL开发环境保姆级教程:从安装Conda到项目依赖一键搞定

本文提供PyCharm配置WSL开发环境的完整教程,涵盖从安装Conda到项目依赖管理的全流程。详细介绍了WSL2环境准备、Conda环境配置、PyCharm远程解释器设置等关键步骤,并包含实用技巧和常见问题解决方案,帮助开发者高效搭建Python开发环境。

weixin_42620202的博客 309

PE文件资源表解析实战:从IMAGE_RESOURCE_DIRECTORY到数据定位

PE文件资源表解析常卡在偏移基准上,本文用十六进制编辑器手工跟一遍IMAGE_RESOURCE_DIRECTORY三层树形结构,从数据目录表第三项定位资源段,逐步解析IMAGE_RESOURCE_DIRECTORY_ENTRY的联合体最高位,最终找到IMAGE_RESOURCE_DATA_ENTRY并完成RVA到文件偏移转换。配合TaoToken辅助验证十六进制片段,官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 提供模型对话与API接入

weixin_36149538的博客 124

从门禁到支付:Uniapp+NFC开发避坑指南(支持Mifare Classic)

本文详细介绍了Uniapp结合NFC技术开发门禁与支付系统的实战指南,特别针对Mifare Classic卡片进行深度优化。内容涵盖环境配置、设备兼容性处理、卡片安全机制解析以及高性能读写优化策略,帮助开发者快速实现跨平台的智能硬件交互解决方案。

t1u2v的博客 751

银行会计第2课:交易和核算分离的思想

核算作为会计的基础,将交易转化为可量化的信息,而会计则通过整合核算结果,实现对经济活动的全面把控。- 本质:指企业或主体之间发生的、能引起经济利益变动的具体事项,比如采购商品、销售货物、支付工资等,是客观发生的经济事实。可售产品(业务视角的核算对象) + 属性条件(核算的分类,限制等) = 核算类型(会计视角,含有科目分类内容)- 核算:会计人员根据采购发票、入库单等,将这笔交易记为“借:原材料,贷:银行存款”(对事实的会计处理)。- 特点:是核算的源头,不涉及会计处理,仅代表经济行为的发生。

ademen的博客 499

JIURL PE 格式学习总结(四)-- PE文件中的资源:用TaoToken统一通道解析IMAGE_RESOURCE_DIRECTORY遍历

用 Python 解析 telnet.exe 的 .rsrc 节,从 IMAGE_RESOURCE_DIRECTORY 逐层遍历到 IMAGE_RESOURCE_DATA_ENTRY,完成 PE 资源树提取。文中给出可复制的解析脚本与 RVA 转换逻辑,并借助 TaoToken 统一通道交叉验证资源层级与偏移,快速定位遍历异常。详见 https://taotoken.net/?utm_source=taotoken_aicg_blog_end

weixin_42575505的博客 10

python全栈入门到实战【基础篇 03】入门实操:第一个Python程序 + PyCharm使用 + 输入输出全解析

本文是一篇Python入门教程,主要介绍PyCharm编辑器的安装配置和基础使用,以及Python输入输出语法的实操练习。文章分为四个部分:1)PyCharm的下载安装与基础配置;2)第一个Python程序"Hello World"的编写与运行;3)Python输入输出函数print()和input()的详细讲解;4)个人信息录入系统的实战案例。教程包含大量截图和动图演示,适合Python新手跟随操作,快速掌握编辑器使用和基础语法。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 4020

PE文件资源简介

PE文件中的资源部分占PE文件很大的一个比例,资源包括光标,位图,菜单等等还有十几种标准类型,处理标准类型还有自定义类型。资源的组织方式很像磁盘目录的组织的方式,或者说像数据结构中的树型结构。PE文件中资源的组织方式如下图: 从上图可以看到资源块是由很多种结构组成的,第一层目录也就是根目录的第一个结构是一个IMAGE_RESOURCE_DIRECTORY结构,它也就是IMAGE_OPTION...

weixin_43575859的博客 637

YOLOv11改进策略【模型轻量化】| 替换华为的极简主义骨干网络:VanillaNet

本文记录的是基于VanillaNet的YOLOv11轻量化改进方法研究。VanillaNet的极简主义在于无 shortcut 连接,并且在网络的每个阶段仅使用一层卷积,无额外复杂模块,仅通过自身简洁的架构设计和训练策略,实现有效地训练和优化。本文在替换骨干网络中配置了原论文中的、和11种模型,以满足不同的需求。

Limiiiing的博客 1725

如何成为一名高级数字 IC 设计工程师(6-7)数字 IC 验证篇:DEBUG 技巧

不懂验证的设计不是好的设计;UVM 验证思维是指导缜密的芯片设计的导师;推荐书籍《芯片验证漫游指南》。

新芯设计的博客 1605

PE文件格式学习(五):资源表

1.概述 程序内部和外部的界面等元素的二进制数据统称为资源,程序把它们放在一个特定的表中,符合数据和程序分离的设计原则。 Windows程序中的资源大致分为六类:菜单、对话框、位图、光标、图标、自定义资源 资源表是数据目录表中的第三个元素,排在导入表的后面。 2.资源表解析 资源表的解析比较复杂,可能是所有数据目录表中最复杂的一个。我将结合例子说明,这样会比较好理解。 我们的文件在十六进...

244

CloudCompare 二次开发(17)——点云添加均匀分布的随机噪声

使用CloudCompare编程实现点云添加随机噪声。

点云侠的博客 840

PE文件资源表解析指南:三级目录、偏移换算与实操技巧

PE文件是Windows可执行程序的核心载体,而资源表则是连接程序与用户界面的关键数据层。图标、对话框、版本信息、字符串表等所有按类型、名称、语言动态加载的内容,都以三级目录结构组织在资源表中。理解这一结构,需要从数据目录项定位资源表RVA,再换算到文件偏移。资源表的树形层级——类型层、名称/ID层、语言层——本质上是一种高效的降维索引机制,尤其适合多语言资源管理。掌握它不仅能手动解析资源、修改图标或版本号,还能在逆向分析中快速定位隐藏字符串和自定义数据。通过纯Python脚本手写解析器,可以从DOS头走到

weixin_42662293的博客 337

【AI大模型:架构实战】31、工业级AI大模型系统全景解析:从架构设计到提示语引擎实践

本文系统解析了工业级AI大模型的核心架构与技术体系。整体采用分层解耦设计,包含数据工程、模型训练、模型部署、应用集成和监控运维五大核心模块,以及分布式计算、高速网络、异构硬件三大支撑体系。数据工程构建高质量数据处理流水线;模型训练实现从预训练到业务适配的全流程;模型部署优化服务性能与可用性;应用集成连接业务场景;监控运维保障系统持续优化。三大支撑能力专注于千亿参数管理、高并发低延迟处理和持续学习进化。该架构设计既满足当前需求,又为技术演进预留空间,为企业在数字化转型中提供AI工业化落地的完整解决方案。

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 1990

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

PE文件资源表完全解析:从三级树形结构到递归解析实战

PE文件是Windows可执行程序的核心载体,而资源表是其中最容易让人困惑的模块之一。它本质上是一套类似图书馆目录的三级树形索引,通过资源类型、名称、语言三层定位,将图标、版本信息、菜单对话框等附属数据统一管理起来。理解其底层数据结构IMAGE_RESOURCE_DIRECTORY和目录项的偏移机制,是把控资源读取的关键。其中RVA与文件偏移的转换、相对资源表基址的偏移规则,决定了能否准确解析出真实数据。这项技术在逆向分析、汉化修改、素材提取、样本审计中都有广泛应用。掌握资源表的原理与递归解析方法,就能绕开

weixin_32932149的博客 310

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

PE文件资源表解析:结构、原理与实战应用

PE文件格式是Windows平台可执行文件的核心结构,其中资源表作为存储图标、字符串等非代码数据的关键组件,采用独特的树形目录结构。理解其三级目录组织原理(类型→名称→语言)和RVA偏移转换机制,对软件本地化、逆向工程等场景具有重要价值。通过Python的pefile库实现递归解析时,需特别注意DataIsDirectory标志位和内存安全边界检查。实战中,该技术可应用于多语言资源提取、界面修改等场景,但需注意数字签名验证和内存加载风险。

weixin_33552698的博客 219

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

NTscan扫描工具

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

PE文件解包原理与工程实践:从结构解析到资源还原

可移植执行文件(PE)是Windows系统核心二进制格式,理解其DOS头、NT头、节区表与数据目录结构,是进行静态分析、安全审计与兼容性修复的基础能力。PE解包并非暴力拆解,而是依据微软官方规范逐层解析导入表、资源目录、重定位信息等关键区域,实现图标提取、版本信息还原、pyc字节码定位等真实工程需求。该技术广泛应用于Python程序调试(如PyInstaller打包逆向)、第三方安装包审计(InstallShield/NSIS)、VC++运行库依赖分析及高DPI图标适配等场景,是开发者、安全工程师与系统维护

weixin_34306593的博客 467

小甲鱼PE详解之资源(PE详解11):用TaoToken统一Key解析IMAGE_RESOURCE_DIRECTORY三层结构

用TaoToken统一Key解析PE资源节IMAGE_RESOURCE_DIRECTORY三层结构,从改图标闪退切入,给出可复制的目录遍历脚本与字段偏移配置,并用真实样本验证资源树还原。官网:https://taotoken.net/?utm_source=taotoken_aicg_blog_end

weixin_42583683的博客 8

PE资源表深度解析:从结构原理到逆向工程与安全分析实战

PE文件格式是Windows逆向工程与安全分析的基础,而资源表作为PE中承载图标、字符串、对话框等非代码数据的核心结构,在软件本地化、界面定制和恶意代码检测中具有重要价值。其底层采用三层树形目录组织,通过IMAGE_RESOURCE_DIRECTORY与数据条目实现类型、名称和语言的多级索引,并遵循UTF-16LE编码与4字节对齐规则。深入理解资源表的二进制布局与解析方法,不仅能提升PE文件结构分析能力,还可用于资源提取、批量处理、熵值检测及可疑payload识别等工程实践场景。

weixin_42539414的博客 249

PE结构->【资源表】Resources Table

很多朋友都想通过自己动手修改一些游戏的资源、工具的界面、或者一些软件的图标等,都知道要改资源部分。但纯粹一进去就像走进了迷宫……出不来…… 虽然说是迷雾重重,但是本节的学习确意义非凡,例如我们可以对游戏进行汉化!怎么样?刺激吧?给力吧?我们可以自己汉化我们喜欢的**游戏哦! 资源结构 资源是PE文件中非常重要的部分,几乎所有的PE文件中都包含着资源,与导入表和导出表相比,资源的组织方式

u011513939的博客 1713
上一篇: PE文件解析-加载配置表、绑定导入表、导入地址表与延迟导入表
下一篇: 位图文件解析-位图(bmp)、图标(ico)与光标(cur)
zhyulo
博客等级 码龄10年 86粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值