zoukankan      html  css  js  c++  java
  • PE文件结构详解(三)

    0x01 前言

      上一篇讲到了数据目录表的结构和怎找到到数据目录表(DataDirectory[16]),这篇我们我来讲讲数据目录表后面的另一个结构——区块表。

    0x01 区块

      区块就是PE载入器将PE文件载入后,将PE文件分割成若干块,每块包含不同的信息,由读写数据块.data,代码块.code,只读数据块.rdata等等,一般至少得有读写数据块和代码块。区块的的划分信息保存在一张名为区块表(IMAGE_SECTION_HEADER)的结构中。区块表紧邻着PE文件头IMAGE_NT_HEAER。它的结构如下:

    typedef struct _IMAGE_SECTION_HEADER 

    {

            BYTE Name[IMAGE_SIZEOF_SHORT_NAME];     // 节表名称,“.text” 

            //IMAGE_SIZEOF_SHORT_NAME=8

            union
             {

                    DWORD PhysicalAddress;        // 物理地址

                    DWORD VirtualSize;                // 真实长度,这两个值是一个联合结构,可以使用其中的任何一个,一

                                                                  // 般是取后一个

            } Misc;

            DWORD VirtualAddress;              // 节区的 RVA 地址

            DWORD SizeOfRawData;            // 在文件中对齐后的尺寸

            DWORD PointerToRawData;        // 在文件中的偏移量

            DWORD PointerToRelocations;     // OBJ文件中使用,重定位的偏移

            DWORD PointerToLinenumbers;   // 行号表的偏移(供调试使用地)

            WORD NumberOfRelocations;      // OBJ文件中使用,重定位项数目

            WORD NumberOfLinenumbers;    // 行号表中行号的数目

            DWORD Characteristics;              // 节属性如可读,可写,可执行等} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER; 

    大小位40字节。由于它紧邻PE文件头,而PE文件头的中的Data[16]中的最后一个保留双字开头为100h+F0h=1F0h故区块表的开始位为1F0h+8h=1f8h,共占四十个字节,如下图:

     

    由上图我们可读出很多重要信息,前八个字节可以知道这是个.code块,后面四个字节为00001000h这个是VirtualSize字段即Vsize,再后面四个字节是00001000h这个是VirtualAddressRAV字段,这个字段很有用,后面将会讲到。再后面是00000200h,标识的是SizeOfRawData字段,这个字段也很有用。再后面的几个字段就不再介绍了,其实用的也不多,用到了可以再进行分析。上图可知Code区段后面就是DATA区段了,分析方法和CODE字段一样,这里就不再做介绍了。

      对于上述的分析其实我们也可以通过工具来完成,我们今天来使用另一个强大的工具PEID,这个工具对于脱壳来说很有用。我们打开PEID.exe。直接把文件拖到PEID窗口即可,点击EP段:边上的按钮即可查看刚刚分析的内容。如下图:

    显然我们的分析是正确的。注意这里写的V偏移即为RAVV大小即为VsizeR大小即为SizeOfRawData,至于R偏移后面会介绍。

  • 相关阅读:
    hdu 5116 计数
    hdu 5117 数学公式展开 + dp
    hdu 5115 Dire Wolf 区间dp
    I00025 寻找循环数
    外部设备发展趋势
    外部设备发展趋势
    互联网
    互联网
    I00024 出钱买羽
    I00024 出钱买羽
  • 原文地址:https://www.cnblogs.com/2f28/p/9817371.html
Copyright © 2011-2022 走看看