ESP定律脫殼
阿新 • • 發佈:2018-04-20
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定律脫殼