




已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
寫這一系列文章的目的有兩個(gè):一是告訴大家絕影還在。二是嘗試向大家介紹一種新的技術(shù),我把他叫做“動(dòng)態(tài)感染”,也許這樣命名不規(guī)范,但我至今仍未找到對(duì)這一技術(shù)的比較科學(xué)合理的命名方式。所以姑且把它叫做“動(dòng)態(tài)感染”吧。 所謂的“感染”大家應(yīng)該比較熟悉,它的原理是在一個(gè)PE文件中新添加一個(gè)節(jié)(或者從已有的節(jié)中尋找一塊足夠大的可用空間),將感染代碼寫入,再修改原PE文件的EntryPoint的代碼,改為Jmp XXXXXXXX(XXXXXXXX為感染代碼的起始位置),當(dāng)感染代碼執(zhí)行完畢后,再使用一條Jmp OldEntryPoint代碼跳回PE程序的原入口點(diǎn)。這樣當(dāng)PE文件運(yùn)行時(shí)就會(huì)先執(zhí)行我們寫入的感染代碼。對(duì)PE文件的分析和更改技術(shù)都比較成熟,唯一的難點(diǎn)是所有感染代碼都要使用自定位代碼,或者修改PE文件的導(dǎo)入表等,加入對(duì)感染代碼所使用的DLL函數(shù)的支持。這一感染過程是靜態(tài)的,必須在PE文件沒有運(yùn)行的情況下進(jìn)行;同時(shí)這一方法也是很不妥的,畢竟修改了原始的PE文件,恢復(fù)起來相當(dāng)困難,幾乎對(duì)其進(jìn)行了不可逆的破壞。 以下要講的“動(dòng)態(tài)感染”,都是在內(nèi)核態(tài)下,所以我們要做的,也就是一個(gè)內(nèi)核模塊(有些人叫做“驅(qū)動(dòng)”,但我覺得這樣并不嚴(yán)格)。當(dāng)一個(gè)PE文件開始執(zhí)行時(shí),內(nèi)核中先要進(jìn)行很多工作:分配內(nèi)存、創(chuàng)建線程、加載導(dǎo)入表中的DLL等,這里就不詳細(xì)闡述了。我們想要做的,是在執(zhí)行到EntryPoint之前,用ZwAllocateVirtualMemory向目標(biāo)進(jìn)程中分配內(nèi)存,寫入感染代碼,將原始的EntryPoint修改為感染代碼的起始,然后我們的感染代碼執(zhí)行一系列操作,最后Jmp OldEntryPoint,將控制權(quán)交回原來的代碼。整個(gè)過程不修改原始PE文件,可隨時(shí)卸載我們的內(nèi)核模塊。 這一技術(shù)的意義在于我們要?jiǎng)討B(tài)地保護(hù)指定的應(yīng)用程序不被其他DLL入侵(防止木馬等)。我們知道DLL入侵是比較普遍的入侵方式,可以用鉤子,也可以用遠(yuǎn)程線程。鉤子的方法相信大家都比較熟悉,遠(yuǎn)程線程的方法除了可以用LoadLibrary作為線程函數(shù)加載一個(gè)入侵DLL,還有一種改進(jìn)的辦法,就是直接用純自定位代碼注入目標(biāo)進(jìn)程。這類方法在沒有殺毒軟件的情況防范還是有一定的困難,況且現(xiàn)在很多病毒還能關(guān)閉殺毒軟件,或者欺騙殺毒軟件。如果我們?cè)谀繕?biāo)進(jìn)程已經(jīng)運(yùn)行起來的情況下再來保護(hù),可能已經(jīng)來不及了,有些DLL的注入是非??斓?。而我們現(xiàn)在要討論的技術(shù),是在整個(gè)進(jìn)程還沒有完全啟動(dòng)的情況下(尚沒有一個(gè)線程被創(chuàng)建)來進(jìn)行,我們的代碼進(jìn)入目標(biāo)進(jìn)程的時(shí)間相當(dāng)早,有足夠的時(shí)間來完成防護(hù)準(zhǔn)備。如果你使用OllyDbg來調(diào)試我們的被保護(hù)程序,你會(huì)發(fā)現(xiàn),當(dāng)OD中斷在程序的入口點(diǎn)時(shí),我們的代碼已經(jīng)完成了運(yùn)行。 這系列文章我會(huì)分為幾個(gè)部分來寫:使用匯編語言編寫內(nèi)核態(tài)程序;獲取內(nèi)核基址、SSDT基址;Hook SSDT監(jiān)視進(jìn)程創(chuàng)建;在進(jìn)程的第一個(gè)線程執(zhí)行前向目標(biāo)進(jìn)程分配內(nèi)存并注入代碼;編寫自定位的感染代碼(代碼簡單,因?yàn)槟闳绻呀?jīng)學(xué)到這里了,你自己就可以寫復(fù)雜的代碼,也可以使用LoadLibrary載入DLL來實(shí)現(xiàn)復(fù)雜的功能)。 為什么要用匯編語言來寫內(nèi)核態(tài)程序呢?一是因?yàn)槲乙呀?jīng)習(xí)慣了;二是SSDT鉤子函數(shù)的簡便;三是由于要寫自定位的代碼,對(duì)高級(jí)語言來說還是相當(dāng)困難(至少我還沒找到簡單有效的方法,例如要計(jì)算注入的代碼的長度,除非你事先反匯編);四是你順便可以學(xué)習(xí)用匯編語言來編寫程序。當(dāng)你學(xué)完了這個(gè)系列的文章,你會(huì)發(fā)現(xiàn),在我們寫的這個(gè)小程序中,大部分是內(nèi)核態(tài)下的代碼,同時(shí)又有用戶態(tài)下的代碼(注入到目標(biāo)進(jìn)程中的感染代碼),這是個(gè)非常有意思的小東西。 要學(xué)習(xí)這系列的文章,你首先要準(zhǔn)備以下工具: 一、Mirosfot Visual Studio 2003(用這個(gè)只是編輯器,也可以用更高或更低版本的Visual Studio,但某些匯編、連接的設(shè)置可能會(huì)有變化;如果你會(huì)用makefile而且你是編程牛人直接用記事本編寫代碼那就忽略)。 二、MASM32V10開發(fā)包(其實(shí)V9,V8是一樣的)。 三、KmdKit(匯編語言用的驅(qū)動(dòng)程序開發(fā)包)。 四、KmdManager.exe(加載并測(cè)試我們編寫的內(nèi)核程序,在KmdKit中有)。 五、OllyDbg(可以測(cè)試或者觀察我們的代碼)。 六、VMWare之類的虛擬機(jī)(可選,測(cè)試用,免得你的機(jī)器頻繁藍(lán)屏,當(dāng)然,如果你對(duì)內(nèi)核開發(fā)很有信心可忽略)。 你需要掌握的技術(shù)知識(shí)有以下幾點(diǎn): 一、匯編語言基礎(chǔ)知識(shí)(如果你會(huì)使用MASM32開發(fā)包,已經(jīng)用匯編語言寫過小應(yīng)用程序那就OK,否則你還是去看下Windows環(huán)境下匯編語言程序設(shè)計(jì)吧)。 二、用匯編語言編寫內(nèi)核程序的基礎(chǔ)知識(shí)(會(huì)用KmdKit就OK,不過不會(huì)也沒關(guān)系,我會(huì)盡力跟大家講解明白)。 三、對(duì)內(nèi)核程序的認(rèn)識(shí)和理解(請(qǐng)不要再停留在Cxxxx類的使用或某個(gè)Windows API的調(diào)用上,否則你根本就不會(huì)知道我在講什么)。 四、會(huì)使用OllyDbg(會(huì)使用而已,不是說會(huì)破解)。 通過這一系列的文章,你可以學(xué)習(xí)到以下的知識(shí): 一、使用匯編語言開發(fā)內(nèi)核程序的知識(shí)(包括使用Visual Studio編寫、匯編、連接匯編語言代碼的知識(shí),makefile我就不講了,我自己也馬不實(shí)在的)。 二、對(duì)內(nèi)核有所認(rèn)識(shí)和了解(至少知道什么是內(nèi)核,什么是內(nèi)核程序、內(nèi)核基址等概念)。 三、對(duì)SSDT有所了解(你現(xiàn)在也可以去baidu上搜索一下什么是SSDT,做好準(zhǔn)備)。 四、在內(nèi)核上Hook SSDT(也可以直接Inline hook某些內(nèi)核函數(shù),但還是先一步一步來,SSDT穩(wěn)當(dāng)些)。 五、通過Hook內(nèi)核的某些函數(shù)監(jiān)視進(jìn)程的創(chuàng)建,在內(nèi)核態(tài)上向用戶態(tài)應(yīng)用程序分配內(nèi)存并拷貝數(shù)據(jù)(或代碼)進(jìn)去。 六、編寫自定位代碼(包括在用戶態(tài)上尋找Kernel32.dll基址等)。 本文所使用的環(huán)境是Windows XP SP3。因?yàn)閄P比較熟悉了,而且買電腦的時(shí)候送的XP是正版,而且KmdKit又沒有Windows 7的版本,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度浙江省護(hù)師類之主管護(hù)師過關(guān)檢測(cè)試卷B卷附答案
- 2024年度浙江省二級(jí)造價(jià)工程師之土建建設(shè)工程計(jì)量與計(jì)價(jià)實(shí)務(wù)測(cè)試卷(含答案)
- 社會(huì)保險(xiǎn)法律制度培訓(xùn)
- 纖維濾池培訓(xùn)課件
- 神經(jīng)外科護(hù)理長工作總結(jié)
- 內(nèi)科流動(dòng)紅旗競(jìng)選
- 服裝知識(shí)培訓(xùn)
- 加裝電梯的面試題及答案
- 幼兒園小班社會(huì)《擦椅子》教案
- 領(lǐng)導(dǎo)面試題及答案
- 新疆維吾爾自治區(qū)石河子市五年級(jí)數(shù)學(xué)期末高分通關(guān)試卷詳細(xì)答案和解析
- 校園除草課件
- DL∕ T 1166-2012 大型發(fā)電機(jī)勵(lì)磁系統(tǒng)現(xiàn)場(chǎng)試驗(yàn)導(dǎo)則
- 濕熱滅菌工藝驗(yàn)證方案1
- 2024年廣東省初中學(xué)業(yè)水平考試生物押題卷
- 網(wǎng)絡(luò)安全知識(shí)競(jìng)賽考試題庫300題(含答案)
- 國開電大2023年春季期末考試《機(jī)械CAD、CAM》試題及答案(試卷代號(hào)1119)
- 審計(jì) 第7版 課件 第10章采購與付款循環(huán)審計(jì)
- (高清版)DZT 0145-2017 土壤地球化學(xué)測(cè)量規(guī)程
- 八年級(jí)親子共評(píng)
- 國際財(cái)務(wù)報(bào)告準(zhǔn)則
評(píng)論
0/150
提交評(píng)論