流氓軟體的技術五花八門,任何一項功能都有可能成為流氓技術,就象武器,用好了可以伸張正義,用歪了卻成為罪惡的幫凶。
首先我從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下還是比較少的,因為需要使用彙編了,哎太晚了,不寫了,我想如果流氓軟體做到這個技術程度,它也沒必要做流氓了,
直接做作業系統得了:)