特洛伊馬(以下簡稱特洛伊馬)英文名叫“特洛伊之家”,名字取自希臘神話中的特洛伊馬。
它是壹種基於遠程控制的黑客工具,具有隱蔽性和非授權性的特點。
所謂隱蔽,就是特洛伊的設計者為了不讓特洛伊被發現,會用各種手段隱藏特洛伊,這樣即使服務器發現感染了特洛伊,也只能望“馬”興嘆,因為無法確定其具體位置。
所謂未授權,是指壹旦控制終端與服務器連接,控制終端將享有服務器的大部分操作權限,包括修改文件、修改註冊表、控制鼠標鍵盤等。,而這些權利不是服務器賦予的,而是被特洛伊馬程序竊取的。
從特洛伊馬的發展來看,基本上可以分為兩個階段。
起初,網絡還處於UNIX平臺時期,特洛伊馬應運而生。當時木馬程序的功能比較簡單,往往是在系統文件中嵌入壹個程序,利用跳轉指令來執行壹些特洛伊木馬的功能。在這個時期,特洛伊馬的設計者和使用者大多是技術人員,他們必須具備相當的網絡和編程知識。
然後隨著WINDOWS平臺的日益普及,出現了壹些基於圖形化操作的特洛伊木馬程序,用戶界面的改進使得用戶無需了解太多專業知識就能熟練操作木馬。相對的特洛伊木馬入侵也頻繁出現,而且由於這段時間木馬的功能日臻完善,對服務器的破壞更大。
所以,特洛伊馬發展到今天,它已經做了它能做的壹切。壹旦被壹匹特洛伊馬控制,妳的電腦將沒有秘密可言。
參考資料:
/365000/ShowPost.aspx
被調查人:萬艷康康-花卉探索11級9-18 12:40
-
DLL特洛伊木馬的秘密
相信經常玩木馬的朋友都會知道壹些木馬的特點,有自己喜歡的木馬。但是,很多朋友還不知道這幾年興起的“DLL木馬”是什麽。什麽是“DLL特洛伊馬”?它和普通的特洛伊馬有什麽區別?
首先,從DLL技術
要理解DLL特洛伊,我們必須知道這個“DLL”是什麽意思,所以讓我們回到幾年前DOS系統流行的時候。那時候寫程序是壹件繁瑣的事情,因為每個程序的代碼都是獨立的。有時,為了實現壹個功能,必須為它編寫大量代碼。後來隨著編程技術的發展,程序員把大量常用的代碼集(常用代碼)放到壹個獨立的文件中,並把這個文件稱為“庫”。編寫程序時,通過將這個庫文件添加到編譯器中,可以使用這個庫中包含的所有函數。靜態鏈接技術讓疲憊的程序員松了壹口氣,壹切看起來都很美好。但事實證明,好事不會長久,因為壹個靜態鏈接就像壹個粗魯的推銷員。不管妳要不要宣傳單,他都會全部交到妳手裏。寫程序只想使用庫文件中包含的圖形效果。正因為如此,妳必須將這個庫文件所攜帶的所有圖形效果添加到程序中,並將其作為花瓶保存。這並不重要,但是這些花瓶擋住了路——靜態鏈接技術讓最終的程序變得很大,因為編譯器還會統計整個庫文件。
隨著時代的發展,靜態鏈接技術由於其固有的缺點已經不能滿足程序員的願望,人們開始尋找更好的方法來解決代碼重復的問題。後來Windows系統出現了,時代的分水嶺終於出現了。Windows系統使用了新的鏈接技術。這種被稱為“動態鏈接”的新技術也使用庫文件。微軟稱它們為“動態鏈接庫”DLL就是這樣得名的。動態鏈接本身和靜態鏈接沒什麽區別,也是把常用代碼寫到壹些獨立的文件裏。但在編譯時,微軟走了彎路,沒有采取在程序中加入庫文件的方法。取而代之的是,它把庫文件做成編譯好的程序文件,並為它們開放了壹個交換數據的接口。程序員編寫程序時,壹旦使用了某個庫文件的函數,系統就會將該庫文件調入內存。連接這個程序所占用的任務進程,然後執行程序要使用的功能函數,並將結果返回給程序顯示,在我們看來,就像程序本身的功能壹樣。完成所需函數後,DLL停止運行,整個調用過程結束。微軟使這些庫文件能夠被多個程序調用,實現完美* * *享受。無論程序員想寫什麽程序,只要在代碼中給相關的DLL添加壹個call語句,就可以使用它的所有功能。最重要的是DLL絕不會讓妳多拿壹個花瓶。它會給妳想要的壹切,也不會給妳不想要的壹切。這樣寫出來的程序就不能再攜帶大量的垃圾了——它絕對不會讓妳把剩菜帶回家,否則妳會被罰款。這是自助餐。
DLL技術的誕生讓編程變得簡單。Windows為我們提供了成千上萬的函數接口,足以滿足大部分程序員的需求。而且Windows系統本身是由成千上萬個DLL文件組成的,這些文件相互支持,組成了壹個強大的Windows系統。如果使用靜態鏈接技術,Windows會有多大?我不敢想。
二、應用程序接口API
上面我們對DLL技術做了壹個大概的分析,其中我提到了“接口”。這是什麽?由於dll不能像靜態庫文件壹樣被塞進程序,如何讓程序知道實現功能的代碼和文件就成了問題。微軟對DLL技術做了壹個標準規範,讓壹個DLL文件像奶酪壹樣開了很多小孔,每個小孔都標有存儲在裏面的函數的名字。程序只要按照標準規範找到相關的洞,就可以得到它想要的美味。這個洞就是“應用編程接口”,每個DLL的接口都不壹樣,盡量減少代碼重復。用Steven的話來說:API就是壹個工具箱,妳根據需要拿出螺絲刀和扳手,用完後再放回去。在Windows中,三個基本DLL文件是kernel32.dll、user32.dll和gdi32.dll。它們同構形成了基本的系統框架。
第三,DLL和特洛伊馬
DLL是編譯後的代碼,除了不能獨立運行,需要程序調用之外,和普通程序沒有太大區別。那麽,DLL和特洛伊馬是什麽關系呢?如果妳學過編程,寫過DLL,妳會發現DLL的代碼和其他程序幾乎壹樣,只是界面和啟動方式不同。只要改變代碼入口,DLL就會變成壹個獨立的程序。當然,DLL文件中沒有程序邏輯。這並不是說DLL=EXE。但是,DLL仍然可以看作是壹個沒有主入口的EXE,每壹個帶有DLL的功能函數都可以看作是壹個程序的幾個功能模塊。DLL特洛伊是將實現特洛伊馬函數的代碼和壹些特殊代碼編寫成壹個DLL文件,以導出相關的API。在別人眼裏這只是壹個普通的DLL,但是這個DLL承載了完整的特洛伊馬函數,這就是DLL特洛伊馬的概念。也許有人會問,既然同樣的代碼可以實現特洛伊馬函數,那妳直接做程序就可以了,何必寫成DLL呢?這是為了隱藏,因為DLL運行時直接掛在調用它的程序的進程中,不會生成其他進程,所以與傳統的EXE特洛伊相比,很難被發現。
第四,DLL的操作
雖然DLL不能自己運行,但是Windows在加載DLL時需要壹個入口函數,就像EXE的main壹樣,否則系統無法引用DLL。因此,根據編寫規範,Windows必須在DLL中找到並執行壹個函數DllMain,作為加載DLL的基礎。這個函數不是作為API導出的,而是壹個內部函數。DllMain函數允許DLL保存在內存中。有些dll沒有DllMain函數,但仍然可以使用。這是因為當Windows找不到DllMain時,它會從其他運行時庫中找到壹個默認的DllMain函數來啟動DLL,以便可以加載它。這並不意味著DLL可以放棄DllMain函數。
五、DLL特洛伊技術分析
到這裏妳可能會想,既然DLL木馬有這麽多好處,以後用DLL寫木馬豈不是很好?這是真的,但是DLL特洛伊並不像有些人認為的那樣容易編寫。要寫壹個可用的特洛伊DLL,妳需要了解更多的知識。
1.特洛伊馬的主體
不要像寫API庫壹樣寫特洛伊馬模塊。這不是WINAPI的開發。DLL特洛伊可以導出幾個輔助函數,但是必須有壹個負責主執行代碼的進程,否則這個DLL只能是壹堆零碎的API函數,更別說工作了。
如果涉及到壹些常用代碼,可以在DLL中為自己的代碼寫壹些內部函數,而不是把所有代碼都作為接口開放,這樣本身就很難調用,更別說發揮作用了。
DLL特洛伊的標準執行入口是DLLMIN,所以妳必須在DLLMIN裏面寫DLL特洛伊的運行代碼,或者指向DLL特洛伊的執行模塊。
2.動態嵌入技術
在Windows中,每個進程都有自己的私有內存空間,不允許其他進程操作這個私有域。但實際上我們還是可以使用各種方法來訪問和操作進程的私有內存,這種方法叫做動態嵌入,是壹種在運行的進程中嵌入自己代碼的技術。動態嵌入有很多種,最常見的有hook、API和遠程線程技術。現在大部分DLL木馬都是利用遠程線程技術,在壹個正常的系統進程中把自己掛掉。事實上,動態嵌入並不少見。羅技的MouseWare驅動掛起每個系統進程-_-
RemoteThread技術是通過在另壹個進程中創建壹個遠程線程來進入該進程的內存地址空間。在DLL木馬的範疇中,這種技術也被稱為“註入”。當載體在註入的進程中創建遠程線程並命令它加載DLL時,特洛伊掛起並執行,並且不生成新的進程。如果妳想停止特洛伊,妳必須停止掛起特洛伊DLL的進程。然而,很多時候我們只能束手無策——這與Explorer.exe有關。您確定要關閉Windows嗎?
3.特洛伊馬創業公司
可能有人會迫不及待的說,把這個DLL加到系統啟動項目裏就行了。答案是否定的。如前所述,DLL不能獨立運行,所以不能在啟動項目中直接啟動。想讓特洛伊馬跑起來,需要壹個EXE使用動態嵌入技術讓DLL追上其他正常進程,讓嵌入式進程調用這個DLL的DllMain函數來模擬特洛伊馬跑起來,最後啟動特洛伊馬的EXE停止運行,特洛伊馬就啟動了。
啟動DLL特洛伊的EXE是壹個重要的角色。它被稱為裝載機。沒有加載程序,DLL特洛伊就是壹堆垃圾。因此,壹個成熟的DLL特洛伊會試圖保護它的加載器不被輕易破壞。還記得勾結的故事嗎?DLL木馬就是爬上狼性加載器的尷尬。
加載器可以多種多樣,Windows的rundll32.exe也被壹些DLL木馬用作加載器。壹般這個特洛伊沒有動態嵌入技術,直接用rundll32進程運行,用rundll32方法(rundll32.exe[dll名稱],[函數][參數])像調用API壹樣引用這個DLL的啟動函數,模擬特洛伊模塊開始執行。即使妳殺了rundll32,特洛伊本身仍然存在。壹個最常見的例子是中國人的真實姓名3721,盡管它不是特洛伊。
註冊表的AppInit _ DLLs鍵也被壹些木馬用來啟動自己,比如求職信病毒。使用註冊表啟動是讓系統執行DllMain來達到啟動特洛伊木馬的目的。因為是內核調入,所以對這個DLL的穩定性要求很大,稍有差錯就會導致系統崩潰,所以這種特洛伊馬很少見到。
壹些更復雜的DLL木馬是由svchost.exe啟動的。這個DLL特洛伊必須寫成NT-Service,它的入口函數是ServiceMain,壹般很少,但是這個特洛伊的隱蔽性好,加載器有保證。
4.其他人
這裏大家應該對DLL木馬有所了解。妳真的想寫壹本嗎?別急,不知道妳有沒有想過。既然DLL木馬這麽好,為什麽到現在能找到的DLL木馬這麽少?現在,讓我給它潑冷水。重要的原因只有壹個:因為DLL特洛伊是隨系統進程運行的,如果寫得不好,比如沒有防止它錯誤運行的代碼或者沒有嚴格規範用戶的輸入,DLL就會出錯崩潰。不要緊張,壹般的EXE都會這樣死,但是DLL的崩潰會導致它掛起的程序遭殃。別忘了它掛在系統進程上,結局是……可怕的。所以寫壹個公開的DLL特洛伊會比壹般的EXE特洛伊在調試上多下功夫,寫多了我也會煩...
六、DLL木馬的發現和查殺
經常檢查啟動項中是否有更多莫名其妙的項目。這是裝載機所在的地方。只要殺了狼,就不能再瘋了。DLL特洛伊馬的本體很難找到,所以需要有壹定的編程知識和分析能力,在Loader裏查DLL的名字,或者從進程裏看有什麽奇怪的DLL被勾上,但是對於初學者來說比較難...總之很難,所以最簡單的方法:殺毒軟件和防火墻(不是萬能的,不要長期服用)。