流氓軟件的技術五花八門,任何一項功能都有可能成為流氓技術,就象武器,用好了可以伸張正義,用歪了卻成為罪惡的幫凶。
首先我從win32下的一些流氓著數分析開始:
1.我想做為一個流氓軟件,首先要做到的是實時運行,譬如在注冊表的run下,在boot下增加它的啟動。這應該是比較老的方法,以前 3721好象就是在run下,但是現在一般的人都知道了。
2.作為流氓軟件,已經改變了以前一些木馬的特性了,他沒必要使自己一定要實時啟動了,而是需要自己的時候再啟動,譬如說打開一個浏覽器窗口,這是一般流氓軟件的方法,因為他需要連上網才能有利益可圖,所以浏覽器肯定是流氓軟件必定監控的進程。
3.使用BHO插件,這種技術早先特別流行,這是微軟提供的接口,本意是讓IE浏覽器可以擴充功能。每當一個ie浏覽器啟動的時候,都會調用BHO下必要的插件,流氓軟件就是利用這一點。監控了浏覽器所有事件與信息。
4.還有最笨的辦法就是利用進程快照監控進程,判斷有它自己所監控的進程啟動,就使用atl得到浏覽器指針,從而監控浏覽器所有事件與信息。
5,還有一種方法就是使用spi,這是我在網上看到的。spi是分層協議,當winsock2啟動的時候都會調用它的dll,可以監控所有應用層數據包。從而監控用戶信息,而且能實時啟動。
6.hook方法,hook技術可以所應用太廣泛了,特別是監控方面。所以流氓軟件也不會錯過。首先應用的是api函數hook,譬如windows核心編程裡的apihook類,或者微軟的detous都可以完成,兩者方法其實相同就是修改IDT函數入口地址。api hook鉤住createprocess 就可以監控進程,比進程快照性能更強,可以鉤住spi下的函數可以完成spi下的所有功能。還有消息hook,鼠標消息,鍵盤消息,日子消息等等鉤子,方法實在太多,都可以利用。
上面列舉了一些流氓軟件的使用方法,但是流氓軟件的一個特性是他無法卸載。所以它又要使用下面的方法了因為上面的很多方法都可以刪除注冊表卸載他們,那怎麼辦呢,那就會時時監控,它會在它的進程,或者線程裡監控注冊表項,設置一個循環監控,發現沒了就繼續安裝,增加。我想這應該是很多流氓軟件的技術。
那現在又出現了一個新問題,那就是流氓軟件的進程線程要是結束掉怎麼辦呢???看下面
7.一種方法就是上面的api hook技術,鉤住openprocess ,用自己的函數判斷只要打開的是自己進程就返回正確,使用這種方法,用戶或者一般的軟件就無法結束它的進程了。
8.還有一種是上面象bho,spi根本沒有進程。一般的用戶也無法刪除他
9.還有一種方法是遠程線程,這個技術用的也很普遍,首先是象api hook一樣向目標進程裡申請一段內存空間,然後使用自己映射過去,然後使用CreateRemoteThread創建遠程線程。一般很多流氓軟件或者以前的一些木馬程序,都是把線程注入到系統進程譬如explorer,service等等,使用用戶或者一般的殺毒軟件很難處理或者結束……
10.注冊成服務後,也可以簡單的隱藏進程。還有更可笑的是把自己的進程名跟一些系統進程名譬如lsass相同後,也就無法結束了。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
從我上面列舉的方法已經差不多可以形成好幾款流氓軟件了。但是你別高興太早,因為這些技術只是應用層的,現在出現了一堆驅動層的反流氓軟件工具,譬如超級兔子,完美卸載,木馬克星,雅虎助手,還有現在火熱的360安全衛士。
這些反流氓軟件的方法刪除以上流氓軟件軟件就比較簡單。優先於流氓軟件啟動,截獲所有訪問流氓軟件文件的irp,然後刪除注冊表項,刪除文件。輕松的完成了反流氓任務。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
為了針對這些反流氓軟件,流氓軟件出現了內核層的了。
1.首先是使用文件過濾驅動,保護自己的文件,流氓軟件過濾了create裡對於自己文件的所有fileopen外的所有irp和SetInformation下所有的irp,從而有效的保護了自己的文件。
2.內核級hook技術,可hook住所有公開的或者未公開的內核函數,譬如zwcreatefile,zwSetInformation,也可以有效的保護文件。
3.驅動層下的流氓軟件還使用內核級hook技術,替換Regdeletekey,RegDeleteValueKey,RegSetValueKey從而有效的保護了注冊表4.利用內核級hook技術還有隱藏進程,或者監控進程,重起進程。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
對於上面的流氓軟件的方法一些驅動層下的反流氓軟件工具又有點束手無策了。因為同是驅動程序相互攔截irp等於大家都無法操作,反流氓軟件工具的刪除irp會被攔截,或者刪除函數會被替換。刪除注冊表函數會被替換。雖然驅動的加載有先後,但是無法保證能完全的刪除流氓軟件,從而出現了一些更頂級的反流氓軟件,他直接發刪除文件irp到文件系統。,刪除注冊表也直接發送到文件系統。這類流氓軟件又能有效的完成了反流氓任務,但是根據我了解,這樣的軟件不多。現在火熱的360安全衛士都還只是使用了笨辦法,優先於驅動流氓軟件啟動,創建一個驅動流氓軟件同設備名的設備,,使流氓驅動創建不成功。具我了解他優先於流氓驅動啟動是把自己創建於PNP_TDI這個組下面,就是簡單的ndis就能優先於360啟動。如果前面的組,那360就束手無策了。所以對付這類流氓驅動只能用直接發irp到文件系統。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
流氓軟件又怎麼來防止直接發irp到文件系統的反流氓軟件呢?rootkit,我看很多對於rootkit有誤解,很多都認為hook也是rootkit.呵呵,,rootkit說白了就是嵌入操作系統文件。你不是發irp到文件系統嗎?,可是我把文件系統給改了,不過rootkit根據我的觀察unix或者linex下比較多,在windows下還是比較少的,因為需要使用匯編了,哎太晚了,不寫了,我想如果流氓軟件做到這個技術程度,它也沒必要做流氓了,直接做操作系統得了。