0x00 概述
pe檔案格式把可執行檔案分成若干個資料節(section),不同的資源被存放在不同的節中。
乙個典型的pe檔案中包含的節如下:
.text 由編譯器產生,存放二進位制的機器**,也是我們反彙編和除錯的物件
.data 初始化的資料塊,如巨集定義、全域性變數、靜態變數等
.idata 可執行檔案所使用的動態鏈結庫等外來函式與檔案的資訊
.rsrc 存放程式的資源,如圖示、選單等
此外,我們還有可能看到如.reloc、.edata等等
0x01 虛擬記憶體
windows的記憶體可以分為兩個層面:物理記憶體和虛擬記憶體。其中,物理記憶體比較複雜,需要進入windows核心級別ring0才能看到。通常在使用者模式下,我們用偵錯程式看到的記憶體位址是虛擬記憶體。
0x02 pe檔案與虛擬記憶體之間的對映
首先我們了解幾個重要的概念:
va = image base + rva
如下圖所示,在預設情況下,一般pe檔案的0位元組將對映到虛擬記憶體的0x00400000的位置,這個位址就是所謂的裝載基址。
但是pe檔案在裝載時會由於參考的資料標準不同,導致資料結構存在一定差異。
1.pe檔案中的資料按照磁碟資料標準存放,以0x200位元組為基本單位進行組織。當乙個資料節(section)不足0x200位元組時,不足的地方將被0x00填充;當乙個資料節超過0x200位元組時,下乙個0x200塊將分配給這個節使用。因此pe資料節的大小永遠是0x200的整數倍。
2.當**裝入記憶體後,將按照記憶體資料標準存放,並以0x1000位元組位基本單位進行組織。類似的,不足將被補全,若超出將分配下乙個0x1000為其所用。因此,記憶體中的節總是0x1000的整數倍。
我們把這種由儲存單元引起的節基址差稱為節偏移。
節偏移=相對虛擬偏移-檔案偏移
0x03 lordpe工具
pe頭資訊
當我們在除錯中遇到虛擬記憶體中0x00404141處的一條指令,那麼要換算出這條指令在檔案中的偏移量,則有
檔案偏移量 = 0x00404141 - 0x00400000 - (0x1000 - 0x400)= 0x3541
0x04 crack示例
下面是一段用於密碼驗證的c**
#include #include #define password "123456"只有當輸入正確密碼時,才能獲取其中的flag。#define flag "flag"
int verify_password (char *password)
void main()
else
}}
除了反編譯直接找flag,我們還可以通過動態除錯找到關鍵判斷邏輯,修改判斷邏輯獲取flag。
PE檔案格式
pe 的意思是 portable executable 可移植的執行體 它是 win32環境自身所帶的執行檔案格式。它的一些特性繼承自unix的coff common object file format 檔案格式。portable executable 可移植的執行體 意味著此檔案格式是跨win3...
PE檔案格式
pe檔案格式分析及修改 圖 1 2009 01 09 14 08 pe 的意思是 portable executable 可移植的執行體 它是 win32環境自身所帶的執行檔案格式。它的一些特性繼承自unix的coff common object file format 檔案格式。portable ...
PE檔案格式
pe檔案格式應用於所有32位windows系統 windows 9x,windows nt,windows 2000及windows xp vista已經對pe格式進行了公升級,也出現了pe64 而在msdn 98中有pe的大量詳細資料 按目錄 msdn library visual studio ...