PE頭結構學習 PE頭移位

2021-08-08 17:15:36 字數 3057 閱讀 5865

剛開始學pe結構的時候,是為了搞***xx的,那時瑞星和江民還有希望,那時卡飯論壇還常駐各個防毒軟體廠商的工程師,想想還有些懷念,初中基本啥也不懂,就上論壇看別人是怎麼搞的,有一次看到乙個免殺技術叫pe頭移位,後來這個技術也用了蠻久。剛好現在上了作業系統這門課,作業就是要研究下pe結構,所以就以pe頭移位為目標,看看其中的原理到底是啥。

pe頭是乙個 image_nt_headers的結構。其中包含了很多pe檔案被載入記憶體的時候需要用到的重要域。執行體在支援pe檔案結構的作業系統中執行守,pe裝載器將從dos mz header 中找到pe header 的起始偏移量。因而跳過dos stub 直接定位真正的檔案頭 pe header。免殺俗稱為pe頭。

pe頭的讀取位置:

mz stub裡有許多其他的域對於ms-dos作業系統來說都有用,但是對於windows nt來說,這個結構中只有乙個有用的域——最後乙個域e_lfnew,乙個4位元組的檔案偏移量,pe檔案頭部就是由它定位的。

mz頭的e_lfannew引數,位於偏移0x3c_4h處,讀取大小為4個位元組,高位讀取原則。

1、pe標誌 signature(04h)

5045

0000

pe header是緊跟在ms-dos頭部和實模式程式殘餘之後的。

2、pe頭結構 image_nt_headers(14h)

緊接pe檔案頭標誌之後是pe檔案頭結構,由20個位元組組成。

3、可選pe頭 image_optional_header(e0h)

檔案頭下面就是可選擇頭,這是乙個叫做image_optional_header的結構,一般由224個位元組組成。雖然它的名字是「可選頭部」,但是請確信:這個頭部並非「可選」,而是「必需」的。可選頭部包含了很多關於可執行映像的重要資訊。例如,初始的堆疊大小、程式入口點的位置、首選基位址、作業系統版本、段對齊的資訊等。

a、標準域(1ch)

b、nt附加域(44h)

c、目錄表(80h)

通過以上結構,如果有特徵碼定位在pe頭,我們就可以相應的對其進行判斷是否為真實特徵碼,並做相應的更改以達到免殺。

幾處與免殺有關的結構體:

*sizeofoptionalheader:pe可選頭大小。pe載入器用來檢驗pe檔案正確性。

timedatestamp:檔案建立的時間。可用這個值來區分同乙個檔案的不同的版本,即使它們的商業版本號相同。這個值的格式並沒有明確的規定,但是很顯然地大多數的c編譯器都把它定為從1970.1

.100:00:00以來的秒數(time_t)。這個值有時也被用做繫結輸入目錄表。可用loadpe工具進行編譯。

numberofrvaandsizes:目錄表入口個數,這個值不可靠,可用常數image_numberof_directory_entries來代替它,這個值在目前windows版本中設為16。

*image_data_directory:目錄表,每個目錄一般有兩個值——

該目錄表的目的是允許pe載入器可迅速地找到乙個映像的特定區段(例如輸入函式表),而不必遍歷映像的每乙個區段並逐一比較它們的名字。

以下是幾處可能被定位為真實特徵碼的結構體:

1、區段個數

2、檔案建立時間日期

3、輸出表rva值及大小

4、目錄表個數

5、輸入表大小

6、iat表大小

以下是幾處可能被定位為誤判特徵碼的結構體

1、輸入表rva值

2、iat表rva值

pe頭結構解析:

mz頭之後在3c處是08010000,這是小端序標法,表明了pe頭的開始位置在

00000108處

50450000是pe頭開始的4個標誌位元組,後面的4c01是機器碼(不關鍵),然後是0600表明共有6個區段,然後是3a7b2a58->582a7b3a是建立時間的標誌,可以修改,編碼使用loardpe即可檢視,pe標誌下一行後面的那個e0是可選頭的大小(十進位制224)

0b01->10b即32位結構體如果是20b就是64結構體,反正這是可選頭(224位元組)的開始,下拉224就是可選頭啦

查詢輸入表的偏移知輸入表偏移量為80,16進製制加法80+108(pe頭)=188,定位到188處看到00205200,確實是輸入表的位置

表和節區的意義是不一樣的,之前一直搞混了,這裡這個程式一共有6個節區,10個表,節區資訊在可選頭的後面,緊跟著。所以馬上要進行pe頭移位的時候要連帶著節區資訊一起移位

pe頭移位:

選中pe頭開始到節區資訊結束,這個程式是488個位元組,全選複製

往下面移動一點,將上面額外的資訊填充為00

修改mz頭那裡的pe位址資訊

儲存,成功執行,並沒有破壞pe結構!!!!nice~~~

PE檔案結構(一) MS DOS頭 ,PE頭

ms dos頭 標準pe頭 擴充套件pe頭 資料目錄 節表各個欄位的含義 第乙個字段 mz標誌位 e magic 是乙個常量,一般都是0x4d5a 最後乙個字段 pe頭偏移 e ifanew 指向新的pe頭,偏移量為0x0138 位於0x0138 typedef struct image nt he...

PE檔案結構 NT頭學習

pe檔案基本結構如下 學習一下nt頭 nt頭,包含乙個4位元組的signature,以及兩個結構體image file header 檔案頭 和image optional header 擴充套件頭 nt頭 signature,檔案頭,擴充套件頭 其定義如下 這個是微軟定義的 typedef str...

PE手工分析 PE頭

要分析pe檔案我們首先要對 pe結構有乙個大致的了解 大體上 pe結構可以看成是乙個平面空間裡面包含有如下內容 相應的msdos 頭結構定義如下 windows 載入器在載入的過程中會判斷 dos頭是否合法 typedefstruct image dos header image dos heade...