c語言木馬源代碼教程掃盲進階深度剖析_第1頁
c語言木馬源代碼教程掃盲進階深度剖析_第2頁
c語言木馬源代碼教程掃盲進階深度剖析_第3頁
c語言木馬源代碼教程掃盲進階深度剖析_第4頁
c語言木馬源代碼教程掃盲進階深度剖析_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、 TOC o 1-5 h z ( 1) (3) (7)(12)(18)(24)(30)(35)(41)十.(46)十一 (52)十二(61)一、前言 在進入正文之前呢,容我先說幾句廢話。 在寫此文之前,我曾寫過一篇“高級木馬的自我保護技術(shù)與查殺之策”,承蒙各位朋友的厚愛,被各網(wǎng)站所轉(zhuǎn)載, 亦曾有許多朋友來信求助。由于該文是心血來潮后的隨筆所寫,所以并沒有經(jīng)過深思熟慮,也并沒有脈絡(luò)可循,至使有的朋友能看懂,有的卻 看不懂。而看得懂的呢,亦有很大一部分并不能真正的應(yīng)用文中所提的查殺技巧。故一直有心再寫一篇文章,幫助深受木馬毒害的朋友們了解木馬是什么,又如何查殺。 本文適于下列人員閱讀 : 能熟練使

2、用計算機的人想自己動手解決問題的人錢沒有多到電腦一出問題就扔到電腦修理公司的人適于下列人員參考 :電腦維修人員微機管理人員安全相關(guān)的程序開發(fā)人員本文所要達到的目的是 :讓菜鳥也可以了解系統(tǒng)安全自己來動手查毒殺馬,由求助者變?yōu)閹椭苏摺?在殺毒軟件無能為力的情況下,借助本文的知識讓你仍然能借助工具完成清理查殺的任務(wù)。 讓您真正的明白一些看似神秘的、高深莫測的專用術(shù)語與技術(shù)的內(nèi)幕。讓您了解 Windows 系統(tǒng)的底層知識。本文以手動查殺為主, 輔以必要的工具, 文中用到的工具與測試用的仿木馬小程序都提供了下載地址,供朋友們下 載試用。本文作者為MuseHero,您可在網(wǎng)絡(luò)上任意轉(zhuǎn)載,但請注明出處

3、、作者并保持文章的完整性,謝謝。二、木馬知識掃盲篇 什么是木馬呢?木馬只是一類程序的名字,為實現(xiàn)特殊目的而制作并偷偷植入目的計算機中的程序的統(tǒng)稱。其名字源于古希臘神話木馬屠城記,全名為“特洛伊木馬”有興趣的可以翻看相關(guān)資料,很不錯的一篇故事。 那什么又是程序呢?呵,即然是掃盲篇,我們就不能回避這些讓人頭都大的問題,先從最基本的開始,熟悉計算機 的朋友們可以直接跳到第三章去。我們先了解一些基本的概念:概念一 :計算機。就是我們的電腦了,指的就是一堆硬件,顯示器、主機、鍵盤、鼠標等等,當然了,拆開主機還 有一堆零碎。我們只需要了解其中幾個后面會提到的就行了。CPU計算機的指令處理單元。所有的工作都

4、是由它來做的,同一個CPC同一時間只能處理一條指令,就是說一旦CPU被某一程序占用,那在同一時刻內(nèi)其它程序就肯定是空閑等待狀態(tài)(雙核的可以同時執(zhí)行兩條,以此類推)。內(nèi)存:內(nèi)部存儲器。CPU執(zhí)行的指令都是由內(nèi)存中讀取的,所以,一個程序要運行首先要裝入到內(nèi)存中。 磁盤:外部存儲器。存放文件數(shù)據(jù)的地方。計算機中所有的數(shù)據(jù)平時都是存在這里的,只有在需要執(zhí)行或查看時, 才讀取到內(nèi)存中。但只有硬件,是不能使用的,還需要軟件的配合,我們買電腦時電腦中大都安裝了某一操作系統(tǒng),主流的就是MSWindows系統(tǒng)了(還有其它的操作系統(tǒng)如 Linux等,這里不做討論)。這就是我們需要了解的也是以后要頻繁出現(xiàn)的 第二個

5、概念了“系統(tǒng)”。概念二 :系統(tǒng)。系統(tǒng)其實在大多數(shù)情況下都指的是操作系統(tǒng),也就是幫我們使用與管理硬件的軟件系統(tǒng),當我們按 下機箱電源后,即由主板上的 BIOS檢測硬件、再交由硬盤中的引導(dǎo)程序啟動操作系統(tǒng),然后就出現(xiàn)了我們所熟悉的 Windows主窗口(計算機在啟動時做了些什么,我們會在后面詳細的講解),而以后我們的所有工作,看電影、聽歌曲、 玩游戲、上網(wǎng)瀏覽等等都是在這個窗口中進行。操作系統(tǒng)維持這個窗口的顯示及一些常用功能的完成,而這些功能是 由一系列的程序來實現(xiàn)的,這又引出了我們的第三個概念“程序”概念三 :程序。程序是什么呢?程序就是一組指令執(zhí)行序列。呵,有點專業(yè)了是不?什么又叫指令執(zhí)行序列

6、呢? 舉例來說:我管理著一個工廠,正常情況下我讓工人們按這樣來工作“先去原料倉庫取原料- 進行初步加工 -進行精細加工 - 進行零配件組裝 - 驗收 - 合格則送入成品庫 - 不合格則銷毀”。這就是一個指令執(zhí)行序列,當情況 為正常時,工人們執(zhí)行的是這個序列也就是這個“程序”。而在旺銷的季節(jié)呢,我還有第二個程序“取原料 進行初步加工-組裝-進成品庫”。當情況為供不應(yīng)求時,我就執(zhí)行第二個程序。還有第三個、第四個等等,在 不同的情況下,我讓工人們執(zhí)行不同的程序。計算機程序也是一樣的,跟據(jù)用戶要求的不同,執(zhí)行不同的指令序列,比如您要畫圖,你可能會這么操作“點擊開 始菜單 - 選擇所有程序 - 在所有的

7、程序中選擇附件 - 再在附件中選擇畫圖”,這就是你向操作系統(tǒng)下達的指令。操作 系統(tǒng)得到您的指令后,則會執(zhí)行畫圖程序,也就是實現(xiàn)畫圖目的的一系列指令,而這些畫圖的指令儲存在“”文件中。 操作系統(tǒng)會將中的指令裝入到內(nèi)存中交由CPU開始一條條的執(zhí)行??偨Y(jié)一下:程序是什么呢?說白了就是一個計劃書,里面記載了先做什么后做什么。好的程序是好的計劃,壞的程 序就是壞的計劃,比如:“收集炸藥 - 買雷管- 制成炸彈 -放到張三的床下面 -引爆” ,這就是一個壞計劃,相對于計 算機來說就是一個壞程序。壞程序有破壞作用嗎?也就是說你寫了個爆了張三的計劃書就可以炸了張三嗎?當然不可 以,只有計劃是不行的,還要去執(zhí)行

