在沒有接觸殼之前,也不著急著做什麼練習,pe檔案格式還是要學一學的。
公式:rva+imagebase=va
ps:
32位windows中,程序分配有4gb虛擬記憶體,因此程序中的va範圍是00000000~ffffffff
image_dos_header
在微軟建立pe檔案格式的時候,正在廣泛使用dos檔案,所以考慮到對dos檔案的相容性,於是在pe頭的最前面新增了乙個image_dos_header結構體,用來擴充套件已有的dos exe頭。
image_dos_header結構體大小為40個位元組。
python中有乙個專門用來解析pe的庫。
其中最為重要的有兩個
乙個是magic還有乙個是ifanew
magic:dos簽名,預設值mz
ifanew:指示nt頭的偏移,簡單的說就是指向nt頭所在的位置。
dos存根在dos頭下放,是乙個可選項,且大小不固定。
直白的說就是為了相容dos環境下執行。
image_nt_headers裡有三個成員變數
signature簽名 值為pe
2.3.1 nt頭 檔案頭
image_file_headers結果題有四個重要成員。
唯一machine碼,相容32位intel x86晶元的machine碼為14c。
numberofsections用來支出檔案中存在的節區數量,該數值一定要大於0。如果和實際節數不同則執行出錯
sizeofoptionalheader
用來指出image_optional_header3結構體的長度。
characteristics
該欄位用於表示檔案的屬性,檔案是否是可執行狀態,是否為dll,檔案等資訊。
0002h,不可執行。
2.3.2 nt頭:可選頭
image_optional_header
重要字典
magic:
32位為magic碼為10b
64位為20b
addressofentrypoint:
addressofentrypoint持有pe的rva值。指出程式最先執行的**起始位址。
程式的相對起始位置。
使用od進行檢視
程序虛擬記憶體的範圍是0~ffffffff。
exe,dll檔案被裝載到使用者記憶體的07fffffff中,sys檔案被載入內和記憶體的80000000ffffffff。
vb/vc++?delphi 建立好exe檔案後,imagebase的值為00400000。dll為1000000
pe裝載器先建立程序,再將檔案載入記憶體,然後把eip暫存器的值設定為imagebase+addressofentrypoint
sectionalignment,filealignment:
pe檔案的body部分劃分為若干節區,這些節儲存著不同類別的資料。filealignment指定了擷取在磁碟檔案中的最小單位,sectionalignment制定了擷取中的最小單位。
自盤檔案或記憶體的擷取大小必定為filealigment或sectionalignment值的整數倍
sizeofimage:
載入pe檔案到記憶體時,sizeofimage指定了pe image在虛擬記憶體中所佔空間的大小。一般而言,檔案的大小與載入到記憶體中的大小是不同的。
sizeofheader:
sizeofheader用來指出整個pe頭的大小。值是filealignment的整數倍,第一節區所在位置與sizeofheader距檔案開始偏移的量相同。
subsystem:
區分系統驅動檔案語普通的可執行檔案。
datadorectory:
由image_data_directory結構體組成的陣列。
節區頭定義了各節區屬性。
code:**
data:資料
resource:資源
1.查詢rva的節區
2。使用公式計算檔案偏移
raw-pointertorawdata=rva-virtualaddress
iat是一種**,用來記錄程式正在使用哪些庫的哪些函式
動態鏈結庫
5.7.1 載入dll的方式
逆向工程核心原理 第十三章
pe檔案是指windows作業系統下使用的可執行檔案格式。pe檔案包括 種類主副檔名 可執行檔案 exe scr 庫系列dll ocx cpl drv 驅動程式 sys vxd 物件檔案系列 obj註解 va 程序虛擬記憶體的絕對位址。rva relative virtual address 相對虛...
逆向工程核心原理 第十八章
我們使用add.exe檔案 我們將add.exe檔案拖入upack加殼工具,這裡的版本是0.39final,lc選擇6 點選確定後得到add.exe.bak的檔案,我們去掉.bak後就可以直接使用了,這裡為了區分,我將加殼後的檔案取名為add upack 6.exe。首先我們先使用hex瀏覽器檢視加...
逆向工程核心原理 第十六章
第十六章,pe檔案重定位。向程序的虛擬記憶體載入pe檔案時,檔案會被載入到pe頭的imagebase所指向的位址處,若ib位置已經載入了其他檔案,pe裝載器就會將其載入到去其他未被占用的空間,這就涉及到pe位址重定位的問題。建立好程序之後,exe檔案會首先載入到記憶體,因此在exe檔案無需考慮位址重...