win脫殼_壓縮殼_aspack

[TOP]shell

0,壓縮殼介紹:

ASpack是一種高效的win32可執行程序壓縮工具,能對可執行文件進行壓縮,使最終文件見效達到70%!
常見的壓縮殼還有Upx,nspack工具

1,分析壓縮殼:

首先使用Exeinfo 查看到這個殼是:
spa

2,ESP定律脫殼:

脫壓縮殼最經常使用的方法是:ESP定律(堆棧平衡定律),其次是單步跟蹤法;插件

ESP定律:
程序在加殼以後,程序運行起來,先執行的是殼的代碼(稱爲shell部分或是stub部分),這部分的代碼的功能是對原始PE文件進行還原,包括解壓縮源程序的代碼以及重定位代碼等。
通常在執行shell部分代碼的時候,回先保存上下文環境,使用匯編指令pushed/pishfd,等執行完shell部分以後,會使用匯編指令popfd/popad進行恢復環境,先後呼應,堆棧平衡,在這個原理的前提下,通常使用esp定律進行脫殼。3d

2.1 ESP定律的步驟:

1,加載到調試器x63dbg或者OD中,發現pushad/pushfd指令時,判斷程序已經加殼(這裏我使用的是OD):
調試

2,看到pushad後,就去找到對應的popad,通常OEP就在popad附近:
這裏使用一個簡單的方法,在走過pushad,call xxxxxx,以後,在esp寄存器下寫入斷點或者是訪問斷點,而後run 起程序便可斷在popad的地方:
code

3,下了斷點後,跑起程序:
blog

4,找到OEP:
圖片

2.2 dump 程序:

在原始OEP處,右鍵使用OD插件OllyDump :
it

進入dump 界面,注意圖片上的三點,而後脫殼便可:

而後轉存文件:

轉存文件後,使用導入表修復程序,(ImportREC)對導入表進行修復

選擇dump出的文件進行修復:

修復後可查,程序已經無殼,並且能夠正常運行,並且如今能夠看到是使用的VC++程序寫的

2.3 須要注意的地方:

RVA:
在修復導入表的時候,若是映像基址不是當前模塊的基址的話,那麼就沒法找到IAT,須要手工指定RVA,在進一步嘗試。
隨機基址:
通常程序若是沒有隨機基址的話,那麼修復後是能夠直接運行的,能夠在開始使用010editor查看程序是否開啓了隨機基址,並能夠關閉它

那麼怎麼把程序在脫殼後仍然支持隨機基址呢,這個有空單獨開博。

相關文章
相關標籤/搜索