8、才能真正起到作用。所以,一個木馬程序僅僅是存在于您的計算機中時并不可怕, 可怕的是它執(zhí)行起來。程序執(zhí)行起來是什么呢?那就是我們要說的第四個概念“進程”- 執(zhí)行中的程序。概念四 :進程。程序一旦進入內(nèi)存中開始執(zhí)行,就叫做進程(進程其實就是容納指令與資源的容器)。也就是說, 他已經(jīng)開始工作了,開始買炸藥、制炸彈了,等執(zhí)行到引爆那一條指令時,張三也就完蛋了。所以,檢查可疑進程, 就是查殺木馬的關(guān)鍵環(huán)節(jié),也是重要的手段與方法。找到木馬的進程,并結(jié)束它,在它執(zhí)行到引爆這條指令之前,就 停止它的執(zhí)行,并將它的程序自計算機中刪除掉,就是我們所要達到的目的。說到這里,細心的讀者們可能想到了一個問題,畫圖程序的

9、執(zhí)行,是因為我們向操作系統(tǒng)下達了畫圖的指令,所以 操作系統(tǒng)才調(diào)入畫圖程序開始執(zhí)行畫圖的指令序列。但是木馬程序又是誰給操作系統(tǒng)下達的指令讓木馬的工作計劃得 到執(zhí)行的呢?這就是我們下面要說的第五個概念“自啟動程序”概念五 :自啟動程序。顧名思義,自啟動程序,也就是不用您自己動手它自己就可以啟動起來開始執(zhí)行的程序。這 是些什么程序呢?為什么要允許程序這樣做呢?難道是專為木馬準備的?呵,當然不是。自啟動程序有二大類,一是 系統(tǒng)需要的;二是用戶需要的。系統(tǒng)需要的,是因為有些工作是無須經(jīng)過用戶同意,必須去做的。比如,鼠標驅(qū)動。為了能讓用戶使用鼠標,系統(tǒng) 要自動加載鼠標驅(qū)動程序并執(zhí)行。用戶需要的,一些重復(fù)性

10、工作可能用戶想讓系統(tǒng)自動去做,而不是每天每時的重復(fù)這份工作。比如:用戶可以設(shè)定 多長時間無操作,就自動運行屏幕保護程序以便保護屏幕不被燒壞。這顯然必須要屏幕保護程序能自動的運行,用戶 是不可能每次手動去執(zhí)行這個程序的。而木馬就是利用了這些本來是為系統(tǒng)或用戶提供方便的手段, 來實現(xiàn)自動運行它們自己的目的。 如:木馬用自己來 取代屏幕保護程序,這樣,長時間無操作時,運行的就不再是屏幕保護程序而是木馬了。在系統(tǒng)中有很多地方或方法是可以讓程序自動運行起來的,這個我們在后面將一一講述。 而清掉自啟動項, 讓木馬 程序得不到執(zhí)行,顯然也就成為了我們查殺木馬的重要手段之一。而系統(tǒng)又是如何知道, 哪一個程序應(yīng)

11、該在開機后就自動運行, 無須等用戶來操作呢?朋友們應(yīng)該能猜到, 系統(tǒng)肯定 是把這些需要自動運行的程序都記錄到了某一個地方,記錄到哪里了呢?這就是我們要講的第六個概念“注冊表”概念六 :注冊表。 注冊表是什么呢?是系統(tǒng)記錄信息用的一個數(shù)據(jù)庫, 舉例來說它就像公司檔案柜一樣, 發(fā)工資時, 財務(wù)人員要查閱檔案,以確定哪個員工應(yīng)該發(fā)多少錢。就像系統(tǒng)啟動時查閱注冊表,確定哪個程序應(yīng)該自動啟動起來 一樣。這是一個非常寵大的數(shù)據(jù)中心,系統(tǒng)的關(guān)鍵信息都記錄到那里,與現(xiàn)實中我們的檔案柜一樣,都很重要,一旦損壞 將造成無可挽回的后果,所以微軟公司不建議直接對注冊表進行操作。當然了,木馬的作者通常是不會理會微軟的建

12、 議的。所以,木馬通常都會將自己寫入到注冊表的某個自啟動項中,以便開機時自動運行,而無須經(jīng)過用戶的同意。講到這里,又有一個不容回避的問題出現(xiàn)了,上面我們說了,木馬程序其實就是一個計劃書,而為了執(zhí)行這份計劃 書,木馬需要把自己寫到注冊表中的自啟動程序序列中去。而問題就是,這份計劃書是如何來的呢?如果得不到執(zhí)行, 它又如何將自己寫到注冊表的自啟動程序中去呢?不放到自啟動程序中它就得不到執(zhí)行,而得不到執(zhí)行,它也就無法 起到作用也包括無法將自己寫到注冊表中去暈了,這成了先有雞還是先有蛋的問題了。那么木馬是如何進入我們 的計算機并獲得首次執(zhí)行的呢?這就是我們要講的第七個概念了“侵入”概念七 :侵入。侵入

13、是什么呢?也就是侵略進入嘍,侵略需要被侵略者同意嗎?當然不需要。將木馬程序放入您的 計算機,并讓它得到首次執(zhí)行的過程就是侵入。侵入的方法有很多種, 我們將在后面主動防御一章中詳細講解。 因為, 相信現(xiàn)在朋友們最關(guān)心的并不是如何不讓他 進來,而是我的電腦中現(xiàn)在是不是正在執(zhí)行著木馬程序呢?已經(jīng)執(zhí)行到了哪一步呢?是否馬上就要引爆了呢?我 關(guān)機后下次還能打開不?好,接下來,就讓我們進入下一章,一起來看看,電腦中正在執(zhí)行的木馬程序“木馬進程”。三、木馬的查殺之進程篇1、進程的查看 進程,我們上面說過了,狹義上講就是正在執(zhí)行中的程序。那如何來查看系統(tǒng)中都有哪些程序正在執(zhí)行呢?(先 看下圖 03-1 :)系

14、統(tǒng)自帶了一個“任務(wù)管理器”可以使我們看到系統(tǒng)中當前的進程,在桌面下方的任務(wù)欄按右鍵,選擇“任務(wù)管理 器”或同時按下“ Ctrl Alt Del”三個鍵、或同時按下“ CtrlShift ESC三個鍵,都可以打開任務(wù)管理器程序, 看到上面的窗口??吹缴厦娴膱D時,會不會有點發(fā)昏? 20 個進程,哪個是好的哪個是壞的呢?上面的信息又都是些什么意思呢? 不要著急,讓我來教教你怎么來看這些信息。首先,顯示哪些信息,是可以自由選擇的,看到最上面的菜單沒?就是“文件、選項、查看、關(guān)機、幫助”。依 次選擇“查看” - “選擇列”并勾選里面的相應(yīng)項就可以顯示相應(yīng)的信息。我們關(guān)心的是前五個,即:映像名稱、PID、

