1. 程式人生 > >ESP定律脫殼

ESP定律脫殼

mman img AC 子程序 push call 大致 地址 入口

   ESP定律是比較常用的脫殼方式,作為新手用的也比較多簡單寫一下我的看法。

  esp定律的使用過程大致為:

    1.開始就點F8,註意觀察OD右上角的寄存器中ESP有沒突現(變成紅色),並且只有sp和ip為紅色。

    技術分享圖片

    2.Command窗口中輸入dd 0012FFA4 後回車,跟隨esp寄存器後的地址。

    3.選中下斷的地址,斷點--->硬件訪--->WORD斷點

    4.按一下F9運行程序,直接來到了跳轉處,按下F8,到達程序OEP(程序入口)

  花了很長時間理解了一下原理,簡單談一下,可能有錯。

我們把殼理解為一個對程序進行壓縮和解壓的子程序,相當於調用call指令:call xxxx,call指令遵循堆棧平衡,所以esp作為堆棧指針,程序前後入棧和出棧必須相同。

可剛開始的程序:

0040D000 60 pushad //註意這裏ESP=0012FFC4(入棧)

0040D001 E8 00000000 call ASPACK.0040D006 //ESP=0012FFA4
PUSHAD就是把所有寄存器壓棧!我們在到殼的最後看看:
代碼:
0040D558 61 popad //ESP=0012FFA4(出棧)
0040D559 75 08 jnz short ASPACK.0040D563 //註意這裏ESP=0012FFC4

我們在0012ffa4處設置下物理斷點,殼在出棧時調用ESP=0012FFC4是截斷。按下f8到達程序入口。

適用範圍:

幾乎全部的壓縮殼,部分加密殼。只要是在JMP到OEP後,ESP=0012FFC4的殼,理論上我們都可以使用

  

ESP定律脫殼