文章目錄
-
- 前言
- 查殼
- 脫殼
- 修複目标程式
前言
最近一直在看脫殼的相關資料,看到了Tuts4you社群脫殼腳本的教程,這個殼我感覺很不錯挺有意思的,于是打算将内容整理下分享出來。
查殼
這個殼是.NetReactor 3.6.0.0的版本。根據作者的介紹,這個殼隻是一個包裝器,它包裝目标程式,然後将其全部解包到記憶體中執行。但是這是一種不安全的方法,因為有人可以将記憶體中的目标程式轉儲回檔案并完全恢複程式集。這個殼的重點在于轉儲之後的修複,需要對PE檔案有一定的了解。
脫殼
接下來直接載入OD,F9讓程式運作起來。
接着調出記憶體視窗,為了鎖定目标程式被解壓的位置,因為這個crackme實際上也是作者寫的,是以選擇通過搜尋關鍵字元串的方法,搜尋Crackme
搜尋到關鍵字元串之後向上滾動,查找PE檔案,如果找到了說明這裡就是目标檔案解壓縮的地方。
經過搜尋和尋找,我們在第六次搜尋結果中找到了要找的PE檔案。
接着右鍵->備份->儲存資料到檔案。
選擇儲存類型為任何檔案,并修改字尾名為exe。
接着測試運作一下,彈出一個錯誤框,無法在電腦上運作。這很正常,因為直接dump下來的檔案在PE頭總是會出現問題。因為我是在本機上跑的,如果是W7的話應該是顯示不是有效的W32程式。
修複目标程式
接下來用CFF Explorer這款PE工具來修複一下目标程式。
載入目标程式,點選Header部分,錯誤提示為Out of memory。
接下來進入到Driectory部分,修複MetaData Header的錯誤。我們需要修複這個錯誤的RVA和Size,Size明顯是錯的,太小了。
接着來到Address Converter部分,點選這個放大鏡,查找字元串BSJB。至于為什麼搜尋這麼一串字元串,作者給出的解釋是這個字元串的Offset就是要修複的Meta Data的Offset。(我也是一臉蒙蔽 這解釋有點太勉強了吧)
接着點選查找,找到了0x9400這個位址,那麼Meta Data的Offset就是0x9400。
接着把9400輸入到Offset中,會自動計算出我們要的RVA是0xA400。
回到Directoy部分,将正确的RVA填入。至于Size我們可以根據一個公式計算得出:MetaDataSize=Import Directory RVA-MetaDataRVA,Import Directory RVA的值如下圖:
最後算出Size為0x194C。
接着修改回正确的RVA,然後點選儲存。
接着再次輕按兩下測試運作,還是無法運作。這裡作者的原話是根據我之前的經驗,我應該是忘記修改檔案頭屬性了。
不得不感歎大神的經驗就是強大。好吧 繼續修複
點選檔案頭 找到Characteristics,輕按兩下
屬性顯示這是一個DLL,難怪會報錯。把勾去掉,再次儲存。
OK 程式完美運作,這個殼也算是脫完了。
需要相關檔案可以到我的Github下載下傳:https://github.com/TonyChen56/Unpack-Practice