1. 程式人生 > >脫殼:OEP(即程序入口點)查找 --- 基本思路和常見方法

脫殼:OEP(即程序入口點)查找 --- 基本思路和常見方法

dash xxxx 適合 往回 去掉 nbsp 忽略 回車 p地址

OEP:程序的入口點,軟件加殼就是隱藏了OEP(或者用了假的OEP), 只要我們找到程序真正的OEP,就可以立刻脫殼。

PUSHAD (壓棧) 代表程序的入口點, POPAD (出棧) 代表程序的出口點,與PUSHAD相對應,一般找到這個,OEP就在附近。

常見尋找OEP脫殼的方法

方法一:
1.用OD載入,不分析代碼!
2.單步向下跟蹤F8,是向下跳的讓它實現
3.遇到程序往回跳的(包括循環),我們在下一句代碼處按F4(或者右健單擊代碼,選擇斷點——運行到所選)
4.綠色線條表示跳轉沒實現,不用理會,紅色線條表示跳轉已經實現!
5.如果剛載入程序,在附近就有一個CALL的,我們就F7跟進去,這樣很快就能到程序的OEP


6.在跟蹤的時候,如果運行到某個CALL程序就運行的,就在這個CALL中F7進入
7.一般有很大的跳轉,比如 jmp XXXXXX 或者 JE XXXXXX 或者有RETE的一般很快就會到程序的OEP。
方法二:
ESP定理脫殼(ESP在OD的寄存器中,我們只要在命令行下ESP的硬件訪問斷點,就會一下來到程序的OEP了!)
1.開始就點F8,註意觀察OD右上角的寄存器中ESP有沒出現。
2.在命令行下:dd 0012FFA4(指在當前代碼中的ESP地址),按回車!
3.選種下斷的地址,下硬件訪問WORD斷點。
4.按一下F9運行程序,直接來到了跳轉處,按下F8,到達程序OEP,脫殼
方法三:
內存跟蹤:

1:用OD打開軟件!
2:點擊選項——調試選項——異常,把裏面的忽略全部√上!CTRL+F2重載下程序!
3:按ALT+M,DA 打開內存鏡象,找到第一個。rsrc.按F2下斷點,
然後按SHIFT+F9運行到斷點,接著再按ALT+M,DA 打開內存鏡象,找到。RSRC上面的CODE,按
F2下斷點!然後按SHIFT+F9,直接到達程序OEP,脫殼!
方法四:
一步到達OEP(前輩們總結的經驗)
1.開始按Ctrl+F,輸入:popad(只適合少數殼,包括ASPACK殼),然後按下F2,F9運行到此處
2.來到大跳轉處,點下F8,脫殼之!

方法五:
1:用OD打開軟件!
2:點擊選項——調試選項——異常,把裏面的√全部去掉!CTRL+F2重載下程序!
3:一開是程序就是一個跳轉,在這裏我們按SHIFT+F9,直到程序運行,記下從開始按F9到程序
運行的次數!
4:CTRL+F2重載程序,按SHIFT+F9(次數為程序運行的次數-1次
5:在OD的右下角我們看見有一個SE 句柄,這時我們按CTRL+G,輸入SE 句柄前的地址!
6:按F2下斷點!然後按SHIFT+F9來到斷點處!
7:去掉斷點,按F8慢慢向下走!
8:到達程序的OEP,脫殼!

脫殼:OEP(即程序入口點)查找 --- 基本思路和常見方法