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通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.

SpringBoot连接Redis集群教程

《SpringBoot连接Redis集群教程》:本文主要介绍SpringBoot连接Redis集群教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 依赖2. 修改配置文件3. 创建RedisClusterConfig4. 测试总结1. 依赖 <de

Nexus安装和启动的实现教程

《Nexus安装和启动的实现教程》:本文主要介绍Nexus安装和启动的实现教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Nexus下载二、Nexus安装和启动三、关闭Nexus总结一、Nexus下载官方下载链接:DownloadWindows系统根

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

CnPlugin是PL/SQL Developer工具插件使用教程

《CnPlugin是PL/SQLDeveloper工具插件使用教程》:本文主要介绍CnPlugin是PL/SQLDeveloper工具插件使用教程,具有很好的参考价值,希望对大家有所帮助,如有错... 目录PL/SQL Developer工具插件使用安装拷贝文件配置总结PL/SQL Developer工具插

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa