程式入口點EP和OEP的區別

kksllss發表於2024-10-16

在程式分析中,EP(Entry Point)和OEP(Original Entry Point)是兩個重要的概念,它們分別代表了程式的入口點和原始入口點。以下是對這兩個概念的詳細解釋:

一、EP(Entry Point)
EP,即Entry Point,意為程式的入口點。這是PE(Portable Executable,可移植執行體)檔案中的一個關鍵欄位,它指向程式開始執行的位置。當一個程式被載入到記憶體中並執行時,系統會首先跳轉到這個位置開始執行程式碼。在PE檔案中,EP通常是透過AddressOfEntryPoint欄位來指定的,該欄位儲存的是一個RVA(Relative Virtual Address,相對虛擬地址),即從ImageBase(PE檔案中的一個欄位,表示程式的基地址)開始算起的偏移大小。

二、OEP(Original Entry Point)
OEP,即Original Entry Point,意為程式的原始入口點。在正常情況下,一個程式只有一個EP,即程式的入口點。然而,在某些情況下,如程式被加殼(一種保護程式不被反編譯或壓縮的技術)後,EP可能會被修改為一個指向殼程式碼的地址。在這種情況下,為了找到程式的真正入口點,就需要找到OEP。

OEP是程式在未被修改前的原始入口點,也就是程式開發者設定的最初執行位置。當程式被加殼後,雖然EP被改變,但OEP仍然保持不變,它指向的是程式最初的執行程式碼。因此,在逆向分析或脫殼過程中,找到OEP是至關重要的。

三、EP和OEP的關係與區別
關係:EP和OEP都是程式入口點的概念,但它們在特定情況下有所不同。在正常情況下,EP就是程式的入口點,也是OEP。但當程式被加殼後,EP會被修改,此時EP就不再是OEP了。
區別:EP是程式當前被指定的入口點,它可能因加殼等原因而被修改。而OEP是程式最初的入口點,它不會被加殼等操作改變。因此,在逆向分析或脫殼過程中,需要找到OEP以恢復程式的原始執行流程。
四、如何找到OEP
在逆向分析或脫殼過程中,找到OEP通常需要使用專業的除錯工具和分析技術。以下是一些常見的方法:

1、使用除錯工具:如OllyDbg(簡稱OD)等除錯工具可以幫助逆向分析人員逐步執行程式並觀察暫存器和記憶體的變化。透過單步執行和設定斷點等方式,可以找到程式的跳轉指令和入口點。
2、分析殼程式碼:對於被加殼的程式,需要先分析殼程式碼以確定其修改EP的方式和位置。然後,透過逆向分析殼程式碼來找到OEP的位置。
3、利用特徵碼:一些殼會留下特定的特徵碼或標記以幫助識別其型別和版本。透過分析這些特徵碼或標記,可以推測出殼的修改方式和OEP的位置。
4、記憶體跟蹤:透過跟蹤程式的記憶體訪問和變化來找到OEP的位置。這種方法需要較高的技術水平和經驗積累。
綜上所述,EP和OEP是程式分析中的兩個重要概念。EP代表了程式的當前入口點,而OEP則代表了程式的原始入口點。在逆向分析或脫殼過程中,找到OEP是恢復程式原始執行流程的關鍵步驟之一。

相關文章