本文將說明現有防毒軟件自我保護機制與木馬們的防御對策。適合新手至高手閱讀,如果現在你正擔心你的木馬被查殺,不妨看看此文,你定會有收獲的。
前些天,看論壇上有很多人說用進程結束的方法消滅殺毒軟件來保護自己的馬兒。不知大家發現沒有,AVP和KV以及瑞星的一些進程都是無法結束的。這樣殺毒軟件還在運行著,撞上你的馬還是會殺掉的。現在來說說這些進程為什么殺不掉。
因為殺毒軟件是運行于Ring0級的,程序資源級別分為0、1、2、3, 0級最高,3級最低。只有0級資源的才能訪問0級資源的程序。Ring0級運行于內存最高端,享有最高有權限。一般的木馬都是2級資源級別的(像灰鴿子、黑洞、阿拉QQ大盜等等),有些是1級(像Bio-Net、Beast等等 這種不多)。當然無法結束位于0級資源的殺毒軟件進程。
但是黑洞2001-2004的版本,卻可以用他的進程過濾搞定很多殺毒軟件。這是為什么?因為,他是不用進程結束的,而是窗口標題檢測,發現類似“殺毒、木馬克星、安全”之類的字眼就向該窗口發送無條件退出命令(WWQ_Quit)。這樣就可以免除Ring資源級別的障礙了。阿拉QQ大盜則是干擾其掃描引擎來達到阻止殺毒軟件的目的。
關于實現0級對0級資源程序的操作
目前,尚無對殺毒軟件進程有效的解決方案。本人才思不及,只能給出解決的編程思路。
要對Ring0級資源操作,必須是匯編級語言。大家可以用Vxd技術來實現,這樣編寫起來比較方便,而且用匯編語言編寫很可能會被殺毒軟件認為是病毒,因為其病毒特征過于明顯。把整個程序寫成驅動程序的形式,加入到系統內存頂端,就可以對殺毒軟件進程為所欲為。
首先程序啟動,在內存最高端開辟一塊內存,把自身復制上去并運行。然后寫啟動,寫服務。接著在內存中搜尋殺毒軟件內存標識符,找到以后,把殺毒軟件內存標識符所在區域用無用垃圾數據覆蓋,導致其出錯退出。這些過程不能借助 INT13 寫盤中斷來完成,否則會被判定位病毒的。必須繞過殺毒軟件設下的寫盤捕獲陷阱,這就需要極其高超的編程技術了。像這種編程能力,除了喪心病狂的病毒編寫者還有操作系統編寫者,其他人是無力觸及的。等你有了這種能力,那么離你的超級病毒出爐也就不遠了。
木馬的防殺對策
加殼
這個不用說,好處多得沒完。打個比方:把一個人的手接到腳上,把腳接到手上,這樣公安就認不得你啦。
修改特征碼
這個也是在加殼失敗以后對付殺毒軟件的好方法。需要注意的是,一個病毒被定義的特征碼往往不止一條!所以要修改很多對才可以免查殺,這個還得靠運氣。有時修改的特征碼不一定對,如果特征碼很多,那么修改工作將異常痛苦。
花指令
原來被KV殺的,用花指令技術處理過后還是被殺?因為KV的斷點跟蹤會不斷追蹤下去,除非你的程序無限大,否則總有一天,KV會報毒。
Rootkit
超級內核后門。好處很多,具體大家自己體會了。
引用一句經典名言:雖然瑞星的內存殺毒可以殺灰鴿子,可是重啟后灰鴿子還是噗拉噗拉的飛著。
注意:瑞星的內存殺毒其實是進程+DLL監控,只是提取了部分木馬的內存特征碼。
對付KIS 2006,修改免殺相當復雜,不是簡單改動源碼和反匯編可以做到的。需要從源碼處下功夫。