oday安全:軟件漏洞分析技術第十一章亡羊補牢:SafeSEH_0

第十一章第1節涉及到很多PE結構的概念順便複習一下:

1、SEH表:編譯器在編譯程序的時候把異常處理函數的地址提取出來,編入一張安全SEH表中,把這張表放到.rdata節區;VS2003以後版本的編譯器默認開啓該選項;可以通過VS自帶的Vistual Studio命令提示dumpbin /loadconfig  xxxx來查看:

ida顯示如下:

其實是一個叫load config結構,遺憾的是PEView沒能很好的顯示這部分內容。除了有SEH表還有GS中的cookie和pdb文件路徑,這個SEH表位置緊挨着pdb路徑位置,在winhex看如下:

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結構體,該結構體有這個標誌:

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章