資訊安全領域的研究、心得分享

2016年2月10日 星期三

加殼及脫殼(二)

撰寫於 2016/2/11 中午


了解殼的運行流程

課程的前導知識為:基礎PE結構認知

以常見的在宿主直接添加區段的殼程序為例。
首先我們先來看一下沒被加殼前的程序。

   
這是一個準備要被加殼的文件,PE頭的程式入口點指向程序的執行區段。

正如一個正常運作的執行檔。





















在準備加殼之前,加殼程序會讀取宿主程序的基本訊息,並根據這些信息與使用者的設定來對代 碼段(.text)、數據段(.data)、資源段(.rsrc)進行有選擇的加密壓縮操作。
 
 然後加殼程序會在宿主程序中,添加一個足夠大的空區段,並將負責解的代碼(術語可以稱作  為:Stub部分或Shell部分)與相關配置信息寫入這個新添加的空區段中。









而加殼後,PE文件被添加了新的區段.shell,且
原本的.text,.data,.rsrc區段都被加密,當使用靜態分析軟體反編譯該區段時,將會發現這裡是無法被解析的。

有時候也會看到被加密的節段,被加殼程序重新整合,分段成其他節塊。

另外,可以看見PE程序的入口點改變了位置
指向到新增區段.shell的入口點,也就是殼的入口位置。

也就是說,當系統執行文件並裝載程序時,他所會先執行的並不是原本該宿主的代碼,而是先執行我們新貼加在宿主上的殼程序,與所謂的計算機病毒原理相當類似。

殼的程序在被執行的這段時間,會將原本被加密的區段進行解密,當全部解密完畢後,才跳至原本宿主的OEP,正常的執行程序。






以上,就是一個基本殼的執行流程。



                                                              參考資料:黑客免殺攻防、加密與解密

沒有留言:

張貼留言