




已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
寫(xiě)這一系列文章的目的有兩個(gè):一是告訴大家絕影還在。二是嘗試向大家介紹一種新的技術(shù),我把他叫做“動(dòng)態(tài)感染”,也許這樣命名不規(guī)范,但我至今仍未找到對(duì)這一技術(shù)的比較科學(xué)合理的命名方式。所以姑且把它叫做“動(dòng)態(tài)感染”吧。 所謂的“感染”大家應(yīng)該比較熟悉,它的原理是在一個(gè)PE文件中新添加一個(gè)節(jié)(或者從已有的節(jié)中尋找一塊足夠大的可用空間),將感染代碼寫(xiě)入,再修改原PE文件的EntryPoint的代碼,改為Jmp XXXXXXXX(XXXXXXXX為感染代碼的起始位置),當(dāng)感染代碼執(zhí)行完畢后,再使用一條Jmp OldEntryPoint代碼跳回PE程序的原入口點(diǎn)。這樣當(dāng)PE文件運(yùn)行時(shí)就會(huì)先執(zhí)行我們寫(xiě)入的感染代碼。對(duì)PE文件的分析和更改技術(shù)都比較成熟,唯一的難點(diǎn)是所有感染代碼都要使用自定位代碼,或者修改PE文件的導(dǎo)入表等,加入對(duì)感染代碼所使用的DLL函數(shù)的支持。這一感染過(guò)程是靜態(tài)的,必須在PE文件沒(méi)有運(yùn)行的情況下進(jìn)行;同時(shí)這一方法也是很不妥的,畢竟修改了原始的PE文件,恢復(fù)起來(lái)相當(dāng)困難,幾乎對(duì)其進(jìn)行了不可逆的破壞。 以下要講的“動(dòng)態(tài)感染”,都是在內(nèi)核態(tài)下,所以我們要做的,也就是一個(gè)內(nèi)核模塊(有些人叫做“驅(qū)動(dòng)”,但我覺(jué)得這樣并不嚴(yán)格)。當(dāng)一個(gè)PE文件開(kāi)始執(zhí)行時(shí),內(nèi)核中先要進(jìn)行很多工作:分配內(nèi)存、創(chuàng)建線程、加載導(dǎo)入表中的DLL等,這里就不詳細(xì)闡述了。我們想要做的,是在執(zhí)行到EntryPoint之前,用ZwAllocateVirtualMemory向目標(biāo)進(jìn)程中分配內(nèi)存,寫(xiě)入感染代碼,將原始的EntryPoint修改為感染代碼的起始,然后我們的感染代碼執(zhí)行一系列操作,最后Jmp OldEntryPoint,將控制權(quán)交回原來(lái)的代碼。整個(gè)過(guò)程不修改原始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)程。這類方法在沒(méi)有殺毒軟件的情況防范還是有一定的困難,況且現(xiàn)在很多病毒還能關(guān)閉殺毒軟件,或者欺騙殺毒軟件。如果我們?cè)谀繕?biāo)進(jìn)程已經(jīng)運(yùn)行起來(lái)的情況下再來(lái)保護(hù),可能已經(jīng)來(lái)不及了,有些DLL的注入是非??斓?。而我們現(xiàn)在要討論的技術(shù),是在整個(gè)進(jìn)程還沒(méi)有完全啟動(dòng)的情況下(尚沒(méi)有一個(gè)線程被創(chuàng)建)來(lái)進(jìn)行,我們的代碼進(jìn)入目標(biāo)進(jìn)程的時(shí)間相當(dāng)早,有足夠的時(shí)間來(lái)完成防護(hù)準(zhǔn)備。如果你使用OllyDbg來(lái)調(diào)試我們的被保護(hù)程序,你會(huì)發(fā)現(xiàn),當(dāng)OD中斷在程序的入口點(diǎn)時(shí),我們的代碼已經(jīng)完成了運(yùn)行。 這系列文章我會(huì)分為幾個(gè)部分來(lái)寫(xiě):使用匯編語(yǔ)言編寫(xiě)內(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)存并注入代碼;編寫(xiě)自定位的感染代碼(代碼簡(jiǎn)單,因?yàn)槟闳绻呀?jīng)學(xué)到這里了,你自己就可以寫(xiě)復(fù)雜的代碼,也可以使用LoadLibrary載入DLL來(lái)實(shí)現(xiàn)復(fù)雜的功能)。 為什么要用匯編語(yǔ)言來(lái)寫(xiě)內(nèi)核態(tài)程序呢?一是因?yàn)槲乙呀?jīng)習(xí)慣了;二是SSDT鉤子函數(shù)的簡(jiǎn)便;三是由于要寫(xiě)自定位的代碼,對(duì)高級(jí)語(yǔ)言來(lái)說(shuō)還是相當(dāng)困難(至少我還沒(méi)找到簡(jiǎn)單有效的方法,例如要計(jì)算注入的代碼的長(zhǎng)度,除非你事先反匯編);四是你順便可以學(xué)習(xí)用匯編語(yǔ)言來(lái)編寫(xiě)程序。當(dāng)你學(xué)完了這個(gè)系列的文章,你會(huì)發(fā)現(xiàn),在我們寫(xiě)的這個(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而且你是編程牛人直接用記事本編寫(xiě)代碼那就忽略)。 二、MASM32V10開(kāi)發(fā)包(其實(shí)V9,V8是一樣的)。 三、KmdKit(匯編語(yǔ)言用的驅(qū)動(dòng)程序開(kāi)發(fā)包)。 四、KmdManager.exe(加載并測(cè)試我們編寫(xiě)的內(nèi)核程序,在KmdKit中有)。 五、OllyDbg(可以測(cè)試或者觀察我們的代碼)。 六、VMWare之類的虛擬機(jī)(可選,測(cè)試用,免得你的機(jī)器頻繁藍(lán)屏,當(dāng)然,如果你對(duì)內(nèi)核開(kāi)發(fā)很有信心可忽略)。 你需要掌握的技術(shù)知識(shí)有以下幾點(diǎn): 一、匯編語(yǔ)言基礎(chǔ)知識(shí)(如果你會(huì)使用MASM32開(kāi)發(fā)包,已經(jīng)用匯編語(yǔ)言寫(xiě)過(guò)小應(yīng)用程序那就OK,否則你還是去看下Windows環(huán)境下匯編語(yǔ)言程序設(shè)計(jì)吧)。 二、用匯編語(yǔ)言編寫(xiě)內(nèi)核程序的基礎(chǔ)知識(shí)(會(huì)用KmdKit就OK,不過(guò)不會(huì)也沒(méi)關(guān)系,我會(huì)盡力跟大家講解明白)。 三、對(duì)內(nèi)核程序的認(rèn)識(shí)和理解(請(qǐng)不要再停留在Cxxxx類的使用或某個(gè)Windows API的調(diào)用上,否則你根本就不會(huì)知道我在講什么)。 四、會(huì)使用OllyDbg(會(huì)使用而已,不是說(shuō)會(huì)破解)。 通過(guò)這一系列的文章,你可以學(xué)習(xí)到以下的知識(shí): 一、使用匯編語(yǔ)言開(kāi)發(fā)內(nèi)核程序的知識(shí)(包括使用Visual Studio編寫(xiě)、匯編、連接匯編語(yǔ)言代碼的知識(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ù),但還是先一步一步來(lái),SSDT穩(wěn)當(dāng)些)。 五、通過(guò)Hook內(nèi)核的某些函數(shù)監(jiān)視進(jìn)程的創(chuàng)建,在內(nèi)核態(tài)上向用戶態(tài)應(yīng)用程序分配內(nèi)存并拷貝數(shù)據(jù)(或代碼)進(jìn)去。 六、編寫(xiě)自定位代碼(包括在用戶態(tài)上尋找Kernel32.dll基址等)。 本文所使用的環(huán)境是Windows XP SP3。因?yàn)閄P比較熟悉了,而且買電腦的時(shí)候送的XP是正版,而且KmdKit又沒(méi)有Windows 7的版本,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 智慧城市基礎(chǔ)設(shè)施的智能化升級(jí)實(shí)踐
- 四川省瀘州市龍馬潭區(qū)金龍中學(xué)2024年數(shù)學(xué)八上期末達(dá)標(biāo)檢測(cè)試題含解析
- 四川省宜賓市翠屏區(qū)二片區(qū)2024-2025學(xué)年物理八上期末質(zhì)量檢測(cè)試題含解析
- 銷售團(tuán)隊(duì)管理與激勵(lì)方案
- 2025年公安院校招警考試題庫(kù)(附答案)
- 服裝品牌策劃與市場(chǎng)推廣策略
- 零售業(yè)數(shù)字化轉(zhuǎn)型與創(chuàng)新?tīng)I(yíng)銷策略研究
- 2025至2030智能酒店系統(tǒng)行業(yè)發(fā)展趨勢(shì)分析與未來(lái)投資戰(zhàn)略咨詢研究報(bào)告
- 寵物主題解謎挑戰(zhàn)賽熱 門場(chǎng)景設(shè)計(jì)研究
- 2025至2030中國(guó)自然修護(hù)面膜行業(yè)深度調(diào)研及市場(chǎng)需求與投資報(bào)告
- 大疆在線測(cè)評(píng)題
- 045.糖尿病患者血脂管理中國(guó)專家共識(shí)2024版
- DB3402T 19-2021 汽車后市場(chǎng) 美容養(yǎng)護(hù)服務(wù)規(guī)范
- 化工公司安全知識(shí)競(jìng)賽題庫(kù)(共1000題)
- 中國(guó)移動(dòng)公開(kāi)競(jìng)聘考試題庫(kù)(含答案)
- DLT 572-2021 電力變壓器運(yùn)行規(guī)程
- HJ 636-2012 水質(zhì) 總氮的測(cè)定 堿性過(guò)硫酸鉀消解紫外分光光度法
- 成都市2022級(jí)(2025屆)高中畢業(yè)班摸底測(cè)試(零診)數(shù)學(xué)試卷(含答案)
- 社會(huì)主義核心價(jià)值觀融入幼兒園班級(jí)管理課程教學(xué)探索
- 四年級(jí)下冊(cè)混合計(jì)算400題及答案
- 餐廳值班管理培訓(xùn)
評(píng)論
0/150
提交評(píng)論