脫殼基本知識

看雪資料發表於2015-11-15

脫殼基本知識

  手動脫殼就是不借助自動脫殼工具,而是用動態除錯工具SOFTICE或TRW2000來脫殼。這課談談一些入門方面的知識,如要了解更深的脫殼知識,請參考《脫殼高階篇》這課。

工具

*偵錯程式:SoftICE 、TRW2000
*記憶體抓取工具:Procdump等;
*十六進位制工具:Hiew、UltraEdit、Hex Workshop等;
*PE編輯工具: Procdump、PEditor等;

名詞概念

PE檔案:Microsoft設計了一種新的檔案格式Portable Executable File Format(即PE格式),該格式應用於所有基於Win32的系統:Windows NT、Windows 2000、Win32s及Windows 95/98。

★基址(imageBase ):是指裝入到記憶體中的EXE或DLL程式的開始地址,它是Win32中的一個重要概念。 在Windows NT中,預設的值是10000h;對於DLLs,預設值為400000h。在Windows 95中,10000h不能用來裝入32位的執行檔案,因為該地址處於所有程式共享的線性地址區域,因此Microsoft將Win32可執行檔案的預設基地址改變為400000h。

RVA:相對虛擬地址(Relative Virual Address),是某個項相對於檔案映象地址的偏移。例如:裝載程式將一個PE檔案裝入到虛擬地址空間中,從10000h開始的記憶體中,如果PE中某個表在映像中的起始地址是10464h,那麼該表的RVA就是464h。虛擬地址(RVA)=偏移地址+基址(imageBase )

Entry Point:入口點,就是程式在完成了對原程式的還原後,開始跳轉到剛還原的程式執行,此時的地址就是入口點的值。

步驟

★確定殼的種類

一般拿到軟體後,可用工具FileInfo、gtw、TYP32等偵測檔案型別的工具來看看是何種殼,然後再採取措施。

★入口點(Entry Point)確定

初學者來說定位程式解殼後的入口點確定較難,但熟練後,入口點查詢是很方便的。 決大多數 PE 加殼程式在被加密的程式中加上一個或多個段。 所以看到一個跨段的 JMP 就有可能是了。如:UPX 用了一次跨段的 JMP , ASPACK 用了兩次跨段的 JMP 。 這種判斷一般是跟蹤分析程式而找到入口點,如是用TRW2000也可試試命令:PNEWSEC,它可讓TRW2000中斷到入口點上。
PNEWSEC
執行直到進入一個 PE 程式記憶體的新的 section時產生斷點。(如不懂,以後到脫殼高階篇自會明白)

另外也可用D.boy的衝擊波2000,它能輕易的找到任何加密殼的入口點,

★dump取記憶體己還原檔案

找到入口點後,在此處可以用 Procdump的FULL DUMP功能來抓取記憶體中整個檔案,
如是用TRW2000也可用命令:

makepe命令含義:從記憶體中整理出一個指令名稱的PE格式的exe檔案, 當前的 EIP 將成為新的程式入口,生成檔案的 Import table 已經重新生成過了。生成的PE檔案可執行任何平臺和微機上。

pedump命令含義:將PE檔案的記憶體映像直接映像到指定的檔案裡。生成的檔案只能在本機執行,不能在其它系統平臺或微機執行。

修正剛dump取的檔案

如是用 Procdump的FULL DUMP功能脫殼的檔案,要用 Procdump或PEditor等PE編輯工具修正入口點(Entry Point)。

 

相關文章