004 .NetReactor 3.6.0.0之另类脱壳法
文章目錄
- 前言
- 查殼
- 脫殼
- 修復目標程序
前言
最近一直在看脫殼的相關資料,看到了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
總結
以上是生活随笔為你收集整理的004 .NetReactor 3.6.0.0之另类脱壳法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 宏病毒的研究与实例分析05——无宏文件携
- 下一篇: 160个Crackme009