VMProtect完美脫殼過程

VMProtect完美脫殼過程

1.查看程序

這是我自己寫的一個VB的小程序,長得有點醜,別介意。然後自己加了一個殼,是VMProtect v.1.6x - 2.03的殼。

接下來我們國際慣例,用PEID,EXEinfo PE查一下殼

可以看到是加了VMP的殼的,VMP殼的介紹我會放在帖子的最後哦。

2.拉到OD去啦~

push 0xE131EEA3 這其實就是被VM過的OEP,你問我啥是Push?push 就是把什麼什麼東西壓入棧中,你懂吧?就那個右下角的框框!

(注:爲了帖子的精華呢我們舉個栗子,VC++6.0編譯的程序 大家都知道它的OEP開頭是push ebp,那大家知道這個push ebp是什麼意思嗎?push ebp的意思是把ebp壓入棧中,就相當於 int main() {} 程序的main函數哦!如果我講的不夠詳細大家方可百度看看!)

接下來我們用到一個函數。

3.Ctrl+G搜索VirtualProtectEx(虛擬地址處理)

來到這裏之後呢,我們在這個7D85E1FF這裏按下鍵盤上的F2。下一個斷點,運行程序,看看程序的變化。

Alt+M 來到這裏

我們可以看到有PE文件頭,等等等之類的。

我們數一下這裏有幾個段。

到這個VMP1這裏一共是有五個段,啥意思呢?意思是我們運行程序五次,記住,不要第六次哦,第六次就跑飛了,程序跑到虛擬地址裏去了。

這是運行五次之後,堆棧的狀態

這是運行第六次之後,堆棧的狀態

程序已經跑到虛擬地址裏面去了,那我們就跑第五次就可以啦

現在是一個很好的返回時機,我們在.text的代碼段下一個內存訪問斷點。然後F9運行,這樣我們就跑出了VMP段了。

 

來到這裏之後呢,一直往下跟可以跟到OEP。

我們直接查看,點擊M

然後右鍵.text在反彙編窗口中查看

然後右鍵分析代碼

搜索FF 25

可以來到他的JMP頭

往下面看都是有很多的JMP

那麼我們就去它的尾巴看看

從模塊中刪除分析,然後呢,點擊M。

ctrl+F搜索76 62 35

這是VB的程序,我們要找到這個,然後可以看到00401368 我們記住這個。

回到反彙編窗口,空格彙編,把我們之前的push 0xxxxxxx改成我們的push 0x401368

然後下面的這個CALL,它CALL的是上面的JMP,那我們也修改一下這個CALL。

修改完是這樣的,然後接着我們需要修復轉存。

記得不要忘了右鍵在此處從新的EIP哦

4.修復轉存

我們需要打開Import REConstructor 這款工具呢就不做多的介紹了。

找到我們需要修復的進程

然後去OD看看dump的OEP是多少,

114C,複製下來,

點擊自動搜索,獲取導入表,然後啥的就不說了。

還有LordPE我們修正鏡像大小,然後完整轉存,這都是正常的修復,都懂。

然後把Import REConstructor 的修復儲存到我們LordPE dump出來的軟件上就可以啦,我們先點開軟件看看吧。

 

一個是我們原版的,一個是脫殼後的,我們給脫殼後的進行查殼看看。

噹噹噹,脫殼完成。

然後我們打開軟件,看看是否可以運行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章