轉自:http://www.bllll.com/thread-43439-1-1.html
普通殼的脫殼方法和脫殼技巧
這篇文章,是我在之前在自學脫殼的時候,在筆記本是所做的脫殼總結;裡麵包括了各種殼的脫殼方法,最重要的是注釋了什麼殼用什麼方法脫是最省時省力的
方法。畢竟是一篇筆記,所以在順序是或許會有些雜亂無章的感覺。還是請剛接觸脫殼的朋友們將就一下,一個一個字的把它從筆記本是移到電腦上也不容易。
首先,先對下文中將要講到的幾個地方做一下說明,避免一些剛接觸脫殼的朋友因為不清楚它們的意思,而把時間花費在baidu和google上。
常見脫殼知識:
1.PUSHAD (壓棧) 代表程式的進入點
2.POPAD (出棧) 代表程式的出口點,與PUSHAD相對應,一般找到這個,說明OEP可能就在附近
3.OEP:程式的進入點,軟體加殼就是隱藏了OEP(或者用了假的OEP),
只要我們找到程式真正的OEP,就可以立刻脫殼。
脫殼的幾種方法:
方法一:單步跟蹤
方法二:ESP定律脫殼
方法三:記憶體跟蹤
方法四:跟蹤出口法
方法五:最後一次異常法
方法六:懶人脫殼法
上面這些方法具體的操作我會在最後,在文章的最下面給出。想要具體瞭解的可以去看下,不過最後再看這個也是可以的。可以節省大家的時間。
=================================================================================================
第二部分,需要注意的幾處重點
ESP脫殼時,對於有關鍵提示的(如:Pushw 或 Pushad ),一般選擇關鍵提示下面那行地址中的ESP。
懶方法脫殼,這種方法對壓縮殼有效;對加密殼作用不大。
“懶方法脫殼“在已開始的設定時需要注意(簡化的設定步驟,詳細的在文章最下面):
1、首先,要忽略所有異常 //忽略所有異常——這個是必須的
2、設定:”調試選項“→”SFX“→”位元組模式跟蹤實際入口(速度非常慢)“
3、載入相關程式。 //當載入後的程式停止後,所停址的那個地址就是我們Dunp加殼檔案的那個地址
Hr命令:”hr“下的是位元組斷點。用ESP脫殼時,多數都是用的這個。
=================================================================================================
第三部分,筆記本文----這篇文章的骨幹部分!
第一節 手脫EZIP 1.0 的殼
因為這個殼會修改PE頭 用OD脫殼後即使修複了也不能運行。所以最簡單的方法是採用 LordPE 這個工具脫殼。具體步驟:
首先,運行目標軟體程式(不是用OD,而是想像平時使用一樣,雙擊開啟)→從 LordPE 列表中選中目標程式的進程→點”滑鼠右鍵“ 選擇”完整脫殼“。最後用 ImportREC 進行修複。
第二節 手脫wwpack 的殼
這個殼跟上面說的 EZIP 1.0 的殼一樣,OD脫殼 ImportREC 進行修複 程式還是無法運行。所以還是要用 LordPE 進行脫殼工作。
具體步驟 : 從 LordPE 列表中選中目標程式的進程→點”滑鼠右鍵“ 選擇”完整脫殼“。最後用 ImportREC 進行修複 。發現還是不能運行!
最關鍵的地方到了:用 LordPE 這個軟體內建的重建 PE 修複功能;重建PE頭,重建後,即可運行!
第三節 手脫 UPX 殼的捷徑
用我們已開始提到的”關鍵提示“。
具體操作:OD載入程式後,直接Ctrl+F,輸入 POPAD ;點確定後 來到這個命令所在的位置。按F2,在這個地方下斷;再按F9(運行);停止後,按F2取消剛才下的斷點。再F8單步!
第四節 手脫 ASPCK 的殼
脫這個殼用ESP定律,還是相對快捷的。可以用載入程式後,第二行(是一個CALL)那裡面的ESP。 //多數程式這個殼的第二行都是一個CALL
在左OD左下角的命令列中,輸入命令:hr ESP地址(如 hr 0012FFA4);F9 運行。然後從OD”調試菜單“中的”硬體斷點“這一項將剛才下的斷點刪除,這點很重要!最後F8單步!
第五節 用 記憶體鏡像法 手脫FSG 1.33 和 PCshrink 的殼
1、忽略所有異常
2、Alt+M 開啟記憶體鏡像,找到第一個 ”.rsrc“
3、F2(下斷),F9(運行)
4、Alt+M 開啟記憶體鏡像,找到”Code“段;
5、F2(下斷),Shift+F9【這點一定要記住,切記是 Shift+F9】運行;
6、先按F8,再按下F4,直接到達OEP
第六節 手脫 JDpack 殼 和 PEpack 1.0 的殼 最簡單的方法
脫這個殼推薦使用記憶體鏡像法;
我在用ESP脫殼的時候發現:ESP定律的速度和單步跟蹤的速度差不多,所以在這裡就不推薦了。相反,脫 PEpack 1.0 殼 的時候,用ESP定律是最快捷的方法。
第七節 手脫 PEDiminisher ;Dxpack 0.86 ;32lite 0.03a ;PEtite 2.2 這幾種殼的簡單方法
脫PEDiminisher ;Dxpack 0.86 ;這兩種殼的時候,直接用之前講到的ESP定律,即可完美脫殼。命令:【hr ESP地址】
用ESP脫 32lite 0.03a 後 要注意的是,需要用 ImportREC 這個工具進行修複。如:00410D50 在輸入框中輸入 10D50 就可以了 【004捨去】
在用ESP定律脫 PEtite 2.2 的時候,推薦選擇 Pushad 下面那行地址中的 ESP
第八節 手脫 Exestealth 2.72 的殼
看到這或許大家會沉迷與ESP定律當中,在這裡提醒大家:Exestealth 2.72 的殼 用我們一開始提到的”懶方法脫殼“是最簡單的;具體步驟,可以參考文章第二部分。
第九節 手脫nspack(北鬥)1.3 的殼
1、ESP定律,命令:hr ESP地址 【脫殼後程式不能正常運行】
2、用 ImportREC 這個工具進行修複,修複後程式正常運行。
第十節 另類方法脫 ASPack 2.12R 殼的技巧
Ctrl+S 搜尋:retn 0C【retn和零C 中間有個空格】 找到後向下看,如下:
retn 0C
push 0 //在 retn 0C 的下面
retn //在這個地方按 F2(下斷) ;F9(運行)
停止後按 一下 F8(單步);再按一下 F7(跟進) 觀看這看不懂?沒關係,要是我,我也看不懂,所以我早有準備;詳細步驟,如下(這是某程式的一部分):
程式中斷後來到這裡:
0046B3B8 C2 oc00 retn 0C //開始F8(單步)
0046B3B9 68 64584500 push registra.00455864 //這裡調用來自 00455864 (OEP)
0046B3C0 C3 retn //F7(跟進) 步入到OEP
注意:這種殼ESP不能直接脫。
=================================================================================================================
脫殼的幾種方法 詳細操作步驟
常見脫殼知識:
1.PUSHAD (壓棧) 代表程式的進入點
2.POPAD (出棧) 代表程式的出口點,與PUSHAD相對應,一般找到這個,說明OEP可能就在附近
3.OEP:程式的進入點,軟體加殼就是隱藏了OEP(或者用了假的OEP),
只要我們找到程式真正的OEP,就可以立刻脫殼。
方法一:單步跟蹤
1.用OD載入,不分析代碼!
2.單步向下跟蹤F8,是向下跳的讓它實現
3.遇到程式往回跳的(包括迴圈),我們在下一句代碼處按F4(或者右健單擊代碼,選擇斷點——運行到所選)
4.綠色線條表示跳轉沒實現,不用理會,紅色線條表示跳轉已經實現!
5.如果剛載入程式,在附近就有一個CALL的,我們就F7跟進去,這樣很快就能到程式的OEP
6.在跟蹤的時候,如果運行到某個CALL程式就啟動並執行,就在這個CALL中F7進入
7.一般有很大的跳轉,比如 jmp XXXXXX 或者 je XXXXXX 或者有RETE的一般很快就會到程式的OEP。
我們看看能不能運行,可以運行,是Microsoft Visual Basic 5.0 / 6.0的程式
下面我們看第二種方法
方法二:ESP定律脫殼(ESP在OD的寄存器中,我們只要在命令列下ESP的硬體訪問斷點,就會一下來到程式的OEP了)
1.用Od載入後就按F8,注意觀察OD右上方的寄存器中ESP有沒出現
2.在命令列下:dd 0012FFA4(0012FFA4指在當前代碼中的ESP地址),按斷行符號!
3.選種下斷的地址,下硬體訪問WORD斷點。
4.按一下F9運行程式,直接來到了跳轉處,按下F8,到達程式OEP,脫殼
可以運行,說明我們脫殼成功,下面看第三種方法
方法三:記憶體跟蹤:
1:用OD開啟軟體!
2:點擊選項——調試選項——異常,把裡面的忽略全部勾上,CTRL+F2重新載入程式
3:按ALT+M,開啟記憶體鏡象,找到第一個.rsrc.按F2下斷點,然後按SHIFT+F9運行到斷點,接著再按ALT+M, 開啟記憶體鏡象,找到.RSRC上面的CODE,按F2下斷點,然後按SHIFT+F9,直接到
達程式OEP,脫殼
不知道為什麼我這台電腦不是直接到達oep,可能是系統問題,我這裡還要向下單步幾次
同樣可以運行,看下面一種方法
方法四:跟蹤出口法
一步到達OEP(前輩們總結的經驗)
1.開始按Ctrl+F,輸入:popad(只適合少數殼,包括ASPACK殼),然後按下F2,F9運行到此處
2.來到大跳轉處,點下F8,脫殼
可以運行,看下一種方法
方法五:最後一次異常法 (這種脫殼方法在我這台電腦上無法示範,可能是因為系統問題吧,不過大家跟著下面的步驟做就可以找到OEP了)
1:用OD開啟軟體
2:點擊選項——調試選項——異常,把裡面的勾全部去掉,CTRL+F2重新載入程式
3:在這裡我們按SHIFT+F9,直到程式運行,記下從開始按SHIFT+F9到程式啟動並執行次數
4:CTRL+F2重新載入程式,按SHIFT+F9(次數為程式啟動並執行次數-1次)
5:在OD的右下角我們看見有一個SE 控制代碼,這時我們按CTRL+G,輸入SE 控制代碼前的地址!
6:按F2下斷點,然後按SHIFT+F9來到斷點處!
7:去掉斷點,按F8慢慢向下走
8:到達程式的OEP,脫殼
最後一種方法
方法六:懶人脫殼法 (由於這種脫殼方法速度比較慢,這裡我就不再示範了,大家跟著下面的步驟就可以找到oep了)
1、用od載入軟體
2、點擊選項——調試選項——SFX
3、選中“位元組方式跟蹤真正入口處(速度非常慢)”
4、重新載入軟體
5、od開始自動跟蹤進入點
6、直接到達oep,脫殼(適用於少數殼)
===================================================================================================