程式身家基本訊息:PE file structure PE 是 Portable Executable 的縮寫,也就是 Windows 系統中的可執行(Executable)程式或動態連結函式庫(Dynamic link library)的文件格式,主要使用在 32 位和 64 位的 Windows 操作系统上。 為了能夠瞭解 PE 格式,我們需要以下的對照: 1. PE 格式示意圖 2. Hiew 程式,以小算盤為範例 3. PE 格式圖 以下為簡單對照 DOS MZ Header 開頭必定為"MZ"4D 5A,這是 DOS EXE 的 Signature。而這東西讓 PE file 在 DOS 模式下也可執行,所佔大小為 40h bytes。 DOS Stub 但也不是什麼都能在 DOS 底下執行,若是程式在 DOS 下無法執行便會跳出這邊的錯誤訊息:" This Program cannot be run in DOS mode "。 PE Header 為了找到 PE 的開頭位置,我們可從 DOS Header 0x3C 的位置找到一個 Double word(又稱 dword,大小為 4 個 bytes),這個 dword 大小表示了整個 DOS MZ Header 的 size, 也就是 D8 00 00 00 ,注意!這裡實際位置是 0x000000D8 ,想必 IQ180 的各位已經注意到必須以 Byte 為單位顛倒過來看才行,這種反向讀取方式稱之為 Little-endian order ,在 PE 文件中皆採用此種讀取方式。 到了 PE 位置所看到的必定是 50 45,PE Header 裡包含了許許多多的訊息,其中最重要之一就是距離 PE 位置(0xD8)後 0x28 的 dword,這裡是這隻程式執行時的入口點(Entry point)。聽起來好像沒什麼重要的,不過若是入口點被設置在檔案的 Overlay 區域呢?這就很有趣了~正常來說是不會設置在這邊的。 什麼是 Overlay? 這個以後會再說 再往後數 12 Bytes 則是 Image base,下圖最後 4 Bytes,也就是 0x01000000 之前找到的入口點是相對虛擬位置(Relative virt
留言
張貼留言