PE知识总结(小甲鱼教程)

2024-03-20 22:32
文章标签 总结 教程 知识 pe 甲鱼

本文主要是介绍PE知识总结(小甲鱼教程),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、PE的基本概念:

   1)PE文件中的数据结构一般都有32位 和 64位 之分,一般会在名称上表现出来。

   2)PE文件使用的是一个平面地址空间,线性的,所有的代码和数据合并在一起。

   3)文件的内容被划分成区块,以 页边界 对齐

   4)每个块有自己在内存中的一套属性——是否可读 或 只读。

   5)PE文件不是作为单一内存映射文件被装入内存

   6)Windows加载器(PE加载器)遍历PE文件,决定文件的哪一部分被映射,这种映射方式是将文件较高的偏移位置映射到较高的内存地址中。

   7)当磁盘文件一旦被装入内存中,磁盘上的数据结构布局和内存中的数据结构布局是一致的。

   8)基地址、相对虚拟地址、文件偏移地址

基地址   —— 在Windows NT上是模块的句柄

虚拟地址 —— 某一虚拟地址相对基地址的偏移

偏移地址 —— 从0开始

    Ps:   分析PE,就是了解结构体的构造,成员,它们是怎么存放,怎么索引,我们就能了解什么是PE感染、PE变位、如何伪装PE、如何在PE文件里加入隐秘的东西,如何加密、解密。

 

二、MS-DOS头部

每个PE文件是以一个DOS程序开始的,为了适应在DOS下执行。

PE文件的第一个字节起始于一个传统的MS-DOS头部,被称作IMAGE_DOS_HEADER(事实上它是一个结构体)

IMAGE_DOS_HEADER有两个重要的结构体。

e_magic      ;//MZ(4Dh 5Ah) DOS可执行文件标记

e_lfanew     ;//32位指针 指向PE文件头,这个成员相对于DOS的偏移永远是3ch

 

三、PE文件头

PE文件头是PE相关结构NT映像头(IMAGE_NT_HEADER)的简称,里面包含着许多PE装载器用到的重要字段。

程序在执行时,PE装载器将从IMAGE_DOS_HEADER结构中的e_lfanew字段里找到 PEHeader的起始偏移量,加上基地址就得到PE文件头的指针。

IMAGE_NT_HEADER结构

Signature   //在一个有效的PE文件里,Signature字段被设置位00004550h,ASCII码字符是“PE00”.标志着PE文件头的开始。

IMAGE_FILE_HEADER    FileHeader  //

     1.WORD    Machine               ;//运行平台    

     2.WORD    NumberOfSections      ;//文件的区块数目

     3.DWORD   TimeDateStamp         ;//文件创建日期和时间(以秒来算,VC的话可以用_ctime函数 或者 gmtime函数)

     4.DWORD   PointerToSymbolTable  ;//指向符号表(主要用于调试)

     5.DWORD   NumberOfSymbols       ;//符号表中符号个数(主要用于调试)

     6.WORD SizeOfOptionalHeader  ;//IMAGE_OPTIONAL_HEADER32结构大小。

     7.WORD    Characteristics       ;//文件属性

IMAGE_OPTIONAL_HEADER32    OptionalHeader

https://www.cnblogs.com/kuangke/p/5393514.html

在这个结构体中需要注意的成员,这些值是文件运行必需的,设置错误将导致文件无法正常运行。

           1.Magic  为IMAGE_OPTIONAL_HEADER32结构体是,Magic码为10B;为IMAGE_OPTIONAL_HEADER64结构体时,Magic码为20B。

            2.AddressOfEntryPoint     持有EP的RVA值。该值指出程序最先执行的代码起始地址。

            3.ImageBase     进程虚拟内存的范围是0~FFFFFFFF(32位系统)。PE文件被加载到如此大的内存中时,ImageBase指出文件的优先装入地址。

 

 

            4.SectionAlignment,FileAlignment     PE文件的Body部分划分若干节区,这些节存储着不同类别的数据。FileAlignment指定了节区在磁盘文件中的最小单位,而SectionAlignment则指定了节区在内存中的最小单位(一个文件中,FileAlignment和SectionAlignment的值可能相同,也可能不同)。磁盘文件或内存的节区大小必定位FileAlignment或SectionAlignment值的整数倍。

