[分享] 手工脫殼基本常識

基本知識

  手動脫殼就是不借助自動脫殼工具,而是用動態調試工具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:入口點,就是程式在完成了對原程式的還原後,開始跳轉到剛還原的程式執行,此時的位址就是入口點的值。

  2、步驟  

  ★確定殼的種類  

  一般拿到軟體後,可用工具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)。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s


%d 位部落客按了讚: