病毒編程技術(shù)之惡意代碼的親密接觸_第1頁(yè)
病毒編程技術(shù)之惡意代碼的親密接觸_第2頁(yè)
病毒編程技術(shù)之惡意代碼的親密接觸_第3頁(yè)
病毒編程技術(shù)之惡意代碼的親密接觸_第4頁(yè)
病毒編程技術(shù)之惡意代碼的親密接觸_第5頁(yè)
已閱讀5頁(yè),還剩4頁(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)介

病毒編程技術(shù)之惡意代碼的親熱接觸計(jì)算機(jī)病毒已經(jīng)為我們的生活帶來(lái)了日益嚴(yán)峻的危害,一次又一次的安全事故讓很多人談毒色變。然而,從技術(shù)上來(lái)說(shuō),這種無(wú)所不用其極的極限編程技術(shù)卻又是極其精彩的,一個(gè)好的病毒代碼更像是一個(gè)構(gòu)思周密的藝術(shù)品。無(wú)論你是一個(gè)狂熱的技術(shù)愛(ài)好者,還是一個(gè)軟件產(chǎn)品的開發(fā)人員,都應(yīng)當(dāng)對(duì)病毒技術(shù)有所了解,以至于當(dāng)它降臨的時(shí)候能夠沉著應(yīng)對(duì)或是為客戶生產(chǎn)出安全的產(chǎn)品。出于這些目的,我們將組織一系列惡意代碼的親熱接觸的文章,從最真實(shí)的角度讓讀者感受各種病毒、蠕蟲等惡意代碼技術(shù),作為Elkern向讀者介紹了病毒的一些根本編碼技術(shù),并對(duì)病毒的原理做了具體的介紹。生活在網(wǎng)絡(luò)時(shí)代,無(wú)論是作為一名程序員抑或是作為一名一般的電腦使用者,對(duì)病毒這個(gè)詞都已經(jīng)不再生疏。網(wǎng)絡(luò)不僅僅是傳播信息的快速通道,從另外一個(gè)角度來(lái)看,也是病毒得以傳播和滋生的溫床,有internet10-15分鐘就會(huì)被蠕蟲或病毒感染。各種類型的病毒,在人們通過(guò)網(wǎng)絡(luò)查閱信息、交換文件、收聽視頻時(shí)正在靜靜地傳播。這些病毒或蠕蟲不僅在傳播過(guò)程中消耗大量的帶寬資源,而且會(huì)干擾系統(tǒng)功能的正常使用或造成數(shù)據(jù)喪失、甚至是硬件損壞,每個(gè)電腦用戶幾乎都有過(guò)系統(tǒng)被病毒感染而無(wú)法正常使用的經(jīng)受,大局部企業(yè)用戶也都有過(guò)因病毒發(fā)作致使業(yè)務(wù)系統(tǒng)不能正常運(yùn)行的經(jīng)受。病毒距離我們,其實(shí)并不遙遠(yuǎn)。度來(lái)看,只有充分了解病毒技術(shù),才能更好地爭(zhēng)辯應(yīng)對(duì)之策,知己知彼,方能百戰(zhàn)不殆。病毒不是某個(gè)系統(tǒng)下的專屬品,事實(shí)上現(xiàn)在各種流行的操作系統(tǒng):從最初的Unix系統(tǒng)到其各種變體如Linux、Solaris、AIX、OS2等,從WindowsCE、Sybian等嵌入式系統(tǒng),甚至是在某些專業(yè)化的大型機(jī)系統(tǒng)上,都無(wú)一例外地消滅了病毒,各種平臺(tái)下病毒的根本原理類似的,但是針對(duì)不同系統(tǒng)的特性,實(shí)現(xiàn)可能區(qū)分很大,緣由在于作為一種無(wú)所不用其極的技術(shù),勢(shì)必利用各種系統(tǒng)相關(guān)的功能或弱點(diǎn)以取得各種特權(quán)和資源。正如生物的多樣性一樣,病毒種類繁多:包括源代碼病毒、宏病毒、腳本病毒以及與各種WindowsPE病毒為例,說(shuō)明病毒技術(shù)的原理以及實(shí)現(xiàn)技術(shù),驅(qū)散掩蓋在病毒技術(shù)上的迷霧。病毒、蠕蟲、惡意代碼自動(dòng)傳播。事情,比方特洛伊木馬等間諜軟件、掃瞄器惡意腳本、一些廣告軟件等,明顯無(wú)法將其定義為傳統(tǒng)的病毒或蠕蟲,他們和蠕蟲、病毒一樣,同屬于一個(gè)更大的范疇——惡意代碼。本文重點(diǎn)闡述傳統(tǒng)病毒經(jīng)常使用的技術(shù)。病毒簡(jiǎn)史談病毒技術(shù),無(wú)法回避病毒產(chǎn)生的歷史。早在1949年在馮·諾伊曼的一篇論文《簡(jiǎn)單自動(dòng)裝置的理論及組織的行為》中,即預(yù)見了可自我生殖程序消滅的可能。而現(xiàn)在眾所公認(rèn)的病毒的萌牙于AT&T〔貝爾試驗(yàn)室〕幾個(gè)年輕的天才程序員編制的磁芯大戰(zhàn)〔CoreWar〕玩耍程序,已經(jīng)具備了病毒的一些特征。隨后相關(guān)的試驗(yàn)和爭(zhēng)辯在一些學(xué)者和天才的程序員中開頭開放,正是這些制造了計(jì)算機(jī)系統(tǒng)的天才們,制造了計(jì)算機(jī)病毒。20世紀(jì)80年月,隨著個(gè)人計(jì)算機(jī)的普及,病毒已經(jīng)開頭流行了,早期的計(jì)算機(jī)病毒是和當(dāng)時(shí)的文件交換方式和操作系統(tǒng)特點(diǎn)聯(lián)系在一起的,那個(gè)時(shí)候發(fā)行UnixDOS,網(wǎng)絡(luò)尚未普及,因此這一時(shí)期的病毒大都是引導(dǎo)區(qū)病毒和文件型病毒,前者通過(guò)替換系統(tǒng)引導(dǎo)區(qū)代碼在系統(tǒng)啟動(dòng)時(shí)獵取執(zhí)行權(quán),后者通過(guò)修改可執(zhí)行文件嵌入代碼以在可執(zhí)行文件執(zhí)行時(shí)獵取把握權(quán),更多病毒的則是二者的結(jié)合。IBM-PC的流行和MSDOSDOS病毒在這一階段漸漸占據(jù)了統(tǒng)治地位。80年月后期因特網(wǎng)開頭進(jìn)入人們的視野,這時(shí)也消滅了第一個(gè)因特網(wǎng)蠕蟲——莫里斯蠕蟲,借助于系統(tǒng)漏洞通過(guò)網(wǎng)絡(luò)由于病毒受社會(huì)的關(guān)注程度以及反病毒軟件的進(jìn)步,進(jìn)一步刺激了病毒制作者群體的制造欲望,多態(tài)和變DOS90年月后期隨著Windows的消滅,DOS病毒和引導(dǎo)區(qū)病毒漸漸走向消亡,Windows病毒隨之則開頭大量涌現(xiàn),隨著微軟Office軟件的普及宏病毒消滅了,各種腳本病毒也日益增多。因特網(wǎng)的普及在給人們帶來(lái)便利Emai202321世紀(jì)的頭幾年里,WindowsPE病毒技術(shù)已經(jīng)日益純熟、數(shù)量日益增多,但病毒排行榜的首位已經(jīng)讓位給利用各種系統(tǒng)漏洞進(jìn)展傳播的蠕蟲了,安全爭(zhēng)辯的深入、各種安全漏洞的大量披露給蠕蟲作者供給了很好的素材,特洛依木馬等惡意軟件數(shù)量呈現(xiàn)幾何級(jí)數(shù)的增長(zhǎng),病毒作者的關(guān)注點(diǎn)重從Windows桌面系統(tǒng)轉(zhuǎn)向Unix系統(tǒng)、手機(jī)等嵌入移動(dòng)設(shè)備上。安全爭(zhēng)辯也愈益受到社會(huì)的關(guān)注,病毒和反病毒的戰(zhàn)斗仍在連續(xù),在可預(yù)見的將來(lái),仍將連續(xù)。不過(guò),WindowsPE文件病毒仍舊占有格外大的比重。WindowsPEWindows平臺(tái)是當(dāng)今最為流行的桌面系統(tǒng),在效勞器市場(chǎng)上,也占有相當(dāng)?shù)姆蓊~。其可執(zhí)行文件〔一般的用戶程序、共享NT系統(tǒng)的驅(qū)動(dòng)文件P〔PortableExecutebalWindows系統(tǒng)上一般都是通過(guò)調(diào)用系統(tǒng)供給的API進(jìn)展的,以保證在各種Windows版本上都能運(yùn)行,因此讀者應(yīng)對(duì)APIPE文件,因此要求讀者對(duì)PE文件格式有肯定的了解,PEPE文件格式,僅作PE文件構(gòu)造和頭部局部主要域的格式如以下圖1所示。1:PE文件構(gòu)造及局部主要域的定義文件是由文件頭、節(jié)表、包含各種代碼和數(shù)據(jù)的節(jié)構(gòu)成。文件頭中定義了PE文件的引入函數(shù)表、引出函數(shù)表、節(jié)數(shù)目、文件版本、文件大小、所屬子系統(tǒng)等相關(guān)的重要信息。節(jié)表則定義了實(shí)際數(shù)據(jù)節(jié)的大小、對(duì)齊、內(nèi)存到文件如何進(jìn)展映射等信息。后面的各個(gè)節(jié)則包含了實(shí)際的可執(zhí)行代碼或數(shù)據(jù)?!惨妶D1〕PE病毒技術(shù)剖析PEPEPE文件文件中,更頭部相關(guān)的數(shù)據(jù)構(gòu)造,使得修PEPEPEPE文件后,病毒代碼就首先獵取了把握權(quán),在執(zhí)行完感染或破壞代碼后,再將把握權(quán)轉(zhuǎn)移給正常的程序代碼,這樣病毒代碼就神不知鬼不覺(jué)地靜靜運(yùn)行了。這只是最常見的執(zhí)行流程,事實(shí)上,隨著反病毒技術(shù)的進(jìn)展,更多的病毒并不是在程序的入口獵取把握EPO技術(shù),將在本文后半局部進(jìn)展介紹。病毒代碼一般分成幾個(gè)主要功能模塊:解碼模塊、重定位模塊、文件搜尋模塊、感染模塊、破壞模塊、加密變形模塊等,不同的病毒包含模塊不肯定一樣,比方解碼、加密變形等就PE病毒都具備的,由于自我復(fù)制我傳播是病毒的最根本的特征。有些病毒還可能實(shí)現(xiàn)了其他的模塊,比方Email發(fā)送、網(wǎng)絡(luò)掃描、內(nèi)存感染等。一段典型的PE病毒2所示:2:一段典型的病毒代碼執(zhí)行流程從原理上看病毒格外簡(jiǎn)潔,但實(shí)現(xiàn)起來(lái)還有不少困難,其實(shí)假設(shè)解決了這些技術(shù)難點(diǎn),一個(gè)五臟俱全的病毒也就形成了,本文后面將從一個(gè)病毒編寫者的角度就各個(gè)難點(diǎn)分別予以介紹。病毒可承受的技術(shù)幾乎涉及到WindowsWin32用戶模式病毒所常用的一些技術(shù)。編程語(yǔ)言PEPE病毒都是直接用匯編編寫的,一方面是由于匯編編譯后的代碼短小精悍,可以充分進(jìn)展人工優(yōu)化,以滿足隱蔽性的要求;另外一方面之所以用匯編是由于其機(jī)敏和可控,病毒要同系統(tǒng)底層有時(shí)甚至是硬件打交道,由于編譯器的特點(diǎn)不盡一樣,用高級(jí)語(yǔ)言實(shí)現(xiàn)某些功能甚至?xí)勇闊?,比方用匯編很便利地就可以直接進(jìn)展自身重定位、自身代碼修改以及讀寫IO端口等操作,而用高級(jí)語(yǔ)言實(shí)現(xiàn)則相對(duì)煩瑣。用匯編還可以充分利用底層硬件支持的各種特性,限制格外少。但是用匯編編寫病毒的主要缺點(diǎn)就是編寫效率低,加上使用各種優(yōu)化手段使得代碼閱讀起來(lái)相當(dāng)困難,不過(guò)作為一種極限編程技術(shù),對(duì)病毒作者而言,這些好似都已經(jīng)不再重要。本FASM進(jìn)展編譯,由于匯編語(yǔ)言表述算法較為不便,因此算法和原理性表述仍舊承受C語(yǔ)言。在表達(dá)各種技術(shù)時(shí),局部代碼Elkern202329A第7期中,有興趣的讀者可參閱其完整代碼。重定位病毒自身的重定位是病毒代碼在得以順當(dāng)運(yùn)行前應(yīng)解決的最根本問(wèn)題。病毒代碼在運(yùn)行時(shí)同樣也要引用一些數(shù)據(jù),比方API函數(shù)的名字、殺毒軟件的黑名單、系統(tǒng)相關(guān)的特別數(shù)據(jù)等,由于病毒代碼在宿主進(jìn)程中運(yùn)行時(shí)的內(nèi)存地址是在編譯匯編代碼時(shí)無(wú)法預(yù)知的,而病毒在感染不同的宿主時(shí)其位于宿主中的準(zhǔn)確位置同樣也無(wú)法提前預(yù)知,因此病毒就要在運(yùn)行時(shí)動(dòng)態(tài)確定其引用數(shù)據(jù)的地址,否則,引用數(shù)據(jù)時(shí)幾乎確定會(huì)發(fā)生錯(cuò)誤。對(duì)于一般的PE文件比方動(dòng)態(tài)鏈接庫(kù)而言,在被加載到不同地址處時(shí)由加載器依據(jù)PE中一個(gè)被稱為重定位表的特別構(gòu)造動(dòng)態(tài)修正引用數(shù)據(jù)指令的地址,而重定位表是由編譯器在編譯階段生成的,因此動(dòng)態(tài)鏈接庫(kù)本身無(wú)需為此做任何額外處理。病毒代碼則不同,必需自己動(dòng)態(tài)確定需引用數(shù)據(jù)的地址。0x4000000x401000處的一條語(yǔ)句及其引用的數(shù)據(jù)定義如下所示,相0x400000:401000:moveax,dwordptr[402035]......402035:db“helloworld!“,00x400000,明顯是能夠正常執(zhí)行的,但假設(shè)這段代碼被加載在0x500000運(yùn)行時(shí)則出錯(cuò),對(duì)病毒而言,這是大多數(shù)時(shí)候都會(huì)遇到的狀況,由于指令中引用的仍舊是0x402035這個(gè)地址。假設(shè)病毒代碼不是在宿主進(jìn)程中而是作為一個(gè)具有重定位表的獨(dú)立PE文件運(yùn)行,正常狀況下由系統(tǒng)加載器依據(jù)重定位表表項(xiàng)將moveax,dwordptr[402035]0x402035修改為正確值moveax,dwordptr[5402035],程序也就能準(zhǔn)確無(wú)誤地運(yùn)行了。不過(guò)很惋惜PE文件時(shí)就準(zhǔn)時(shí)加以解決,否則將導(dǎo)致宿主進(jìn)程無(wú)法正常運(yùn)行。至少有兩種方法可以解決重定位的問(wèn)題:PEPEPE無(wú)任何則創(chuàng)立重定位表節(jié)并插入的重定位項(xiàng);假設(shè)已經(jīng)存在重定位表項(xiàng),則在修改已存在的重定位表節(jié),在其中插入包含了這些地址的表項(xiàng)。重定位的工作就完全由系統(tǒng)加載器PEPEDataDirectory6個(gè)成員IMAGE_DIRECTORY_ENTRY_BASERELOC指向。該方法需要的代碼稍多,實(shí)現(xiàn)起來(lái)也相比照較簡(jiǎn)單,另外假設(shè)目標(biāo)文件無(wú)重定位表項(xiàng)〔為了減小代碼體積,這種狀況也不少見〕,處理起來(lái)就比較麻煩,只有PE病毒中很少使用。利用IntelX86體系構(gòu)造的特別指令,callfnstenv等指令動(dòng)態(tài)獵取當(dāng)前指令的運(yùn)行時(shí)地址,計(jì)算該地址與編譯時(shí)預(yù)定義地址的差值〔deltaoffset〕,再將該差值加到原編譯時(shí)預(yù)定的地址上,得到intelx86deltaoffset放在某個(gè)存放器中,然后通過(guò)變址尋址引用數(shù)據(jù)就可以解決引用數(shù)據(jù)重定位的難題。還以上例說(shuō)明,假設(shè)上述指令塊0x500000處那么代碼及其在內(nèi)存中的地址將變?yōu)椋?01000:moveax,dwordptr[402035]......502035:db“helloworld!“,0明顯,movmov指令運(yùn)行時(shí)地址是0x501000,0x100000。很明顯指令引用的實(shí)際數(shù)據(jù)地址應(yīng)當(dāng)為0x402035+0x100000=0x502035。從上例可以看出,只要能夠在運(yùn)行時(shí)確定某條指令動(dòng)態(tài)deltaoffset加到相應(yīng)的地址上正確重定位任何代碼3所示:3:deltaiffsetdeltaoffset,通過(guò)變址尋址的方式書寫引用數(shù)據(jù)的匯編代碼,即可ebpdeltaoffset,使用如下變址尋址指令則可保證在運(yùn)行時(shí)引用的數(shù)據(jù)地址是正確的:;ebpdeltaoffset值401000:moveax,dwordptr[ebp+0x402035]......402035:db“helloworld!“,0deltaoffset的值了,明顯:calldeltadelta:popebpsubebp,offsetdelta在運(yùn)行時(shí)就動(dòng)態(tài)計(jì)算出了deltaoffsetcallpopebpebpdeltadelta的編譯時(shí)地址“offsetdladeltaoffset的callfstenv、fsave、fxsave、fnstenv等浮點(diǎn)環(huán)境保存fnstenvFPU4所示:4:浮點(diǎn)環(huán)境塊的構(gòu)造該構(gòu)造偏移12字節(jié)處就是最終執(zhí)行的浮點(diǎn)指令的運(yùn)行時(shí)地址,因此我們也可以用如下一段指令獵取deltaoffset:fpu_addr:fnopcallGetPhAddrsubebp,fpu_addrGetPhAddr:subesp,16fnstenv[esp-12]popebpaddesp,12retdeltaoffsetebpebp作為棧幀指針一般過(guò)程都不將該存放器用于其它deltaoffsetebp中,其有用其他存放器也完全可以。deltaoffsetElkern開頭寫成了類似如下的代碼:call_start_ip_start_ip:popebp;...;使用call[ebp+addrOpenProcess-_start_ip];...addrOpenProcessdd0;而不是call_start_ip_start_ip:popebpsubebp,_start_ipcall[ebp+addrOpenProcess]addrOpenProcess-_start_ip是一個(gè)較小相對(duì)偏移值,一般不超過(guò)兩個(gè)字節(jié),因此生成的指令較短,而addrOpenProcess32Win324個(gè)字節(jié)的地址值,生成的指令也就較長(zhǎng)。有時(shí)對(duì)病毒對(duì)大小要求很苛刻,更多時(shí)候也是為了顯示其超俗的編程技巧,病毒作者大量承受這種優(yōu)化,對(duì)這種優(yōu)化原Intel2中的指令格式說(shuō)明。API函數(shù)地址的獵取Win32API的編碼量過(guò)大而且兼容性很差。Win9X/NT/2023/XP/2023Win32API,因此調(diào)Win32API實(shí)現(xiàn)各種功能對(duì)病毒而言就是自然而然的事情了。所以接下來(lái)要解決的問(wèn)題就是如何動(dòng)態(tài)獵取Win32APIPEWindows2023中CreateFileA0x7EE6326call[7EE63260h]APIWindows版API的地址并不完全一樣,使用該方法的病毒可能只能在Windows2023的某個(gè)版本上運(yùn)行。因此病毒作者自然而然地回到PEPEDLLPEPE引入表填

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論