1. 程式人生 > >脫殼系列_0_FSG殼_詳細版

脫殼系列_0_FSG殼_詳細版

1 檢視資訊

  • 拿到當前加殼程式,用exeinfoPe/PeID 看一下資訊

           

  • 可以看出是很老的殼FSG。

分析:

Entry Point : 000000154,熟悉PE結構的知道,入口點(程式碼)揉進PE頭去了。

在WIN10 以來在(被限制了)PE 頭中不能有執行程式碼,只有在WIN7 及其以前的機器上,此程式才能執行。所以用虛擬機器來脫這個很老的殼,在目前(本人)win10的機器上無法執行。

2 使用LordPE 觀察以下PE結構

  • 點選檢視區段 資訊:

            

  • 發現區段有兩個,都把區段名抹去了;且第一個區段的虛擬大小雖然0x17000 但是實際大小(檔案中的大小)是0

分析:

發現區段有兩個,都把區段名抹去了;且第一個區段的虛擬大小雖然0x17000 但是實際大小(檔案中的大小)是0

3 使用OD除錯此程式嘗試找OEP

3.1 開啟OD定位殼

            

  • 用Nop 破壞花指令使得反彙編正確解析後,添加註釋、標籤 - "FSG殼"

分析: 我們發現一進來,殼早就準備好了全部暫存器資料在地址0x4219D8的位置,把當前位置儲存環境的地址放到當前的ESP暫存器,那就能POP棧操作,操作殼儲存好的資料了。為啥我們看不到它之前的操作? 之後寫殼的時候再分析

3.2 嘗試找 OEP

  • 單步執行
  • 遇到第一個call (字元操作核心部分)

0x000400160:

CALL DWORD PTR DS:[EBX]
;此時EBX是 0x4219dc --- [EBX]:是0x4001e8

進入 0x4001e8:

 

  • 結合 call 的下一句 大致理解這個演算法

            

 

分析:

這個字串拷貝的演算法,(淺淡的觀測下)不可逆的拷貝,而且資訊不全,所以可能不重要。我們可以先忽略這個拷貝迴圈 -----》 跳過這個拷貝演算法: 我們在後面的每個 jmp/call 滑鼠點過去一下看會不會跳回去之類的,直到找到了。或者你安裝了高亮外掛(asmHighLight.dll):由於我們分析出這個拷貝的核心呼叫函式是 地址為 0x400160 這句opcode,那滑鼠點在上面檢視後面在哪裡沒有該高亮色,就大致找一下就能跳過這個演算法部分了。

然後我們在殼程式碼後面部分找到了最後一個高亮。其實這個無條件跳轉流這就是我們這個演算法部分的最後一句了。

 

  • 跳出字串拷貝演算法之後,我們發現程式碼只有10來行了。直接斷點關鍵的跳轉行,我們直接找OEP。

           

  • 然後我們發現跳轉到 OEP的是這一句:

           

4 Dump

  • 進入入口函式後,我們點幾個跳轉點資料等 並沒有發現有異常資料(異常資料)等。
  • 直接使用OD提供的外掛ollyDump ,dump到本地。

           

           

 

分析:

觀察其實地址 、入口點這些 頭沒有錯。如果沒有就點選脫殼

5 修復IAT

  • 這裡使用impREC 來修復IAT

           

  • 我們發現這裡查找出來的IAT資訊不完全,那就需要觀察IAT表是否有異常了。

分析:

通過這裡找到的函式偏移,可以迅速定位到IAT表。

             

  • 比如這裡的rva為B000。那麼再虛擬空間中的地址就是40B000,在OD中觀察如下:

           

  • 我們向下滑動,發現:

            

  • 這兩個異常值阻止了impREC的解析:我們該為正常的0000000間隔:

            

  • 我們修改後再次用impREC解析 得到的IAT表目前來看貌似完成了
  • 最後點選修復轉儲到我們剛才用OD,dump出來的的程式

            

6 檢測我們的脫殼之後的程式

          

  • yes!!!