標籤:
Fly2015
對於FSG殼。之前沒有接觸過是第一次接觸。這次拿來脫殼的程式仍然是吾愛破解論壇破解培訓的作業3的程式。對於這個殼折騰了一會兒,後來還是被搞定了。
1.查殼
首先對該程式(吾愛破解培訓第一課作業三.exe)進行查殼:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >
非常遺憾。這次DIE也不行了,只是沒事。
2.脫殼
OD載入該加殼的程式進行分析。以下是進入點的彙編代碼:
起初對於該種加殼程式也是比較陌生。可是因為OD使用的還算熟悉,以及結合該加殼程式擷取函數的API調用地址的特點,非常快發現了該程式的關鍵點彙編:
於是在地址004001D1處F2下斷點,然後F9執行到該地址004001D1處,地址0041DDAC就是被加殼程式真實的OEP的地址。
F7單步跟進到地址0041DDAC處。遺憾的是沒有看到我們熟悉的進入點的彙編代碼,可是不要急,OD沒有將彙編代碼正確的顯示出來,須要我們自己手動的進行資料的反組譯碼解析:
選中地址0041DDAC處沒有正確顯示的資料。然後 右鍵 ,選擇 分析-->分析代碼 就可以正確顯示了。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >
手動選擇分析代碼以後。地址0041DDAC處的資料的顯示。是不是非常有親切感啊,令人熟悉的進入點彙編代碼出現了。可是不要急。這才是第一步。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >
非常自然的下一步就是使用OD的外掛程式OllyDump進行程式的脫殼操作。可是這裡對於這樣的殼這樣直白的脫殼方式並無論用,須要使用Load PE結合RECImport工具進行完美脫殼。由於被FSG加殼的程式的IAT表不是連續的。脫殼工具不能智能的識別那些記憶體資料是函數的地址。因此須要我們自己手動的識別那些是函數的地址那些不是函數的地址。然後使用工具脫殼。
須要脫殼程式暫停在地址0041DDAC處,使用Load PE工具將其此時的記憶體PE鏡像手動Dump出來(全然脫殼方式),。
注意。此時Dump出來的程式還不能執行,須要為該Dump程式正確的修複IAT表,它才幹執行起來。
通過上面的調試。瞭解到程式的真實OEP的RVA地址為001DDAC。使用RECImport工具進行該Dump程式的IAT表的修複。
1.常規的修複IAT表的方式:
在RECImport工具的OEP處手動填寫001DDAC,然後點擊 IAT 自己主動搜尋-->擷取匯入表-->修正轉儲。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >
IAT表修複後的脫殼程式的執行,。
非常顯然。剛才的IAT表的修複沒有修複成功。假設IAT表修複成功的話,執行脫殼後的程式就不會出現以下這個不友好的介面提示。
2.手動修複IAT表的方式:
遺憾啦,RECImport工具沒用使用好。通過OD查看記憶體資料發現。RECImport工具對Dump後的程式的IAT的修複不全然。
在RECImport工具中,IAT自己主動搜尋到的程式的匯入表的函數不全然。,函數匯入表的起始RVA地址是000320BC。函數匯入表的結束RVA地址是000320BC+200=000322BC也就匯入表函數的個數是0x200,可是經過OD的觀察發現,這兩個參數有誤。
回到OD偵錯工具中,在HEX資料區,Ctrl+G定位到地址00410000地址處,然後,設定資料的顯示方式:長整型-->地址 顯示方式。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >
OD資料視窗-地址顯示方式視圖:
經過手動拖動尋找的方式,發現該被加殼程式的匯入表的入口RVA地址應該是00032000 不是地址000320BC處,而且匯入表的結束RVA地址是00032554,因此匯入表函數的大小應該是32554 - 32000 = 554 個(十六進位)。
匯入表的起始RVA地址:00032000.
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >
匯入表的結束RVA地址:00032554 ,因此匯入表函數的大小應該是32554 - 32000 = 554 。
經過上面的分析和觀察以後,例如以填寫RECImport工具中須要的參數。然後直接點擊 擷取匯入表 千萬不要點 IAT自己主動擷取 否則前功盡棄。
點擊 顯示無效的 函數發現,在擷取到的匯入表中的函數存在無效的函數地址,確實通過OD也發現了函數的地址不是連續的,有些函數之間是0x7FFFFFFF不是有效函數地址。
因為0x7FFFFFFF不是有效函數地址,因此須要去掉這些無效的函數地址。右鍵選擇中這些無效的函數地址,然後選擇 剪下指標 就可以刪除這些無效的函數地址。
Ok,如今就能夠使用這些剩下的有效IAT表的匯出函數地址進行Dump程式的修正轉儲了,。
執行經過有效IAT修複的程式的視圖。
FSG脫殼分析文檔的和脫殼後的程式的:http://download.csdn.net/detail/qq1084283172/8883891
手動脫FSG殼實戰