IMAGE_OPTIONAL_HEADER32成员1

            Ps:    DataDirectory是由IMAGE_DATA_DIRECTORY结构体组成的数组,最重要的字段之一,由16个相同的IMAGE_DATA_DIRECTORY结构体组成。其定义很简单,只有两个,仅仅指出了某种数据块的位置和,其用途是用来定义多种不同用途的数据块的位置和长度。例如导出表、导入表、资源、重定位表等数据块。

           IMAGE_DATA_DIRECTORY STRUCT

                           VirtualAddress    DWORD    ?    ;数据的起始RVA

                            isize    DWORD    ?    ;数据块的长度

           IMAGE_DATA_DIRECTORY end

图片:数据目录列表

 

 

四、块表

1.PE文件到内存的映射

①系统装载可执行文件的方法又不完全等同于内存映射文件。

②当使用内存映射文件的时候,系统对“原著”相当忠实。如果将磁盘文件和内存影响比较的话,可以发现不管是数据本身还是数据之间的相对位置都是完全相同的。

③Windows装载器在装载DOS部分、PE文件头部分和节表(区块表)部分是不进行任何特殊处理的,而在装载节(区块)的时候则会自动按节(区块)的属性做不同的处理。

一般情况下,它会处理以下几个方面的内容:

        内存页的属性

       节的偏移地址

       节的尺寸

       不进行映射的节

处理内容详解:

https://www.cnblogs.com/mayingkun/p/4200026.html

 

2.区块表(节表)和 区块(节)

https://www.cnblogs.com/kuangke/p/5406047.html

区块是可执行文件真正保存内容的东西

 

3.区块描述、对齐值以及RVA详解

https://www.cnblogs.com/kuangke/p/5410643.html

 

PE类型的病毒是在执行PE文件的时候,先执行病毒代码,再执行PE

 

4.输入表(导入表)详解

https://www.cnblogs.com/kuangke/p/5410650.html (上)

https://www.cnblogs.com/kuangke/p/5411547.html (下)

 

5.输出表(导出表)详解

https://www.cnblogs.com/kuangke/p/5419120.html

INT不可以改,IAT可以改

 

6.基址重定位

https://www.cnblogs.com/kuangke/p/5436807.html

 

7.资源

https://blog.csdn.net/dazhiliudazhi/article/details/24438623

 

当页对齐和文件对齐一样时,不需要转换找地址。

 

这篇关于PE知识总结(小甲鱼教程)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/830967

相关文章

一文详解Java异常处理你都了解哪些知识

《一文详解Java异常处理你都了解哪些知识》:本文主要介绍Java异常处理的相关资料,包括异常的分类、捕获和处理异常的语法、常见的异常类型以及自定义异常的实现,文中通过代码介绍的非常详细,需要的朋... 目录前言一、什么是异常二、异常的分类2.1 受检异常2.2 非受检异常三、异常处理的语法3.1 try-

如何为Yarn配置国内源的详细教程

《如何为Yarn配置国内源的详细教程》在使用Yarn进行项目开发时,由于网络原因,直接使用官方源可能会导致下载速度慢或连接失败,配置国内源可以显著提高包的下载速度和稳定性,本文将详细介绍如何为Yarn... 目录一、查询当前使用的镜像源二、设置国内源1. 设置为淘宝镜像源2. 设置为其他国内源三、还原为官方

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Maven的使用和配置国内源的保姆级教程

《Maven的使用和配置国内源的保姆级教程》Maven是⼀个项目管理工具,基于POM(ProjectObjectModel,项目对象模型)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告... 目录1. 什么是Maven?2.创建⼀个Maven项目3.Maven 核心功能4.使用Maven H

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

Python虚拟环境终极(含PyCharm的使用教程)

《Python虚拟环境终极(含PyCharm的使用教程)》:本文主要介绍Python虚拟环境终极(含PyCharm的使用教程),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录一、为什么需要虚拟环境?二、虚拟环境创建方式对比三、命令行创建虚拟环境(venv)3.1 基础命令3

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

python连接本地SQL server详细图文教程

《python连接本地SQLserver详细图文教程》在数据分析领域,经常需要从数据库中获取数据进行分析和处理,下面:本文主要介绍python连接本地SQLserver的相关资料,文中通过代码... 目录一.设置本地账号1.新建用户2.开启双重验证3,开启TCP/IP本地服务二js.python连接实例1.

Python 安装和配置flask, flask_cors的图文教程

《Python安装和配置flask,flask_cors的图文教程》:本文主要介绍Python安装和配置flask,flask_cors的图文教程,本文通过图文并茂的形式给大家介绍的非常详细,... 目录一.python安装:二,配置环境变量,三:检查Python安装和环境变量,四:安装flask和flas