15、CPU CPU時間、內(nèi)存使用,下面依次進行介紹。l映像名稱:即進程所對應(yīng)的同名程序名字。其中有兩個是例外,“System”代表的是系統(tǒng),并沒有對應(yīng)的同名程序;“ System Idle Process ”代表的是空閑進程,同樣沒有對應(yīng)的同名程序,它占據(jù)了CPU的空閑時間。我們可以依據(jù)此欄,來找到進程對應(yīng)的程序文件。lPID :英文件縮寫,即進程的 ID ,是一個唯一的數(shù)字,唯一的代表一個進程。 我們可以依據(jù)此欄來區(qū)分進程,尤其是同名的進程,比如:進程。ICPU:即該進程當前消耗 CPU的百分比,如果某個進程正在工作,那么CPU一列的數(shù)值就會是非零,工作量越大,其數(shù)值越高。例外的是“ Syste

16、m Idle Process ”進程,它的數(shù)值越高,說明當前的系統(tǒng)越是空閑,所有進程的 CPU 一欄的數(shù)值相加等于10 0% CPU占用。我們可以依據(jù)此欄來查看,哪些進程正在工作,哪些進程是空閑的。上面我們說過,同一CPU在同一時間只能處理一個工作,所以如果某一進程長時間大量占用CPU那么將會導(dǎo)致其它進程得不到或得到很少的CPU時間來處理,使系統(tǒng)反應(yīng)速度嚴重遲緩。這種情況的出現(xiàn),通常是程序出現(xiàn)了問題,我們就要考慮結(jié)束掉霸占CPU不放的進程,并盡量查明原因。ICPU時間:自運行以來,該進程占用的全部CPU時間,此數(shù)值越大,代表該進程工作時間越長,注意,不是運行時間而是工作時間,如果運行后,進程只

17、是等待,并沒有工作,那么此時間也會很小。例外的仍然是“System IdIeProcess ”進程,它占據(jù)了 CPU全部的空閑時間。我們可以據(jù)此來判斷, 哪些進程在一直的工作, 而這一直工作的進程是不是應(yīng)該工作的正常進程。 比如我們一直在 畫圖,那畫圖程序的進程 CPU時間很長,那就是很正常的;而如果我們在聽音樂,從來沒畫過圖,但這里卻顯示畫圖 程序用了大量的CPU時間,那很可能就是某個黑客或木馬或其它進程正在偷偷的使用畫圖程序呢。I 內(nèi)存使用: 標明了該進程使用的內(nèi)存數(shù)量, 要知道, 系統(tǒng)中的內(nèi)存數(shù)量是有限的, 當某一個進程大量占用內(nèi)存時, 就會導(dǎo)至系統(tǒng)或其它進程可用內(nèi)存量減少,而至使系統(tǒng)運

18、行速度減慢。在某些情況下, 可以依此來找出系統(tǒng)變慢的原因, 并盡量使用占用內(nèi)存小的程序來提高系統(tǒng)的性能。 雖然現(xiàn)在機器 的配置都高了,內(nèi)存也都大了,但在同等條件下,優(yōu)先考慮使用占用資源少的程序也是有必要的。要在這些進程中區(qū)分哪些是系統(tǒng)進程,哪些不是,用任務(wù)管理器顯然很難做到,最好的辦法是借助專業(yè)工具。(看下圖: 03-2 )上圖是用反黑工具狙劍查看進程時的樣子,狙劍程序的下載地址:下載后解壓縮,運行里面的 啟動狙劍,并選擇“進程管理” 就可以打開進程管理頁面,與任務(wù)管理器相比,首先映像文件帶了路徑,使您可以直接定位到程序文件。其次,多了父ID 欄,這個標明了該進程是由誰啟動的,比如:的進程 I

19、D是540,父ID是4 那么,我們就可 以知道,是由進程ID為4的system進程啟動的,而又啟動了與,接著由啟動了與。注意,有的進程并沒有看到父進程,比如: 它的父 ID 是: 1216 但進程中并沒有進程 ID 為 1216 的進程,這是因為系統(tǒng)在初始化時還有一個程 序會自動運行,那就是這個程序負責用戶初始化工作,并負責啟動,而工作完成后,它就退出運行了,所以進程中并 沒有它。最近有個木馬是通過感染來啟動的,由于啟動后就退出了,所以通過查看進程很難發(fā)現(xiàn)問題,這問題我們將 在“自啟動項”一篇中詳細講解。以上就是系統(tǒng)啟動的順序,從 System 開始,依次啟動了幾個進程,正常情況下,上面這幾個

20、進程都是系統(tǒng)關(guān)鍵進 程,結(jié)束它們的運行將導(dǎo)至系統(tǒng)出現(xiàn)問題。有很多朋友對開機以后系統(tǒng)都做了些什么比較感興趣, 而這對系統(tǒng)不能啟動時的故障查明也有幫助, 可以通過判斷 系統(tǒng)停在了哪個環(huán)節(jié)來斷定是哪個部分出了問題,在這里,我就對系統(tǒng)的啟動過程進行一下簡單的說明:系統(tǒng)的啟動過程:1、 當你按下開機鍵時,最早是由主板 BIOS蕊片中的BIOS程序來執(zhí)行硬件檢測任務(wù)的,如果檢查過程中發(fā)現(xiàn)關(guān)鍵 硬件的故障,就會發(fā)出特定的響聲通知用戶,并停止啟動。而BIOS程序是哪里來的呢?這是在主板出廠時固化在芯片 中的一段程序。2、 當硬件沒有問題時,BIOS程序就會讀入硬盤的主引導(dǎo)記錄,將下面的任務(wù)交給主引導(dǎo)記錄代碼去

21、完成。而主引 導(dǎo)記錄又是哪里來的呢?這是在安裝操作系統(tǒng)時對磁盤進行分區(qū)格式化操作時,寫到硬盤中的。如果找不到主引導(dǎo)記 錄,會出錯停止,告訴你這是非法的系統(tǒng)啟動盤。3、 主引導(dǎo)記錄代碼的工作是讀入磁盤主分區(qū)的根目錄,在里面讀出NtIdr 文件,并裝入內(nèi)存,然后將控制權(quán)交給 它。注意看一下,你的硬盤根目錄下是不是有個 NtIdr 文件?這個文件的屬性是隱藏、系統(tǒng),所以查看時要選擇查看 所有,且不隱藏被保護的系統(tǒng)文件才可看到。這個文件是哪里來的?呵,當然是安裝操作系統(tǒng)時拷貝到硬盤上的,下 面提到的文件都是在安裝操作系統(tǒng)時拷上去的。如果沒能找到 NtIdr 文件,則會停止啟動,顯示 NtIdr 沒找到

22、的錯誤 信息。4、Ntldr 又做了些什么呢?它會將系統(tǒng)由原來的16 位實模式切換到 32 位保護模式或 64 位長模式。它的工作是讀取根目錄下的文件,顯然引導(dǎo)菜單,在多操作系統(tǒng)的計算機中,可以看到這個菜單。接著它會清屏,并在 Win2000 下 顯示一個黑白的進度條,在 XP下顯示XP的標志圖同時顯示下面不斷滾動的藍色進度條,提示你它正在加載一些重要 的文件。它在加載什么呢?它首先會加載、,如果這兩個文件找不到會出錯停機,并顯示找不到相應(yīng)文件的信息。接 著它讀入注冊表的 SYSTEM鍵文件,從中找出自動啟動的各類驅(qū)動程序,這是很關(guān)鍵的,因為有些內(nèi)核級的木馬就是在 這時啟動的。每加載一個屏幕上

