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