病毒編程技術(shù)之惡意代碼的親密接觸_第1頁
病毒編程技術(shù)之惡意代碼的親密接觸_第2頁
病毒編程技術(shù)之惡意代碼的親密接觸_第3頁
病毒編程技術(shù)之惡意代碼的親密接觸_第4頁
病毒編程技術(shù)之惡意代碼的親密接觸_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論