zoukankan      html  css  js  c++  java
  • 逆向工程核心原理——第十三章

    第13章 PE文件格式

    书本上最开头,说到本章不仅会有PE文件格式的知识,还有进程、内存、DLL的相关内容。

    什么事pe文件:

    pe文件是指windows操作系统下使用的可执行文件格式。

    pe文件包括:

    种类 主扩展名
    可执行文件 EXE、SCR
    库系列 DLL、OCX、CPL、DRV
    驱动程序 SYS、VXD
    对象文件系列 OBJ
    注解:

    PE文件的基本结构:

    现在我们对上面的名词进行解释和补充:

    1.VA&RVA

    VA=进程虚拟内存的绝对地址。

    RVA(Relative Virtual Address)=相对虚拟地址,是指从某个基准位置(ImageBase)开始的相对位置。

    VA=RVA+ImageBase

    2 DOS头


    这是一个结构体,其中最重要的是两个:

    e_magic:DOS签名(4D 5A=>ascii“MZ”)

    e_lfanew:指示NT头的偏移

    所有PE文件在开始部分都会有DOS签名(“MZ”)

    3 NT头

    NT头第一个成员也是签名:50450000H(“PE”00)

    NT文件头中有四个重要的:

    1.Machine:

    每个CPU都有唯一的Machine码。

    2.NumberOfSections:

    用于指出文件中存在的节区数量。

    3.SizeOfIptionalHeader:

    用来指出IMAGE_OPTIONAL_HEADER32结构体的长度。

    4.Characteristics:

    用于标识文件的属性,文件是否是可运行的状态、是否是DLL文件等信息。

    NT可选头以下的较为重要:

    1.Magic:

    当位32结构体时,Magic为18B,当位64结构体时,Magic为20B.

    2.AddressOfRntryPoint:

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

    3.ImageBase:

    它指出文件优先装入地址。

    4.SectionAlignment,FileAlignment:

    PE 文件的Body部分划分为若干节区,用于存放不同类别的数据。

    5.SizeOfImage:

    PE文件加载到内存时,它制定了PE Image再虚拟内存中所占空间大小

    6.SizeOfHeader:

    用来指出整个PE头的大小。

    7.Subsystem:

    用来区分系统驱动文件和普通可执行文件。

    8.NumberOfTvaAndSizes:

    用来指定datadirectory

    9.DataDirectory:

    由IMAGE_DATA_DIRECTORY结构体组成的数组。

    4.节区头

    节选头中定义了各个节区的属性,比如我们前面提到的.code、.data、.res。

    5.RVA to RAW

    RAW = TVA - VirtualAddress + PointerToRawData

    6.IAT

    IAT就是导入表

    7.DLL

    动态链接库

  • 相关阅读:
    ajax请求传参数复杂对象list,后端springmvc接收参数
    SpringBoot热部署简介
    lucene 初探
    学生管理系统导包
    tomcat加入系统服务+开机自启
    sql like模糊查询的条件拼接
    SSHDemo
    Spring在web开发中的应用
    Spring的Bean内部方法调用无法使用AOP切面(CacheAble注解失效)
    dwz tree组件 取得所选择的值
  • 原文地址:https://www.cnblogs.com/lex-shoukaku/p/13306341.html
Copyright © 2011-2022 走看看