流水账笔记:PE文件格式(资源表)
来源:互联网 发布:微信公众号js sdk 编辑:程序博客网 时间:2024/05/16 08:50
定位到到数据目录下的资源表地址:
资源表示例下载
Windows 对资源的管理采用树形结构,模仿磁盘的管理方式来管理。
资源表的结构体
_IMAGE_RESOURCE_DIRECTORY
第一个结构体如图,表示 目录层 或 资源文件 的项数,不管这一层是目录层 或 资源文件,都会有这个结构体:
其中前四个成员不重要,不作解释了。
NumberOfNamedEntries & NumberOfIdEntries
资源有两种描述方法,一种是按照名称来描述,一种是按照 ID 来描述。这 4 个字节分别表示 用字符串描述的资源 有几项或 用 ID 描述的资源 有几项。但是一般都是用 ID 描述资源,很少会用字符串来描述资源(几乎不会出现)。如图中表示有 7 项用 ID 描述的资源。
这 7 项不一定代表的就是 资源文件,或许也是新的 目录层
_IMAGE_RESOURCE_DIRECTORY_ENTRY
结构体如下:
结合文件中的数据理解,因为是用 ID 来描述,这个结构体的前两个字节,在 第一层 中表示资源的类型。
资源的类型编号可以参考定义的宏
后四个字节的高位 1,表示下一层是 目录层;如果是 0,表示下一层就是 资源文件 。在这里,低 31 位表示的是 目录层 或者 资源文件 的偏移。指向的偏移又是一个 _IMAGE_RESOURCE_DIRECTORY 的结构体。如果是一个目录层,与之相连的结构体就是 _IMAGE_RESOURCE_DIRECTORY_ENTRY,如此 递归,直至到资源文件这一层。
偏移指的是相对于数 据目录中 资源表地址 的偏移
图中显示高位为 1,所以下一层表示的是 目录层。定位到第二层,绿框 表示 目录(_IMAGE_RESOURCE_DIRECTORY),蓝框 表示 目录层(_IMAGE_RESOURCE_DIRECTORY_ENTRY):
在接下来的层数中,_IMAGE_RESOURCE_DIRECTORY_ENTRY 这个结构体的第一个成员,不再表示资源类型,而是表示资源的 ID 或者资源的名称。其中如果高位为 1,则是字符串表示的资源;如果高位为 0,则是 ID 表示的资源。(实战中一般都为 0,用 ID 表示)。
_IMAGE_RESOURCE_DATA_ENTRY
当 _IMAGE_RESOURCE_DIRECTORY_ENTRY 结构体的第二个成员高位为 0 时,那么 低位的偏移地址 存放的数据应该用这个结构体来解释。如图中 紫框 内显示高位为 0,那么在文件 0x7a38 的位置就是结构体 _IMAGE_RESOURCE_DATA_ENTRY 。
此时第一个成员 0x804 没有意义,并不代表这个 icon 的 ID 号。因为上一层已经已经
0x1c018 表示资源的偏移地址(RVA), 0x2E8 表示资源的大小。
FindResource & LoadResource
FindResource 通过查询资源表,来获得_IMAGE_RESOURCE_DATA_ENTRY 结构体的数据,返回的值就是这个结构体的地址;LoadResource 得到的句柄就是_IMAGE_RESOURCE_DIRECTORY_ENTRY 这个结构体的第一个成员的值。
- 流水账笔记:PE文件格式(资源表)
- 流水账笔记:PE文件格式(导出表)
- 流水账笔记:PE文件格式(导入表注入---手动)
- 流水账笔记:PE文件格式(重定位表)
- 流水账笔记:PE文件格式(Dos Header)
- 流水账笔记:PE文件格式(FileHeader)
- 流水账笔记:PE文件格式(OptionalHeader 上)
- 流水账笔记:PE文件格式(IAT)
- 流水账笔记:PE文件格式(OptionalHeader 下)
- 流水账笔记:PE文件格式(SectionHeaders)
- 流水账笔记:PE文件格式(RVA & FOA)
- 流水账笔记:PE文件格式(关于dump)
- 流水账笔记:PE文件格式(TLS)
- 流水账笔记:PE文件格式(手工增加节)
- 流水账笔记:PE文件格式(TLS手动注入)
- PE文件格式笔记
- PE文件格式学习笔记
- PE文件格式笔记
- 第8周项目4-稀疏矩阵的三元组表示的实现及应用(1)
- shell 具体的操作
- Strust2使用领域 对象接收用户输λ
- Java多线程编程-(10)-单例模式几种写法的错与对
- 第八周项目链串
- 流水账笔记:PE文件格式(资源表)
- Java基础知识
- Linux下管理员设置用户登录时的警告信息以及不同用户之前相互简单交流的方法
- DL实现semantic segmentation
- TensorFlow与Python代码学习(1):Tutorial与Tensor的基本操作
- python: 统计 含有指定字符串 的 元素
- NVIDIA Jetson TX1 项目开发二刷机(使用JetPack3.1重装系统)
- SQL语法大全
- 第4章 面向对象高级知识