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

相关文章

MySQL 安装配置超完整教程

《MySQL安装配置超完整教程》MySQL是一款广泛使用的开源关系型数据库管理系统(RDBMS),由瑞典MySQLAB公司开发,目前属于Oracle公司旗下产品,:本文主要介绍MySQL安装配置... 目录一、mysql 简介二、下载 MySQL三、安装 MySQL四、配置环境变量五、配置 MySQL5.1

MQTT SpringBoot整合实战教程

《MQTTSpringBoot整合实战教程》:本文主要介绍MQTTSpringBoot整合实战教程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录MQTT-SpringBoot创建简单 SpringBoot 项目导入必须依赖增加MQTT相关配置编写

在Java中基于Geotools对PostGIS数据库的空间查询实践教程

《在Java中基于Geotools对PostGIS数据库的空间查询实践教程》本文将深入探讨这一实践,从连接配置到复杂空间查询操作,包括点查询、区域范围查询以及空间关系判断等,全方位展示如何在Java环... 目录前言一、相关技术背景介绍1、评价对象AOI2、数据处理流程二、对AOI空间范围查询实践1、空间查

MySQL基本查询示例总结

《MySQL基本查询示例总结》:本文主要介绍MySQL基本查询示例总结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Create插入替换Retrieve(读取)select(确定列)where条件(确定行)null查询order by语句li

Logback在SpringBoot中的详细配置教程

《Logback在SpringBoot中的详细配置教程》SpringBoot默认会加载classpath下的logback-spring.xml(推荐)或logback.xml作为Logback的配置... 目录1. Logback 配置文件2. 基础配置示例3. 关键配置项说明Appender(日志输出器

Kali Linux安装实现教程(亲测有效)

《KaliLinux安装实现教程(亲测有效)》:本文主要介绍KaliLinux安装实现教程(亲测有效),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、下载二、安装总结一、下载1、点http://www.chinasem.cn击链接 Get Kali | Kal

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.

spring security 超详细使用教程及如何接入springboot、前后端分离

《springsecurity超详细使用教程及如何接入springboot、前后端分离》SpringSecurity是一个强大且可扩展的框架,用于保护Java应用程序,尤其是基于Spring的应用... 目录1、准备工作1.1 引入依赖1.2 用户认证的配置1.3 基本的配置1.4 常用配置2、加密1. 密

WinForms中主要控件的详细使用教程

《WinForms中主要控件的详细使用教程》WinForms(WindowsForms)是Microsoft提供的用于构建Windows桌面应用程序的框架,它提供了丰富的控件集合,可以满足各种UI设计... 目录一、基础控件1. Button (按钮)2. Label (标签)3. TextBox (文本框

C#实现访问远程硬盘的图文教程

《C#实现访问远程硬盘的图文教程》在现实场景中,我们经常用到远程桌面功能,而在某些场景下,我们需要使用类似的远程硬盘功能,这样能非常方便地操作对方电脑磁盘的目录、以及传送文件,这次我们将给出一个完整的... 目录引言一. 远程硬盘功能展示二. 远程硬盘代码实现1. 底层业务通信实现2. UI 实现三. De