PE檔案結構(二) 區塊,檔案偏移與RVA轉換

billvsme發表於2014-10-02

PE檔案結構(二)


參考

書:《加密與解密》

視訊:小甲魚 解密系列 視訊




區塊


     在區塊表 後面的就是一個一個區塊,每個區塊佔用對齊值的整數倍,一般的檔案都有程式碼塊 跟 資料塊( 它們的名字一般為.text 跟 .data 但這是可以修改的)。每個區塊的資料具有相同的屬性。編譯器先在obj中生成不同的區塊, 連結器再按照一定的規則合併不同obj跟庫中的快。例如每個obj中肯定有.text 塊, 聯結器就會把它們合併成一個單一的.text 塊;再如,如果兩個區塊具有相同的的屬性就有可能被合併成一個塊。


檔案偏移與RVA轉換


     因為磁碟對齊跟記憶體對齊可能不同。還有每個塊必須是對齊值的整數倍即在磁碟中可執行檔案的每個塊的大小是磁碟對齊值的整數倍,程式載入到記憶體中後塊的大小是記憶體對齊值的整數倍。會導致檔案偏移與RVA轉換的不同,需要轉換。







例子:轉換輸入表的RVA與檔案偏移


    通過檢視可執行檔案的二進位制可以找到輸入表的RVA,但是不能找到輸入表的檔案偏移。

    先檢視這個可執行檔案的二進位制,可以發現這個程式的磁碟對齊為200h記憶體對齊為1000h(IMAGE_OPTIONAL_HEADER中的SectionAlignmentFileAlignment

圖片1



    用LoadPE可以方便的得到:

圖片2





     再從可執行檔案的二進位制找到輸入表的RVA(IMAGE_OPTIONAL_HEADER中的DataDirectory[1]就是輸入表的資訊)

圖片3




     也可以通過LoadPE方便的檢視(點選目錄,檢視輸入表的RVA):

圖片4



     轉化檔案偏移與RVA,通過上面的資訊還不夠,還需要每個區塊在檔案中跟在記憶體中的起始地址,可以用LoadPE方便的檢視(點選 區段 即可):

圖片5




    輸入表的RVA為204Ch,可以通過區段表知道,它在 .rdata 區段中,它相對 .rdata 頭 的值為 4Ch。.rdata 斷在磁碟中開始 的 檔案偏移值為A00h,

用4Ch 加 A00h 即可得到輸入表的檔案偏移為A4Ch,通過LoadPE的“位置計算器” 可驗證輸入表的檔案偏移值確實是A4Ch。

圖片6










相關文章