脫殼基本知識
手動脫殼就是不借助自動脫殼工具,而是用動態除錯工具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)。