oday安全:软件漏洞分析技术第十一章亡羊补牢:SafeSEH_0

第十一章第1节涉及到很多PE结构的概念顺便复习一下:

1、SEH表:编译器在编译程序的时候把异常处理函数的地址提取出来,编入一张安全SEH表中,把这张表放到.rdata节区;VS2003以后版本的编译器默认开启该选项;可以通过VS自带的Vistual Studio命令提示dumpbin /loadconfig  xxxx来查看:

oday安全:软件漏洞分析技术第十一章亡羊补牢:SafeSEH_0_第1张图片

ida显示如下:

oday安全:软件漏洞分析技术第十一章亡羊补牢:SafeSEH_0_第2张图片

其实是一个叫load config结构,遗憾的是PEView没能很好的显示这部分内容。除了有SEH表还有GS中的cookie和pdb文件路径,这个SEH表位置紧挨着pdb路径位置,在winhex看如下:

oday安全:软件漏洞分析技术第十一章亡羊补牢:SafeSEH_0_第3张图片

2、IMAGE_OPTIONAL_HEADER32结构中的DllCharacteristics项和异常有关

typedef struct _IMAGE_OPTIONAL_HEADER 
{
    WORD    Magic;
    BYTE    MajorLinkerVersion;
    BYTE    MinorLinkerVersion;
    DWORD   SizeOfCode;
    DWORD   SizeOfInitializedData;
    DWORD   SizeOfUninitializedData;
    DWORD   AddressOfEntryPoint;
    DWORD   BaseOfCode;
    DWORD   BaseOfData;
    DWORD   ImageBase;
    DWORD   SectionAlignment;
    DWORD   FileAlignment;
    WORD    MajorOperatingSystemVersion;
    WORD    MinorOperatingSystemVersion;
    WORD    MajorImageVersion;
    WORD    MinorImageVersion;
    WORD    MajorSubsystemVersion;
    WORD    MinorSubsystemVersion;
    DWORD   Win32VersionValue;
    DWORD   SizeOfImage;
    DWORD   SizeOfHeaders;
    DWORD   CheckSum;
    WORD    Subsystem;
    WORD    DllCharacteristics;
    DWORD   SizeOfStackReserve;
    DWORD   SizeOfStackCommit;
    DWORD   SizeOfHeapReserve;
    DWORD   SizeOfHeapCommit;
    DWORD   LoaderFlags;
    DWORD   NumberOfRvaAndSizes;
    IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;

其中#define IMAGE_DLLCHARACTERISTICS_NO_SEH       0x0400     // Image does not use SEH.  No SE handler may reside in this image(镜像不使用SEH)

3、IMAGE_DATA_DIRECTORY数组的第4项DataDirectory[3]规定是EXCEPTION Table,以上面测试的PE文件为例,EXCEPTION Table表为空(虽然里面含有SEH函数),EXCEPTION Table指向内容是什么?以后探讨

4、ILonly标识,有着个标志(其实就是C#程序)是不涉及异常处理

C、C++生成的PE程序,.text节区存储的都是汇编代码;

C#生成的PE程序,.text节区存储的不仅有汇编代码,还有C#相关的结构体,而且这里的汇编代码也不再是CPU可以直接识别的,而是IL(中间汇编代码);

为了兼容C#的程序,微软使用了IMAGE_DATA_DIRECTORY数组的第15项DataDirectory[14],指向Common Language Runtime Header结构体,该结构体有这个标志:

oday安全:软件漏洞分析技术第十一章亡羊补牢:SafeSEH_0_第4张图片

 

 

你可能感兴趣的:(oday安全:软件漏洞分析技术)