23、的進度條就滾動一下子。中間如果某個驅(qū)動出問題,也可能會導(dǎo)至系統(tǒng)藍屏崩潰。5、接下來的工作由(或)來進行,這是內(nèi)核程序,它做的工作實在是太多了,這里就不再細說了。它的最后一步 工作就是創(chuàng)建會話管理子系統(tǒng),也就是我們上面說過的,由 System 進程創(chuàng)建的進程。6、 進程負責創(chuàng)建用戶模式環(huán)境,由用戶模式環(huán)境向Windows提供可視的窗口界面。它會運行 BootExecute 中定義的程序,正常情況下是 Autochk ,一個檢查磁盤的程序。但有些殺毒軟件會把自己的 程序加到這里,來實現(xiàn)引導(dǎo)時殺毒,如果您的系統(tǒng)安裝了江民類的殺毒軟件,那么此時就會執(zhí)行它的引導(dǎo)期殺毒程序, 就是進入系統(tǒng)前出現(xiàn)的藍底藍字

24、的病毒掃描窗口。還會執(zhí)行 SessionManager 中的文件刪除、移動操作,也就是調(diào)用API:MoveFileEx 并選擇重啟后移除文件的,就是在這個環(huán)節(jié)執(zhí)行了。當前有很多號稱可以刪除一切文件的安全工具都使用了MoveFileEx 來實現(xiàn)文件的刪除,但是現(xiàn)在我們可以知道了,它的文件刪除是在這個階段執(zhí)行的,而這時驅(qū)動程序已經(jīng)加載了,所以用它們來清除驅(qū)動級的木 馬顯然是不勝任的。創(chuàng)建附加的頁面文件。加載,這個東西又是做什么的呢?這是一個內(nèi)核模式的系統(tǒng)驅(qū)動程序,它負責了窗口的顯示、屏幕的輸入、鼠標鍵 盤和其它設(shè)備的輸入及消息的傳遞等。所以也是由將顯示器的分辯率設(shè)置為默認值的,也就是這個時候,咱們

25、的計算 機屏幕才真正的細致起來,在此以前都是VGA模式,當然了視頻驅(qū)動是上面裝載驅(qū)動程序時就已經(jīng)加載了的,現(xiàn)在只是起到作用而已。再然后呢,就是啟動我們上面說過的那兩個進程了。就是與進程。啟動完這兩個進程后, 就進入了無限的等待, 它在等什么呢?它在等它創(chuàng)建的與, 等著看這兩個進程什么時候死掉, 一旦他們中有死掉的,馬上罷工,讓系統(tǒng)徹底崩潰。(在XP以后Csrss的死亡是由內(nèi)核使系統(tǒng)崩潰的,而不是),所以千萬不要結(jié)束系統(tǒng)進程。是做什么的呢?它負責的工作是創(chuàng)建或刪除進程、線程,控制臺與虛擬DOS機的支持等。它到此就開始工作了,不再參于后面的啟動過程。但是還有很多工作要做呢,我們接下來看看后面的啟動

26、過程。7、是做什么的呢?看它的名字應(yīng)該看出個大概了吧。是的,它是與登錄相關(guān)的,但現(xiàn)在還不到顯示登錄窗口的時候,它還要先啟動及進程,然后讀取注冊表GinaDLL中標明的DLL,由這個DLL來顯示一個登錄對話話,也就是我們在進入系統(tǒng)時輸入用戶名與口令的窗口。為什么要先啟動呢?因為, 這是本地安全認證子系統(tǒng), 負責的就是本機系統(tǒng)的安全, 用戶名與口令的驗證工作是由 它來進行的。還有一個我們上面提到過的進程也是這個時候由來啟動的,是哪一個呢?就是那個,這是在用戶登錄進系統(tǒng)后, 啟動此進程來進行用戶初始化。你也可以自己加一個程序與放在一起,那么,在這個時候會將那一位置的所有程序都啟動起來。當然了,相信你

27、也想到了,這個還有那個GinaDLL也就成了木馬啟動的一個可選位置。8、最后,由啟動的開始加載標明為自啟動的各個服務(wù),及標明為手動的卻是有必要加載的服務(wù)(它所做的工作我 們在后面細講)。9、而呢,它在完成用戶初始化后,就啟動了,并功成身退。10、最后,就成了我們的服務(wù)員,等待在那里靜候我們的指令,聽從我們的吩咐,進行相關(guān)程序的啟動與功能的處 理。接著上面的一篇來講:看完系統(tǒng)的啟動過程后, 我們再回過頭去看那個進程圖, 是不是明白了很多呢?除掉系統(tǒng)啟動環(huán)節(jié)中啟動的進程外, 我們再看其它的進程,注意看一下兒,剩余的進程是不是都是由或中的一個啟動的。是系統(tǒng)的 Shell 程序,響應(yīng)用戶的請求,并執(zhí)行

28、對應(yīng)的程序的工作就是由它來完成的,比如上面我們說過的,您想 畫圖時,將畫圖程序啟動起來的就是這個程序。你想上網(wǎng)時,將瀏覽器啟動起來的也是它。當然了,一些用戶的自動 任務(wù)也是由它來完成啟動過程的。(這些我們將在下面的自啟動程序一章中詳細講解)是系統(tǒng)的服務(wù)控制管理器,由它啟動的進程稱為“服務(wù)”,是一組特殊的進程。此類進程是開機自動運行的,不依 賴于用戶的交互,說白了就是不用您管,它自己就會運行并且開始自己的工作,工作過程也無須您的干預(yù)。說到這里,您可能會想,這不就是木馬所需要的么?不錯,有很多木馬是以服務(wù)進程的形式存在的。那我們可以管 理這些服務(wù)嗎?答案是肯定的,我們的計算機,我們當然有權(quán)力管理了

29、??聪旅娴膱D03-3 :在桌面上“我的電腦”上面按右鍵,選擇“管理”就可以打開如上圖所示的窗口。依次選擇:服務(wù)與應(yīng)用程序 服務(wù) 就可以看到上圖右側(cè)的服務(wù)列表。最左側(cè)的一列是服務(wù)的名稱,需要注意的是這里列出的并非是對應(yīng)的程序文件的名稱,而僅僅是服務(wù)本身的名稱。 那我們又怎么知道這個服務(wù)對應(yīng)的是哪個程序文件呢?如果我們想停止這個服務(wù),并刪除對應(yīng)的程序文件,我們應(yīng)該 怎么做呢?再看下圖 03-4 : 在某一個服務(wù)上面按鼠標右鍵,選擇“屬性”,就可以打開此服務(wù)對應(yīng)的屬性頁面,如上圖所示。在這里,我們可 以看到一些有用的信息,并對此服務(wù)進行啟動、停止、禁用等操作。最上面的是服務(wù)名稱,第二列是顯示名稱,第

