寫在前面:很多人的系統經常出現莫名其妙的問題,上網也經常彈出各類奇怪的視窗,各類木馬病毒呈**式的增長,大多是中了木馬或病毒所致,一直想寫一篇比較深入的關於dll插入型木馬病毒的原理,查殺與防範的文章,可惜囿於時間所限,一直也只是打腹稿,未能成型,五一回家終於有了時間,於是就有了這篇文章
深入淺出dll插入型木馬病毒的原理,查殺與防範
在文章開始前,我覺得有必要說明一些名詞,先列表如下
rootkit:可能你對這個名詞並不太陌生,rising的卡卡上網助手的宣傳裡就提到過採用很多anti-rootkit技術,那說明rootkit肯定不是什麼好東西,呵呵,其實這最早是個linux下的名詞,一般是指用來隱藏直接可獲得管理員許可權的後門的技術工具,後來衍生到了win下。
dll:簡單說dll 是乙個包含可由多個程式同時使用的**和資料的庫,所以dll也叫動態鏈結程式庫,當exe程式執行時,會同時呼叫很多dll檔案來實現擴充套件功能。
dll插入:把乙個實現了後門功能的**寫成乙個dll檔案,然後插入到乙個exe檔案當中,使其可以執行,這樣就不需要占用程序,也就沒有相對應的pid號,也就可以在任務管理器中隱藏。我們可以這樣理解,dll好比乙個寄生蟲,而exe則是宿主,把dll注入到exe程式執行的空間中,我們的dll才能活下來,一旦exe程式被終止,dll也隨之死去。
相信看了上面的列表,大家應該對dll插入有了乙個大概的影象,其實dll插入技術也叫「遠端執行緒注入技術」,並不是什麼很新鮮的玩意,屬於rootkit技術中的一種,而rootkit技術大致可分為ring0(核心級別)和ring3(使用者級別)兩類,ring3下有很多技術如:遠端執行緒注入技術,hook api 技術,埠復用技術等等,而要達到ring0級別的話,就要涉及到驅動開發了,如果你想深入了解rootkit,可以去
www.rootkit.com
上去看看。
一:利用系統中的rundll32.exe載入
經常會有人在登錄檔的啟動項中會發現類似鍵值
rundll32.exe c:/temp/***.dll dllmain
rundll32.exe dll的名字 呼叫的函式名
如果我們的dll中編寫了test()這個函式,那麼呼叫方式就是:rundll32.exe c:/dlltest.dll test
這樣dll中的函式就得到執行了。
二:替換系統中的dll檔案
這可以說是上面的公升級版了,它把實現了後門功能的**做成乙個和系統匹配的dll檔案,並把原來的dll檔案改名。遇到應用程式請求原來的dll檔案時, dll後門就啟乙個**的作用,把"引數"傳遞給原來的dll檔案;如果遇到特殊的請求時(比如客戶端),dll後門就開始,啟動並執行了,但是實現卻不太容易,所以沒有流行開來。
三:就是我們要說的dll注入技術了
其意義是將dll檔案嵌入到正在執行的系統程序當中。在windows系統中,每個程序都有自己的私有記憶體空間,但還是有種種方法來進入其程序的私有記憶體空間,來實現動態嵌入式。
有什麼好處呢,首先是實現了隱藏,任務管理器中看不見我們的dll後門,其次windows和linux 不同,不能刪除正在執行的程式,這就是為什麼經常刪東西時候會提示「***正在執行,無法刪除。可能最重要的是可以穿透絕大多數防火牆了,設想防火牆肯定不會阻攔ie,那我們把dll插入ie程序,不就穿透防火牆了嗎。
那麼我們如何實現把dll注入到exe中呢?dll自己又沒長腿,呵呵,我們需要乙個dlllorder.exe,再哪弄?自己寫唄,把**寫到dlllorder.exe中,只要執行dlllorder.exe,相應的dll檔案就可以注入到任何程式中了。有了dlllorder就好辦了,只要能讓系統每次自動啟動dlllorder,後門的生存期就大大增長了,至於如何自啟動,有登錄檔,服務,bho,activex,計畫任務等等,太多了,就不介紹了。
dll木馬的防範與清除
對於第一類dll檔案
下次看到程序中有rundll32.exe,則只要找到它呼叫的dll就可以kill掉隱藏的程式了
對於第三類dll檔案
第一招: 對於dll的隱藏地,temp,system32,windows這三個資料夾是最常見的,如果你哪天發現temp裡某個dll檔案無法刪除,那麼幾乎可以肯定這個檔案有問題了,
安裝好系統和所有的應用程式之後,備份system32目錄下的exe和dll檔案:開啟cmd,來到winnt/system32目錄下,執行:
複製內容到剪貼簿
**:dir *.exe >exefirst.txt dir *.dll >dllfirst.txt
這樣,就會把所有的exe和dll檔案備份到exe.txt和dll.txt檔案中,日後,如發現異常,可以使用相同的命令再次備份exe和dll檔案
複製內容到剪貼簿
**:dir *.exe >exesecond.txt dir *.dll >dllsecond.txt
並使用:
複製內容到剪貼簿
**:fc exefirst.txt exesecond.txt >dllresult.txt fc dllfirst.txt dllsecond.txt >exeresult.txt
其意思為使用fc命令比較兩次的exe檔案和dll檔案,並將比較結果儲存到exedll.txt檔案中。通過這種方法,我們就可以發現多出來的exe和dll檔案,並通過檔案大小,建立時間來判斷是否是dll後門。
第二招:
運用相關工具如,icesword ,ring防火牆,重點檢測ie,exeplorer桌面程序中是否有未知的dll載入檔案,其實我更喜歡用ring防火牆,裡面有未知dll都以紅色顯示,很方便看
第三招:
通過建立時間來查詢,利用win中的搜尋檔案功能,設定時間,查詢可以檔案
第四招:
第五招:
用相關工具檢視埠列表,如果你不想用cmd的話,注意下每個tcp連線後的應用程式路徑,也可以發現可以檔案
第六招:
當我們運用前面幾招找出了可疑檔案,如何刪除呢?如何殺「寄生蟲」? 最簡單的辦法就是讓「宿主」死去 ,結束被插入了的exe程序,類似ie,桌面這類程序可以直接用任務管理器kill,這裡提一下,kill桌面exeplorer程序時,會發現工作列消失了,那麼怎麼刪dll呢,按ctrl+alt+del調出任務管理器,依次點選單欄的 檔案--新建任務,這時候會出現乙個「建立新任務」的視窗,點下方的「瀏覽」找到插入桌面的dll檔案,也就是「寄生蟲」了,呵呵,右鍵刪之,刪了後在「建立新任務」的視窗執行欄中輸入「exeplorer"確定後,我們的宿主就復活了,哈哈,體內的寄生蟲也沒了。
如果插入的是crss.exe等系統核心程序呢?無法殺死宿主咋辦?沒關係,我們還有安全模式啊,開機按f8進入安全模式,找到你確定的可疑檔案,刪之,這個世界終於清淨了。。。。
寫在後面:現實中分析,查殺可疑檔案當然沒有這麼簡單,但只要核心抓住了就可以了,不管它72變,照樣現出原形,最後祝所有人遠離木馬,病毒!打字打的可真累啊,雖然很泛泛,希望對那些對系統不太熟悉的網友能有所幫助~
by willy
2007.5.2
pz伯伯zz自:
Nginx 的深入淺出
1.什麼是nginx nginx是一款高效能的http 伺服器 反向 伺服器及電子郵件 imap pop3 伺服器。由俄羅斯的程式設計師igor sysoev所開發,官方測試nginx能夠支支撐5萬併發鏈結,並且cpu 記憶體等資源消耗卻非常低,執行非常穩定。2.nginx的應用場景 3.nginx...
深入淺出Google ProtoBuf中的編碼規則
在開始本部分的內容之前,首先有必要介紹兩個基本概念,乙個是序列化,乙個是反序列化。這兩個概念的定義在網上搜一下都很多的,但大多都講得比較晦澀,不太好理解,在這裡我會用比較通俗的文本來解釋,盡可能讓讀都朋友們一讀就明白是怎麼回事 序列化 是指將結構化的資料按一定的編碼規範轉成指定格式的過程 反序列化 ...
深入淺出Google ProtoBuf中的編碼規則
在開始本部分的內容之前,首先有必要介紹兩個基本概念,乙個是序列化,乙個是反序列化。這兩個概念的定義在網上搜一下都很多的,但大多都講得比較晦澀,不太好理解,在這裡我會用比較通俗的文本來解釋,盡可能讓讀都朋友們一讀就明白是怎麼回事 序列化 是指將結構化的資料按一定的編碼規範轉成指定格式的過程 反序列化 ...