脫殼系列_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!!!