天天看點

004 .NetReactor 3.6.0.0之另類脫殼法

文章目錄

    • 前言
    • 查殼
    • 脫殼
    • 修複目标程式

前言

最近一直在看脫殼的相關資料,看到了Tuts4you社群脫殼腳本的教程,這個殼我感覺很不錯挺有意思的,于是打算将内容整理下分享出來。

查殼

004 .NetReactor 3.6.0.0之另類脫殼法

這個殼是.NetReactor 3.6.0.0的版本。根據作者的介紹,這個殼隻是一個包裝器,它包裝目标程式,然後将其全部解包到記憶體中執行。但是這是一種不安全的方法,因為有人可以将記憶體中的目标程式轉儲回檔案并完全恢複程式集。這個殼的重點在于轉儲之後的修複,需要對PE檔案有一定的了解。

脫殼

接下來直接載入OD,F9讓程式運作起來。

004 .NetReactor 3.6.0.0之另類脫殼法

接着調出記憶體視窗,為了鎖定目标程式被解壓的位置,因為這個crackme實際上也是作者寫的,是以選擇通過搜尋關鍵字元串的方法,搜尋Crackme

004 .NetReactor 3.6.0.0之另類脫殼法
004 .NetReactor 3.6.0.0之另類脫殼法

搜尋到關鍵字元串之後向上滾動,查找PE檔案,如果找到了說明這裡就是目标檔案解壓縮的地方。

004 .NetReactor 3.6.0.0之另類脫殼法

經過搜尋和尋找,我們在第六次搜尋結果中找到了要找的PE檔案。

004 .NetReactor 3.6.0.0之另類脫殼法

接着右鍵->備份->儲存資料到檔案。

004 .NetReactor 3.6.0.0之另類脫殼法

選擇儲存類型為任何檔案,并修改字尾名為exe。

004 .NetReactor 3.6.0.0之另類脫殼法

接着測試運作一下,彈出一個錯誤框,無法在電腦上運作。這很正常,因為直接dump下來的檔案在PE頭總是會出現問題。因為我是在本機上跑的,如果是W7的話應該是顯示不是有效的W32程式。

修複目标程式

接下來用CFF Explorer這款PE工具來修複一下目标程式。

004 .NetReactor 3.6.0.0之另類脫殼法

載入目标程式,點選Header部分,錯誤提示為Out of memory。

004 .NetReactor 3.6.0.0之另類脫殼法

接下來進入到Driectory部分,修複MetaData Header的錯誤。我們需要修複這個錯誤的RVA和Size,Size明顯是錯的,太小了。

004 .NetReactor 3.6.0.0之另類脫殼法

接着來到Address Converter部分,點選這個放大鏡,查找字元串BSJB。至于為什麼搜尋這麼一串字元串,作者給出的解釋是這個字元串的Offset就是要修複的Meta Data的Offset。(我也是一臉蒙蔽 這解釋有點太勉強了吧)

004 .NetReactor 3.6.0.0之另類脫殼法

接着點選查找,找到了0x9400這個位址,那麼Meta Data的Offset就是0x9400。

004 .NetReactor 3.6.0.0之另類脫殼法

接着把9400輸入到Offset中,會自動計算出我們要的RVA是0xA400。

004 .NetReactor 3.6.0.0之另類脫殼法

回到Directoy部分,将正确的RVA填入。至于Size我們可以根據一個公式計算得出:MetaDataSize=Import Directory RVA-MetaDataRVA,Import Directory RVA的值如下圖:

004 .NetReactor 3.6.0.0之另類脫殼法

最後算出Size為0x194C。

004 .NetReactor 3.6.0.0之另類脫殼法

接着修改回正确的RVA,然後點選儲存。

004 .NetReactor 3.6.0.0之另類脫殼法

接着再次輕按兩下測試運作,還是無法運作。這裡作者的原話是根據我之前的經驗,我應該是忘記修改檔案頭屬性了。

不得不感歎大神的經驗就是強大。好吧 繼續修複

004 .NetReactor 3.6.0.0之另類脫殼法

點選檔案頭 找到Characteristics,輕按兩下

004 .NetReactor 3.6.0.0之另類脫殼法

屬性顯示這是一個DLL,難怪會報錯。把勾去掉,再次儲存。

004 .NetReactor 3.6.0.0之另類脫殼法
004 .NetReactor 3.6.0.0之另類脫殼法

OK 程式完美運作,這個殼也算是脫完了。

需要相關檔案可以到我的Github下載下傳:https://github.com/TonyChen56/Unpack-Practice