30、三列是關(guān)于服務(wù)的描述,也就是這個服務(wù)是做什么用的。當然了, 我們不能迷信這里的描述,因為木馬可以自行設(shè)定這個描述。再下面就是可執(zhí)行文件的路徑,也就是對應(yīng)的進程與程 序文件。這時我們再返回頭去看 03-2那個圖,看一看進程PID為968的進程是不是就是這個 “-knetsvcs ” 進程呢?這時再注意一下,又會發(fā)現(xiàn)問題,首先,在03-2圖中,啟動的服務(wù)一共是7個,而在圖 03-03中,已經(jīng)啟動的服務(wù)卻有很多,遠不止7個,再挨個兒的查看每個服務(wù)的屬性,又會發(fā)現(xiàn),有很多服務(wù)名稱雖然不同,但對應(yīng)的可執(zhí)行 文件路徑(進程)都是一樣的,都是“- knetsvcs ”進程,這又是咋回事呢?這里我們要解釋一下

31、這個進程了,這是 一個特殊的進程。從圖 03-1 中我們可以看到名字為“”進程一共是五個,我們沒辦法區(qū)分它們有什么不同。而在圖03-2 中,我們再查看這五個進程,卻可以從參數(shù)上來區(qū)分它們了,雖然進程名字相同,但它們的參數(shù)卻各不相同。對了,這就是區(qū) 分他們的方法了,是一個服務(wù)的宿主程序或者叫容器程序,它的里面是一組服務(wù),而參數(shù)就標明了這一組服務(wù)的類型。 如果英文不是太差,那么從它的參數(shù)上就可以看明白這一組服務(wù)是做什么用的了。當然了, 我們是來查殺木馬的, 當然不會滿足于僅僅知道這是一組服務(wù), 這一組中是不是會藏著一個木馬呢?所以, 我們還要知道這一組服務(wù)都分別是哪一個,怎么來查看呢?再來看下圖:

32、03-5上面的是什么呢?上面的就是我們在第一章中所提到的 “注冊表” 。依次選擇 - 開始- 運行- 輸入“” 確定。就可以調(diào)用系統(tǒng)自帶的注冊表編輯器來打開注冊表,再依次展開:HKEY_LOCAL_MACHINE-SYSTEM-CurrentControlSet-Services ,還記得上面 03-4 圖中的服務(wù)名稱么?對了就是那 個“ wuauserv ,在Services鍵下打開如上圖所示的“ wuauserv ”再展開,選中其下面的“ Parmeters ,看右邊的 窗口中,是不是找到了此服務(wù)所對應(yīng)的程序文件了?就是那個嘍。每一個中的服務(wù)都可以通過這種方式找到其對應(yīng)的程序文件。 看到這

33、里,朋友們是不是頭都大了?這么麻煩啊?查個進程居然這么麻煩,而且就算找到了,又怎么能知道是正常的程序還是木馬呢?呵,不要著急,也不要怕。上面不是在教給你知識么,而且在當年,沒有專業(yè)工具之前,我們可都是這么一個個 來找的。當然了,現(xiàn)在有了各種專業(yè)工具,的確是沒必要非手動去找了。在狙劍的進程管理列表中(圖 03-2),選中,然后按鼠標右鍵 - 選擇“查看模塊”,就可以得到上圖中的列表, 注意被藍條選中的那個是不是就是費半天勁所找到的那個:呢?找是找到了,可如何判斷這是不是系統(tǒng)的服務(wù)模塊呢?這一點微軟為我們想的很周到,他將大多數(shù)的系統(tǒng)文件都 進行了數(shù)字簽名,我們只需要檢查一下這個文件有沒有系統(tǒng)文件的

34、數(shù)字簽名,就可以準確的判斷,這是不是一個系統(tǒng) 文件。如何檢查呢?在列表中按右鍵,選擇“隱蕆微軟簽名項”就可以將所有系統(tǒng)文件隱藏起來,剩下的就是非系統(tǒng)的 文件啦,簡單不?數(shù)字簽名驗證還可以應(yīng)用在對進程的判斷中,在圖 03-2 中,列表中共有 19 個進程,這些個進程中哪些是系統(tǒng)的 哪些又不是呢?我們?nèi)匀豢梢岳脭?shù)字簽名來判斷,在列表中按右鍵,選擇“隱蕆微軟簽名項”就可以將所有系統(tǒng)進 程藏起來,剩下的就是非系統(tǒng)的進程。上面也說過了, 一共有5個進程,那我們是不是需要在每個進程上都重復(fù)一遍,查看模塊-隱藏微軟簽名項的過程呢?答案是不需要,在圖 03-2 的進程列表中,按右鍵,里面的一個“掃描無微軟簽

35、名模塊”的選項,點擊它一下, 就可以列出所有進程中所有沒有簽名的模塊了。還有一個問題是,如果手頭沒有工具怎么辦呢?就沒有辦法查看這些進程中的模塊了嗎?有的,仍然有辦法,看 下圖 03-7 :依次選擇“開始” - “所有程序” - “附件” - “系統(tǒng)工具” - “系統(tǒng)信息”就可以打開上面的窗口。在窗口 中選擇“加載的模塊”就可以看到左邊窗口中的信息,看到?jīng)]?我們找的那個wuauserv 就在里面。這里面列出了所有進程加載的所有模塊,可以參考,但也僅僅是參考,更多的情況仍然盡量的使用專業(yè)工具來檢查,會更方便更準確 一些。 O另外,有很多木馬是可以隱藏的,對于這一類木馬,用系統(tǒng)自帶的工具是檢查不出

36、的。注意看上面的幾張圖,發(fā)現(xiàn) 沒有,圖 03-2 比圖 03-1 中的進程多出來了一個這就是下面我們要講的“進程的隱藏了”。也許有朋友會說,是不是 取圖時這個進程已經(jīng)關(guān)掉了呢?呵,沒關(guān)系,我這里提供了程序的樣本,您可以下載后運行一下試試,看是否可以在 任務(wù)管理器的進程列表中看到它。下載地址: 里面還附了隱藏進程的源代碼,懂編程的朋友們可以參考一下,看一看隱藏進程是如何的簡單。2、進程的隱藏與自我保護我們通過上面的講解已經(jīng)知道,進程是一個程序運行所必須的,因此檢查進程也就成了查殺木馬的關(guān)鍵環(huán)節(jié),我 們知道這一點,木馬的作者們當然更知道,所以,如何隱藏自己的進程,就成了養(yǎng)馬人處心積慮要實現(xiàn)的。說到

37、這里,有懂的朋友們可能要笑了,心里更可能在說“連無進程木馬都不知道,還好意思在這里顯擺呢”。一個程序可以無進程么?可以嗎?真的可以嗎?我可以很負責任的告訴您,在Windows系統(tǒng)下一個程序一定、確定以及肯定的會有一個進程,沒有進程是不可能的。那所謂的“無進程木馬”又是怎么回事兒呢?第一種無進程木馬是 DLL 注入型木馬:什么是DLL呢? DLL是動態(tài)鏈接庫,當某一進程需要實現(xiàn)某一功能時,此功能可能是放在某一動態(tài)鏈接庫文件中 的,所以,當進程需要使用時就要將動態(tài)庫文件加載到自己的進程中。舉例來說,如果進程就是一個工廠,那么,調(diào) 用DLL就是將工廠的某一部分工作外包給了DLL去做,而工作地點就在自

