某IOT蠕蟲病毒分析之UPX脫殼實戰
關於UPX的脫殼文章比較多,基本上都是Windows平臺下的脫殼文章,處理起來比較簡單。FormSec將在本文中分析一款mips下病毒程式使用的upx殼保護手段。
在應急事件處理過程中,提取到病毒樣本為virus.dat,樣本使用了UPX(3.91)殼,對程式進行了壓縮處理。
作者對加殼後的樣本進行了修改,導致使用upx –d命令解壓失敗;雖然解壓失敗了,但是不影響程式正常功能的執行。
分別使用兩個版本的upx程式嘗試脫殼,可以看出最新版的提示資訊比較具體;
提示: upx: virus.dat: CantUnpackException: p_info corrupted
由於最新版的脫殼程式直接報告出是p_info欄位的問題,在網上找了一圈沒有關於針對該問題的解決方案,這裡直接找upx(3.94)最新版的原始碼分析一下,主要簡單分析作者使用的干擾脫殼程式的技術手段,以及如何修復;
- 定位輸出錯誤資訊的位置,直接查詢錯誤資訊字串即可;查詢到兩處分別對應32位和64位版本的檔案頭;
- 簡單分析一下p_lx_elf.cpp -> PackLinuxElf32::unpack 函式的功能;
- p_info結構體的定義如下,12bytes;
- 定位檔案中p_info的位置,可以看出作者將該結構體用0填充後,解壓程式檢測到異常,導致解壓縮失敗;
- 修復upx殼,下圖示記的位置儲存著有效的p_info->p_filesize 欄位(p_filesize 和
p_blocksize相同)
- 修復p_info資訊:
- 脫殼成功;
上面主要記錄了整個處理定位問題,一直到如何修復的方法與思路,希望能夠幫助到對二進位制病毒分析比較感興趣的同學;
後續有機會的話,會出一篇關於該病毒的詳細技術分析報告;歡迎各位斧正;)