對于最后一次異常,在脫殼中用得挺多,但是對于為什么它能脫殼,以前還是有點疑問的。。。首先,對于這種方法,我想應該從殼的角度出發來說說,殼通過某種方法,在程序運行之前,拿到控制權,怎么樣拿到它的控制權呢?我想:應該是 INT 3 , 當然還有一些其他的方法,想一些 調試器的函數, SDK 和 WDK 里面可以去查到的,最近開始設計一些驅動方面的東西,才知道ring 0 , 是多么的強大,哦,回到正題。。。當中斷下來之后。。對程序的PE 進行處理,當然處理的方法很多,包括 壓縮個節表的東西,對 IAT 處理,加入花指令,哦,花指令大量的用于對 調試器的檢查,pushaf ... popaf , 這是一組產生異常的常用的方法,當然方法很多。。說了很多,當處理完之后的最后一次異常,殼將會把控制權交換給應用程序, OEP ,也就不遠了。。。說一下跑出異常的方法吧:三種: 1: 當遇到 SEH 的異常時: 可以當開 view --> seh line ---> 在 seh 下斷點,運行就跑出來了。。2: 可以在 seh handle 出反匯編跟隨,就會來到出口,在出口下段,記住此時的代碼可能會亂序,這是作者防止解密的行為,我們可以通過 shift + 箭頭 來查看代碼。。之后 ,shift + F9運行,就 O 了注釋:2中如果在在程序的領空,是不能在反匯編窗口跟隨的。。。3:在 ZwContion---> ecx + 0xb8 ---這就是異常的出口;可以在 vc 中查看這個函數的用法:如果我沒有記錯; ZwContion(void *);
|
新聞熱點
疑難解答