0x01 PE文件結構學習總結

Windows下有PE(Portable Executable):可執行文件

COFF(Common Object File Format):通用模板文件格式文件

其中,PE文件結構十分重要。典型結構如下:

Figure 1 illustrates the Microsoft PEexecutable format.


具體在看雪論壇有中文翻譯版Microsoft PECOFF規範v8和v8.1中文版

一:MS—DOS佔位程序

    只要關注0x3C處,這裏存放PE文件簽名的偏移地址(相對於該文件的初始地址)

二:PE文件頭

   這裏存放着該文件的重要信息

   1.簽名

      存放四個字節的數據 PE\0\0 (一般從0x3c處就可以索引到)在F0處


  2.PE文件頭

  3,PE可選頭

    主要注意的是可選文件頭中的DataDirectory,其中包含了各個表的信息。幾個比較重要的如下

這裏可以找到idata的RVA(就是虛擬偏移地址),是從PE文件頭結束位置開始算起偏移了104  即(F4H) 244 + 20 +204 =  170(H)

可見,導入表地址爲0001A1D8

三:節表

   這裏存放節的十分詳細的信息,需要十分關注

這裏就是一個節表idata

查文檔就可以知道 VirtualSize = 0001A00 H 明顯導入表落在idata內 PointerToRawData: 7400

這樣就可以算導入表的文件中地址了 0001A1D8 - 0001A000 + 7400 = 75D8H

idata節如下


四:各個節

   idata節:這裏存放導入到文件裏的函數的信息 每5x4個作爲一個導入目錄表,最後以5x4個空字節結束

    在上面的一個圖中 可以知道Import Address Table RVA (Thunk Table) = 0001A098 經計算可以知道 實際的地址在 7498H處。

它的高位是0 所以直接表示RVA

最後得到 一個函數的地址 1A414-1A000+7400=7814H

(一個MessageBox)

導出表和資源目錄表其實都類似,結構不同罷了。接下來準備用C++寫一個PE分析,知道有python的pefile庫十分方便,但是感覺自己對PE還是理解不夠,所以自己寫一個來深入瞭解PE。

具體參考 PE文件結構詳解(一)基本概念

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