- 相關(guān)推薦
Windows NT/2000系統(tǒng)下進(jìn)程隱藏的基本技術(shù)和方法
摘要 進(jìn)程的隱藏一直是木馬程序設(shè)計(jì)者不斷探求的重要技術(shù),本文采用遠(yuǎn)程線程技術(shù),通過(guò)動(dòng)態(tài)鏈接庫(kù)方法,較好地解決了這一問(wèn)題,通過(guò)遠(yuǎn)程線程將木馬作為線程隱藏在其他進(jìn)程中,從而達(dá)到隱藏的目的。
關(guān)鍵字進(jìn)程 線程 木馬 動(dòng)態(tài)鏈接庫(kù)
木馬程序(也稱后門程序)是能被控制的運(yùn)行在遠(yuǎn)程主機(jī)上的程序,由于木馬程序是運(yùn)行在遠(yuǎn)程主機(jī)上,所以進(jìn)程的隱藏?zé)o疑是大家關(guān)心的焦點(diǎn)。
本文分析了Windows NT/2000系統(tǒng)下進(jìn)程隱藏的基本技術(shù)和方法,并著重討論運(yùn)用線程嫁接技術(shù)如何實(shí)現(xiàn)Windows NT/2000系統(tǒng)中進(jìn)程的隱藏。
1 基本原理
在WIN95/98中,只需要將進(jìn)程注冊(cè)為系統(tǒng)服務(wù)就能夠從進(jìn)程查看器中隱形,可是這一切在Windows NT/2000中卻完全不同, 無(wú)論木馬從端口、啟動(dòng)文件上如何巧妙地隱藏自己,始終都不能躲過(guò)Windows NT/2000的任務(wù)管理器,Windows NT/2000的任務(wù)管理器均能輕松顯示出木馬進(jìn)程,難道在Windows NT/2000下木馬真的再也無(wú)法隱藏自己的進(jìn)程了?我們知道,在WINDOWS系統(tǒng)下,可執(zhí)行文件主要是Exe和Com文件,這兩種文件在運(yùn)行時(shí)都有一個(gè)共同點(diǎn),會(huì)生成一個(gè)獨(dú)立的進(jìn)程,尋找特定進(jìn)程是我們發(fā)現(xiàn)木馬的方法之一,隨著入侵檢測(cè)軟件的不斷發(fā)展,關(guān)聯(lián)進(jìn)程和SOCKET已經(jīng)成為流行的技術(shù),假設(shè)一個(gè)木馬在運(yùn)行時(shí)被檢測(cè)軟件同時(shí)查出端口和進(jìn)程,我們基本上認(rèn)為這個(gè)木馬的隱藏已經(jīng)完全失敗。在Windows NT/2000下正常情況用戶進(jìn)程對(duì)于系統(tǒng)管理員來(lái)說(shuō)都是可見(jiàn)的,要想做到木馬的進(jìn)程隱藏,有兩個(gè)辦法,第一是讓系統(tǒng)管理員看不見(jiàn)你的進(jìn)程;第二是不使用進(jìn)程。本文以第二種方法為例加以討論,其基本原理是將自已的木馬以線程方式嫁接于遠(yuǎn)程進(jìn)程之中,遠(yuǎn)程進(jìn)程則是合法的用戶程序,這樣用戶管理者看到的只是合法進(jìn)程,而無(wú)法發(fā)現(xiàn)木馬線程的存在,從而達(dá)到隱藏的目的。
2 實(shí)現(xiàn)方法
為了弄清實(shí)現(xiàn)方法,我們必須首先了解Windows系統(tǒng)的另一種"可執(zhí)行文件"----DLL,DLL是Dynamic Link Library(動(dòng)態(tài)鏈接庫(kù))的縮寫,DLL文件是Windows的基礎(chǔ),因?yàn)樗械腁PI函數(shù)都是在DLL中實(shí)現(xiàn)的。DLL文件沒(méi)有程序邏輯,是由多個(gè)功能函數(shù)構(gòu)成,它并不能獨(dú)立運(yùn)行,一般都是由進(jìn)程加載并調(diào)用的。因?yàn)镈LL文件不能獨(dú)立運(yùn)行,所以在進(jìn)程列表中并不會(huì)出現(xiàn)DLL,假設(shè)我們編寫了一個(gè)木馬DLL,并且通過(guò)別的進(jìn)程來(lái)運(yùn)行它,那么無(wú)論是入侵檢測(cè)軟件還是進(jìn)程列表中,都只會(huì)出現(xiàn)那個(gè)進(jìn)程而并不會(huì)出現(xiàn)木馬DLL,如果那個(gè)進(jìn)程是可信進(jìn)程,(例如瀏覽器程序IEXPLORE.EXE,沒(méi)人會(huì)懷疑它是木馬吧?)那么我們編寫的DLL作為那個(gè)進(jìn)程的一部分,也將成為被信賴的一員,也就達(dá)到了隱藏的目的。
運(yùn)行DLL方法有多種,但其中最隱蔽的方法是采用動(dòng)態(tài)嵌入技術(shù),動(dòng)態(tài)嵌入技術(shù)指的是將自己的代碼嵌入正在運(yùn)行的進(jìn)程中的技術(shù)。理論上來(lái)說(shuō),在Windows中的每個(gè)進(jìn)程都有自己的私有內(nèi)存空間,別的進(jìn)程是不允許對(duì)這個(gè)私有空間進(jìn)行操作的,但是實(shí)際上,我們?nèi)匀豢梢岳梅N種方法進(jìn)入并操作進(jìn)程的私有內(nèi)存。動(dòng)態(tài)嵌入技術(shù)有多種如:窗口Hook、掛接API、遠(yuǎn)程線程等,這里介紹一下遠(yuǎn)程線程技術(shù),它只要有基本的進(jìn)線程和動(dòng)態(tài)鏈接庫(kù)的知識(shí)就可以很輕松地完成動(dòng)態(tài)嵌入。
遠(yuǎn)程線程技術(shù)指的是通過(guò)在另一個(gè)進(jìn)程中創(chuàng)建遠(yuǎn)程線程的方法進(jìn)入那個(gè)進(jìn)程的內(nèi)存地址空間。我們知道,在進(jìn)程中,可以通過(guò)CreateThread函數(shù)創(chuàng)建線程,被創(chuàng)建的新線程與主線程(就是進(jìn)程啟動(dòng)時(shí)被同時(shí)自動(dòng)建立的那個(gè)線程)共享地址空間以及其他的資源。但是很少有人知道,通過(guò)CreateRemoteThread也同樣可以在另一個(gè)進(jìn)程內(nèi)創(chuàng)建新線程,被創(chuàng)建的遠(yuǎn)程線程同樣可以共享遠(yuǎn)程進(jìn)程(是遠(yuǎn)程進(jìn)程)的地址空間,所以,實(shí)際上,我們通過(guò)一個(gè)遠(yuǎn)程線程,進(jìn)入了遠(yuǎn)程進(jìn)程的內(nèi)存地址空間,也就擁有了那個(gè)遠(yuǎn)程進(jìn)程相當(dāng)?shù)臋?quán)限。
3 實(shí)施步驟
1) 用Process32Next()函數(shù)找到宿主進(jìn)程,獲取宿主進(jìn)程ID,并用
OpenProcess()函數(shù)打開(kāi)宿主進(jìn)程。
2) 用VirtualAllocEx()函數(shù)分配遠(yuǎn)程進(jìn)程地址空間中的內(nèi)存。
3) 用WriteProcessMemory()函數(shù)將待隱藏的DLL的路徑名。
4) 拷貝到步驟二已經(jīng)分配的內(nèi)存中。
5) 用GetProcAddress()函數(shù)獲取LoadlibraryA()函數(shù)的實(shí)地址(在kernel32.dll中)。
6) 用CreateRemoteThread()函數(shù)在遠(yuǎn)程進(jìn)程中創(chuàng)建一個(gè)線程。
7) 它調(diào)用正確的LoadlibraryA()函數(shù)。
8) 為它傳遞步驟二中分配的內(nèi)存地址。
【W(wǎng)indows NT/系統(tǒng)下進(jìn)程隱藏的基本技術(shù)和方法】相關(guān)文章:
受力分析的基本技巧和方法03-21
面試方法和技術(shù)07-11
會(huì)議座次安排的基本方法和要求07-13
淺析windows7系統(tǒng)下顯卡出現(xiàn)問(wèn)題會(huì)出現(xiàn)的幾個(gè)故障07-02
解決exe進(jìn)程無(wú)法關(guān)閉的情況的方法07-11
基于ZigBee技術(shù)和Android系統(tǒng)智能家居系統(tǒng)的設(shè)計(jì)07-02
化妝的基本方法07-03