38、己的工廠內(nèi)。明白了嗎?進程就是工作的廠地,即使外包出去了,也是需要地方干活的。“加載到自己的進程中”這一句是關(guān)鍵啊,并不是沒有進程,而是用了 其它程序的進程。像我們上面找了半天的那個服務(wù):,注意一下文件的擴展名,不就是 DLL么,這就是一個典型的 DLL文件,如果這是一個木馬文件,那么,這就是一個典型的無進程木馬,因為他沒有自己的進程, 我們在進程列表中看到的是的進程。這個DLL是利用服務(wù)來加載的,在注冊表中還有很多位置可以讓一個DLL加載到其它進程中,這在后面自啟動程序一節(jié)中我們要講解。但是,通過注冊表來加載是可以的,但卻不是唯一的,還可以通過另一個進程,來打開現(xiàn)有的進程,來將DLL注入到被

39、打開的正常進程中,然后,執(zhí)行注入的進程退出,這樣,在進程列表中仍然看不到木馬的進程。第二種無進程木馬是線程注入型的木馬。什么是線程呢?上面說了程序就像一個工廠工人工作的流程表,而進程就是將流程真正的運行起來,正式的開始 動手取原料 - 加工- 組裝- 驗收等等工作。但是,我們需要明白的一點是,工人們是可以分成小組后同時進行幾個 環(huán)節(jié)的,第一組工人負責取原料、第二組工廠人負責加工、而第三組工人負責組裝、第四組這樣,可以分工合作 同時進行形成流水線。而這工廠里的一組一組工人,相對于進程與線程而言,就是一個進程中的一個個線程。線程注 入又是咋回事呢?線程注入,就是木馬程序?qū)⒁粋€惡意線程放到了正常進程

40、的線程序列中去執(zhí)行,就像在工廠中多增 加了一組自己的工人負責制造炸彈,這一組工人與其它的正常的幾組工人沒有什么關(guān)系,但卻借用了人家的工廠去從 事著非法的勾檔。線程注入與DLL注入的區(qū)別是,線程注入只是增加了一組工人,這組工人是在以工廠的名義在工作,對外的名義也是工廠的名字,出了問題是由工廠負責的。而DLL注入呢,是外包,可能會增加一組工人也可能會增加多組,是以DLL自己的名義在工廠內(nèi)工作的,出了問題是由DLL來負責的。當然了,如果問題大了,工廠也會受牽連的??聪旅娴膱D 03-8 :在狙劍的進程列表中,選中一個進程按鼠標右鍵,選擇“查看線程”就可以查看此進程中的每一個線程,也就是查 看每組工人的

41、情況,還可以對某個線程執(zhí)行暫停運行、結(jié)束運行等操作。我們注意看上面的線程列表,最后一列,顯示了一些DLL的名字,還有一個是,就是進程名字,我查看的就是進程的線程列表。明白我上面說的區(qū)別了么? ntdll 有三組線程在工作,那是 ntdll 在完成外包業(yè)務(wù)所需要的自己的三組工人;有一 組,那是工廠自己的工人,如果存在線程注入,那么就會多出一個線程。但是需要注意的是,有多個并不代表就一定 有線程注入,因為一個工廠也可以同時存在多條流水線。但只有一個那么通常情況下就是沒有線程注入,因為一個進 程肯定會有至少一個線程的存在,也就是說,一個工廠必定至少要有一組工人,皮包公司在Windows世界是不允許的

42、。了解了什么是DLL注入型木馬、什么是線程注入型木馬后,查殺他們顯然就很容易了。DLL注入型的,查起來很簡單,用上面說的方法“查看某一進程的模塊列表-再隱藏無微軟簽名的項”,就可以查出單個進程中被注入的模塊;如果在全系統(tǒng)范圍內(nèi)查找,則使用“搜索無微軟簽名的模塊”就可以將注入到其它進 程中的模塊找出來,而大多數(shù)工具都提供了“卸載模塊”的功能,卸載后就可以刪除了,或直接用“卸載后刪除”的 功能,但有一點是需要注意的,如果該木馬使用了防卸載的技術(shù),那么卸載此模塊時就會發(fā)生異常,對此也不必擔心, 我們還有其它方法清掉它,比如:清除其自啟動項,不讓他有注入的機會;或直接刪除其磁盤文件等。相比較起來,查殺

43、線程注入型的木馬,就比較困難了,我們上面說了,線程注入的沒有自己的文件,只是一段注入 的代碼。也就是說他只是混入工廠內(nèi)的一組工人,并沒有自己的工廠也沒有自己招牌,想把他與正常的工人區(qū)分開, 是很困難的。這里提供了一個線程注入的測試程序:先試一試看看效果, 運行后,會打開一個窗口, 但你卻在進程列表中找不到有新增加的進程, 那窗口是如何來的呢? 這就是由注入到中的線程創(chuàng)建的。這時你再查看的線程列表,會發(fā)現(xiàn)多出來了一個線程,而線程的“模塊”那一列(圖 03-8 )標的名字就是,這時線程列表中已經(jīng)有兩個名字為的線程了,但哪一個是好的,哪一個是后來注入的呢?通常 情況下看“基址”那一列(圖 03-8

44、),基址數(shù)值較大的那一個一般是起動起來較晚的,就是后來加入的了,選中那一 個線程選擇“結(jié)束線程”,發(fā)生了什么?是不是那個窗口被關(guān)閉了?(注意:如果是用狙劍查看的,那么在線程注入 后,查看新線程時,要重新刷新進程列表,不然會發(fā)現(xiàn)不了新注入的線程)當然了,上面只是做個試驗,讓朋友們親身體會一下線程注入是怎么一回事兒。真正查殺起線程注入型的木馬來, 用上面的方法顯然是不行的,首先,我們不知道他注入到了哪一個進程中。其次,即使一個進程中有多個以進程名為 名字的線程我們也無法確定那多出來的線程就是木馬線程。所以,我們?nèi)匀灰獜淖詥禹椚胧謥斫咕€程注入。第三種無進程木馬是純驅(qū)動型木馬什么是驅(qū)動型木馬呢?就

45、是全部功能放到了驅(qū)動程序中去完成(當然了,純驅(qū)動型的并不多見, 大多驅(qū)動型木馬都是配了一個程序。)什么又叫驅(qū)動程序呢?驅(qū)動程序顧名思義就是驅(qū)使設(shè)備動起來的程序。A呵,可能不準確,但卻很容易理解。其作用是讓特殊的硬件和 Windows操作系統(tǒng)可以交換數(shù)據(jù),比如我們按下了鍵盤的A鍵,那鍵盤驅(qū)動就要告訴 Windows系統(tǒng)“這家伙按下了 A鍵,你看咋辦吧”,它只是告訴一聲,后面的工作就由系統(tǒng)來處理了,系統(tǒng)會根據(jù)不同的情況 進行不同的處理,如果你是在打字,那就把A這個字符顯示在你的輸入頁面中,如果你用的是五筆,顯然直接顯示個A是不行的,Windows系統(tǒng)就會把你輸入 A的這個信息轉(zhuǎn)給了輸入法程序最終實

