[Windows][OllyICE][ASM][Unpack]手脫MPRESS殼


小小的紀錄一下MPRESS殼的手脫過程

前情提要:
因為朋友正在分析一支電腦裡野生長出來的軟體,但是看它筋骨奇特,深深覺得絕非善類,肯定是會咬人的壞東西,丟到IDA,IDA也胃口不好。用PEID照妖鏡一看原來外面有戴套,是層MPRESS的殼還蠻冷門的,於是朋友就把這奇形怪貌的東西丟給我脫殼惹 .___.

但是因為我先前根本沒有脫殼過,有的話...我之前脫過UPX算嗎(?)
初探手工脫UPX殼(IAT修復Dump+ESP定律找OEP),學學如何幫程式脫殼裸奔
(不過這篇也只是練習脫UPX殼而已啦XD)

後來Google了一下MPRESS有找到國外相關資料:Unpacking mpress’ed PE+ DLLs with the Bochs plugin,於是可以得知一些資訊來做脫殼惹

首先,用OD載入這鬼東西,
OD會問要不要解壓縮資料請選擇是,
然後讓OD幫我們斷在入口點上:
再來就是一連串繁瑣無聊的把資源解壓縮出來的演算法
一路F8越過,直到遇到底下這裡:
花點時間跟蹤到這邊會發現資源就解壓縮得差不多了,都釋放到記憶體了
繼續單步跟蹤進去:
Jmp進去的第一層跑到這裡眼尖的人會發現Stack上Heap區多了關於原始程序模塊的基址
不過其實這跟脫殼要的資訊沒太大關係啦...順帶提一下XD
然後繼續越過跟蹤下去:
到這個特徵會看到一個call,如果你用越過(F8)會發現在那邊卡很久
這邊我們用F7單步跟蹤進去:
江江江江~原來call進來的地方第一句就是call GetModuleHandleA
聽起來超熟悉的啊,配合底下GetProcAddress雙函數迴圈處理,
原來這邊就是開始還原IAT的處理
應該是對應到國外那篇文章裡面的UnPack函數

接著我們花點時間往下翻翻翻可以翻到:
這邊做popad恢復了stack環境,然後做了一個大跳躍回到OEP了
單步跟蹤進去,如下圖:

漂亮的OEP裸體在我們眼前了,紀錄一下OEP位置0x0041F070
然後用內建的OllyDump設置OEP為0x0041F070,修一下IAT就脫殼完成囉!

留言

這個網誌中的熱門文章

[C#] Lambda花式應用噁爛寫法(跨UI委派秒幹、多線程處理...etc)

[Black Asia Arsenal] puzzCode: 專注開發後門的編譯器, 自帶反逆向、對抗病毒特徵碼定位技術

[Windows] 逆向工程 C++ 中入口函數參數 main(argc, argv) 與如何正確的進行參數劫持