流氓軟件的技術五花八門,任何一項功能都有可能成為流氓技術,就象武器,用好了可以伸張正義,用歪了卻成為罪惡的幫兇。
首先我從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相同后,也就無法結束了。