46、現(xiàn)你按A的目的。但驅(qū)動又怎么會與木馬有了關(guān)系呢?這就要從頭說起了, 話說當年木馬與驅(qū)動本來是分處于兩個天地, 互不相干的。 但隨著殺毒軟件、安全工具等木馬殺手對木馬的圍追堵截越來越是兇狠,木馬終于感到有點窮途未路了,在最后關(guān)頭, 它盯上了驅(qū)動程序!為什么盯上了驅(qū)動呢?因為驅(qū)動程序由于其特殊性,使得它在系統(tǒng)中有著超越一切的權(quán)力,而且 有著優(yōu)先加載執(zhí)行的優(yōu)勢,它是做為操作系統(tǒng)的一部分來運行的。詳細情況涉及到系統(tǒng)權(quán)限的劃分與優(yōu)先級設(shè)定,有 興趣的可以查閱相關(guān)資料,這里只要明白一點就行“系統(tǒng)的權(quán)限分為兩種R0與R3, 般的程序全部為 R3權(quán)限,其行為受到了很多限制;而操作系統(tǒng)與驅(qū)動則為R0權(quán)限,擁有對

47、整個計算機的全部權(quán)力,可以為所欲為”。舉例來說,殺毒軟件就像一個公司的人力部,對員工的行為進行考核,發(fā)現(xiàn)不好的就給予懲罰或辭退。如果木馬總 是隱藏在員工群里,那么就會受到嚴格的檢查與監(jiān)管,一旦被查出有問題就會被立即辭退。而操作系統(tǒng)就是公司的董 事會或股東大會,驅(qū)動程序是董事或股東,有著超出人力部門監(jiān)管的權(quán)力。為了逃脫追殺,開始有木馬以驅(qū)動程序的身份出現(xiàn),當然了,木馬這個驅(qū)動是沒有硬件設(shè)備的,呵,如果中一個木 馬它就附帶一個設(shè)備,那么,哪怕它只是給一支鼠標,我也會沖天大喊“木馬們,都到我這里來吧”。所以它們有一 個好聽且很容易聽明白的名字“虛擬設(shè)備驅(qū)動程序”。當木馬成為公司的董事的時候, 身為人

48、力部門的安防程序開始感到郁悶, 明明發(fā)現(xiàn)那家伙就有問題, 但偏偏沒權(quán)力 辭退它。于是,殺毒軟件開始謀求同樣的身份,于是殺毒軟件也開始掛驅(qū)動,使其有了董事的身份來兼人力監(jiān)管,于 是,新一輪的斗爭開始了。而這一輪的斗爭更是殘酷,本來在員工層的斗爭轉(zhuǎn)到了高層,本來斗爭的結(jié)果也就是員工 被辭退,還不至于傷筋動骨涉及公司根本,但現(xiàn)在卻是一不小心就讓公司整個解體了。對應(yīng)于我們這些可憐的用戶來 說,殺軟與木馬的斗爭,一個不好惹來的就是藍屏死機、系統(tǒng)崩潰。OK 了解了驅(qū)動程序后,我們就要回到正題來了, 我們?nèi)绾沃老到y(tǒng)加載了哪些驅(qū)動呢?又如何知道哪些驅(qū)動是正常的系統(tǒng)驅(qū)動,哪些是木馬的驅(qū)動呢?看下圖 03-9

49、:在桌面我的電腦圖標上按右鍵,依次選擇“屬性 - 硬件 - 設(shè)備管理器”就可以打開上面的窗口了,再勾選上“查 看 顯示隱藏的設(shè)備”就可以看到“非即插即用驅(qū)動程序”。除了非即插即用外,其它的同級項目都是您機器上的硬件及它們的信息、資源、驅(qū)動等,他們是根正苗紅的正經(jīng)設(shè) 備。由于這些都與硬件有關(guān),所以,木馬動它們的可能性很小,必竟木馬也不想你的機器崩潰啊。因此,大多數(shù)木馬 驅(qū)動都隱藏在“非即插即用驅(qū)動程序”下面,而這里面的則是那些虛擬設(shè)備了(注:非即插即用驅(qū)動程序并非就是虛 擬設(shè)備驅(qū)動程序,這涉及到以前老版系統(tǒng)中的一些個問題,這里不再細說,您只需要明白,在當前的情況下,這里面 大多都是虛擬設(shè)備驅(qū)動程

50、序就可以了。)選中某一個項點鼠標右鍵,再選屬性,得到下圖 03-10 :一看到這張圖, 你最感興趣的一定是 “停止” 這個按鈕, 但我不得不很遺憾的告訴您 “是否能停止驅(qū)動程序的運行, 還要看這個驅(qū)動程序是否愿意停止運行”,是不是失望了?呵,應(yīng)該是意料中的,如果木馬可以這么輕易的停掉,它 們還混什么吶?從這里不要奢望得到額外收獲,我們只需要了解一點就夠了,這個驅(qū)動的狀態(tài)是“已經(jīng)啟動”。接下來要看的是“驅(qū)動程序詳細信息”這一欄。點一下,得到下面的這張圖03-11 :看到?jīng)]?這里面的就是驅(qū)動程序?qū)?yīng)的文件了,至于下面的提供商、版權(quán)什么的,參考一下也就得了,如果木馬愿 意,它可以說它是“天宮”出品,

51、版權(quán)屬于“玉皇大帝”,那這里會絲毫不打折扣的給它顯示出來,你說能信嗎?按上面說的方法,你可以查看所有系統(tǒng)中加載的驅(qū)動程序,但很顯然,這么做的確是很麻煩,那有沒有省事點的方 法呢?有,我們看下圖 03-12:看到上面這張圖是不是有點眼熟?對了, 就是上面我們查找模塊時用到的圖, 打開方式同上, 向上翻就可以看到了。 藍條選中的那個,不就是與圖 03-11 中顯示的是一個么。這里面列出了所有的驅(qū)動程序,不用一個一個找了。到這里是不是有朋友有點火大了?明明有簡單的法子,卻帶著我們繞了這么大一個圈子。呵,上圖中的系統(tǒng)信息, 其實也就是系統(tǒng)自帶的一個工具,屬于專業(yè)工具范圍內(nèi)的,且并不是太好使,木馬想在這

52、里隱藏信息很容易,而且禁 止這個的運行也很簡單。我們需要多了解幾個法了,以備不時之需,另外,我們需要的是盡量多的學一些知識,這才 是根本,了解了原理、懂得了知識,才能真正的成為高手,高手絕非只會使用工具。說到工具,那我們再看看專業(yè)工具對驅(qū)動程序的顯示:打開狙劍 - 選擇基本功能中的“內(nèi)核模塊”,看到?jīng)]?不就在這里么。這么多,又如何來區(qū)分哪個是正常的哪個是 可疑的呢?很簡單,方法與我們篩選進程是一樣的,按右鍵 - 選擇“隱藏微軟簽名項”,剩下的,就是非系統(tǒng)的驅(qū)動 了。這里同樣提供了“停止運行”、“卸載模塊”等功能,但我還得遺憾的告訴大家,卸載它也得它自己愿意才行,但 想來木馬是不會愿意被卸載吧,

53、那我們就沒辦法了么?有,方法仍然與上面的相同,從自啟動程序入手,禁止它的加 載;或強制刪除它的文件。那驅(qū)動級木馬是不是就是真正的無進程呢?進程列表中找不到任何一個驅(qū)動程序的進程,而它也不像模塊與線程一樣,在其它進程內(nèi)能夠找到,是不是真的可以無進程運行呢?當然不是,我前面已經(jīng)說了,一個程序的運行,一定、 確定以及肯定的會依托一個進程,那這些驅(qū)動在哪個進程里呢?那就是System 進程,它們是做為系統(tǒng)的一部分來運行的。第四種無進程木馬就是利用技術(shù)手段隱藏進程的木馬 這顯然就不屬于無進程了,上面說的三種,的確是沒有自己的進程,只是利用了其它的進程。而利用技術(shù)手段隱藏 進程的木馬,則是有自己的進程,但

54、是如果你破解不了他的隱藏技術(shù),那你就看不到它的進程。就像上面我們拿出來 的那個一樣,在任務(wù)管理器中看不到它的進程,而在狙劍中卻能看到,這就是隱藏與破解隱藏后的結(jié)果了。進程是如何隱藏的呢?這無可避免的會涉及到一些技術(shù)問題,下面我們盡量簡單明了的說一說,詳細的實現(xiàn)細節(jié), 請參閱相關(guān)資料。在這里,我所想達到的目的,并非是讓您也同樣寫出一個能隱藏自身的木馬,而是讓您明白,什么 樣的手段可以隱藏木馬的進程,木馬又為什么會隱藏,而想破解這種解藏將它揪出來,又需要什么樣的技術(shù),好有針 對性的選擇一些專業(yè)工具。同時,需要注意的是,隱藏進程的技術(shù)同樣適用于隱藏DLL模塊程序、隱藏驅(qū)動程序,下面為了描述方便,統(tǒng)一

55、說為進程。Windows系統(tǒng)給我們的開發(fā)人員提供了幾種列出系統(tǒng)中所有的進程、模塊、與驅(qū)動程序的方法,最常見的也是最常 用的方法就是調(diào)用系統(tǒng) API:CreateToolHelp32Snapshot 、 EnumProcess、 EnumProcessModules 等,如果您不是開發(fā)人 員,您不用關(guān)心這幾個是什么東西,只需要明白,他們是獲取進程列表的第一層手段,我們調(diào)用這幾個其實就是在告 訴系統(tǒng),我們需要進程列表,然后系統(tǒng)就會將列表返回給我們。而這幾個 API 在接到請求后又做了什么呢?他們會調(diào)用 ZwQuerySystemInformation , ZwQuerySystemInformat

56、ion 會調(diào)用KiSystemService 切入內(nèi)核進入 R0權(quán)限,然后自SSDT表中查取得NtQuerySystemlnformation的地址,并調(diào)用其指向的實際代碼,而 NtQuerySystemInformation 的作用則是自系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)中取相應(yīng)的數(shù)據(jù),再順原路返回去。在中間任何一個環(huán)節(jié)進行攔截都可以實現(xiàn)隱藏進程的目的,這種攔截有一個名字叫做“HOOK,在切入內(nèi)核進入 R0權(quán)限前進行HOOK稱為應(yīng)用層HOOK而在之后進行 HOOI則是內(nèi)核HOOK后者需要用驅(qū)動才能實現(xiàn)了。什么是HOOK什么是SSDT我們來舉例說明:Windows操作系統(tǒng)就像一個為我們管理電腦的服務(wù)公司,而他的工

57、作機制是逐級上報,各負其責的,他派了一個服 務(wù)人員時刻的跟著我們,看我們都有什么要求。當我們想查看系統(tǒng)中都有什么進程時, 我們會告訴服務(wù)員, 我們想了解當前都有哪些進程, 那么服務(wù)員就會把我們 的要求報上去,報給誰呢?他要先知道哪個部門負責哪個工作才行,SSDT表就是做這個的,SSDT表就像是一個路標,指明了什么樣的工作應(yīng)該由哪一個部門負責處理。通過查表得知負責的部門后,工作就被移交到了那個部門,工作完 成后,部門會把工作結(jié)果交回給服務(wù)員,服務(wù)員再交給我們,而我們也就得到我們想要的結(jié)果了。應(yīng)用層HOOK,就像是服務(wù)員被木馬偷偷的替換了,當我們提出要求時呢,他會檢查是否對他有害,或?qū)λ?害的

58、信息去掉,比如我們想查看進程,那他在將結(jié)果交給我們時,卻把木馬的進程自結(jié)果中抹去了,這樣,我們自然 是看不到木馬進程了。而最常見的內(nèi)核 HOOK則是HOOK SSDT上面說了 SSDT就是一張表,標明了什么工作應(yīng)該由什么部門負責。而 SSDT HOO也就是木馬將表上的內(nèi)容給改了,本來交給A部門負責的工作被改成了交給由木馬負責,這樣,服務(wù)員在上報我們的請求時,一查表發(fā)現(xiàn)查看進程的工作是由木馬負責的,他就把這請求交給木馬了,而木馬呢?他可是知道 表中原來的內(nèi)容是什么的呀,他只是對請求進行一下過濾,發(fā)現(xiàn)沒有對自己有害的,就直接轉(zhuǎn)交給原部門了,對自己 有害的,自然也就視情況濾掉或涂改了。我們先看看SS

59、DT到底是什么樣子的,看下圖(04-14 ):依次選擇狙劍-擴展功能-SSDT檢查-篩選可疑項,就可以看到上圖,那就是一個SSDT表,從左到右依次是序號、當前地址、所在模塊、HOO啖型、原地址、函數(shù)名。上面都是狙劍自己對 SSDT的HOOK當前安全軟件很多也用到了SSDT-HOO技術(shù)來實現(xiàn)對系統(tǒng)的安全防護。例如上面的第11號函數(shù),所在模塊是“狙劍”,HOOK類型是“ HOOK,函數(shù)是“ NtAdjustPrivilegesToken ”。這是狙劍本身對 SSDT的一個HOOK用的技術(shù)就是 HOOK HOOK勺函數(shù)是用于增加進程 權(quán)限的。HOOK這個的目的是“在木馬進程為自己增加權(quán)限的時候進行攔

60、截,提醒用戶注意”這在主動防御一章中會詳 細講解。每一個函數(shù)都實現(xiàn)了某一種功能,比如:結(jié)束進程是由 NtTerminateProcess 來完成的(上圖中最后的那個 257 號 函數(shù)),如果HOOKT這個,那么在進程結(jié)束前,就有機會更改結(jié)果了,可以拒絕被結(jié)束??聪聢D(03-15 )當你試圖在任務(wù)管理器中結(jié)束狙劍的進程時,系統(tǒng)會拒絕你的操作,其實這并不是系統(tǒng)拒絕的,而是狙劍自己,由 于狙劍HOOKT SSDT所以,結(jié)束進程的工作服務(wù)員都交給他去做了,他一旦發(fā)現(xiàn)結(jié)束的就是他自己,那他直接告訴服 務(wù)員這個進程不能結(jié)束,然后服務(wù)員就把這個結(jié)果給我們了,其實我們的這個請求并沒有真的到達應(yīng)該送交的部門。而

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論