版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
目錄一概述 1(一)特征代碼法 3(二)校驗和法 4(三)行為監(jiān)測法 5(四)軟件模擬法 6二開發(fā)工具概述 6(一)匯編語言概述 6(二)匯編語言和高級語言的比較 7三系統(tǒng)設計思想 8四程序設計過程詳解 9(一)主要實現(xiàn)功能 9(二)程序總體流程圖 10(三)程序設計說明 101過程scan 112過程search 123過程clrscr 134過程sort_name 135過程print 13(四)軟件操作說明 13五程序的運行和測試 16(一)程序實現(xiàn)的算法 16(二)程序功能的實現(xiàn) 17六程序開發(fā)總結析 17致謝 18參考文獻 18殺毒軟件技術的探討與實現(xiàn)摘要:隨著因特網(wǎng)的快速發(fā)展,計算機網(wǎng)絡已經(jīng)滲透到社會的各個領域,網(wǎng)上的計算機病毒和病毒技術也越來越泛濫。如何防治計算機病毒已經(jīng)成為全球性的話題。本論文就是基于這個背景來設計和開發(fā)的。其主要是模擬殺毒軟件對磁盤文件的掃描過程,由用戶提供指定待掃描的磁盤分區(qū)或文件,然后模擬殺毒軟件引擎對磁盤進行掃描,采用傳統(tǒng)的基于特征碼(病毒特征庫)的靜態(tài)掃描技術。本程序中的磁盤掃描匹配的核心部分用匯編語言實現(xiàn),界面的設計用win32編程機制是實現(xiàn)。程序的主要特點是以盡可能簡潔、高效的匯編代碼完成模擬殺毒軟件對磁盤的掃描過程。關鍵詞:靜態(tài)掃描技術;模擬殺毒;匯編語言;win32TheDiscussandImplementationofkillvirussoftware
Abstract:AsthefastdevelopmentofInternet,computervirushaspermeatedintovariousaspectsofsociety.Thecomputervirusintheinternetandvirustechniquebecomesmoreandmoreoverflow.Howtocontrolcomputervirushasbecomeaworldwidetheme.Thethesisdesignanddevelopasystembasedonthis.Themainpointeristosimulatetheprogressofkillvirussoftwarescanthedisk’sfile.First,theuserofferthediskpartitionandthefile,then,thesystemscanthedisksimulatesthekillvirusengine.Thesystemusedtraditionstaticscantechniquebasedonviruscharacterbase.Thesystemusedassemblelanguagetoimplementthecoreoftheprogram,thedesignofinterfaceisimplementedbasedonwin32.Thekeyfeatureofthesystemissimpleandhighefficiency.KeyWords:Staticscantechnique;Simulatesthekillvirusengine;Assemblelanguage;Win32PAGE18一概述 人類進入了信息社會創(chuàng)造了智能機器(電子計算機),同時也創(chuàng)造了機器(電子計算機)病毒,福禍同降。人類在信息社會更容易與機器(電子計算機)融為一個整體,可是,破壞這個整體的一個方面將是機器病毒(計算機病毒),人類同時在與生物病毒作斗爭時又要與機器病毒作斗爭,這是人類在方便自己時也在為難自己。
從一九八三年計算機病毒首次被確認以來,并沒有引起人們的重視。直到一九八七年計算機病毒才開使受到世界范圍內(nèi)的普遍重視。我國于一九八九年在計算機界發(fā)現(xiàn)病毒。至今,全世界已發(fā)現(xiàn)近數(shù)萬種病毒,并且還在高速度的增加。
由于計算機軟件的脆弱性與互聯(lián)網(wǎng)的開放性,我們將與病毒長久共存。而且,病毒主要朝著能更好的隱蔽自己并對抗反病毒手段的方向發(fā)展。同時,病毒已被人們利用其特有的性質與其他功能相結合進行有目的的活動。隨著計算機及通信技術的飛速發(fā)展,計算機網(wǎng)絡已經(jīng)滲透到社會經(jīng)濟的各個領域,但自從1988年發(fā)生在美國的“蠕蟲病毒”事件后計算機病毒的攻擊事件不斷出現(xiàn)。開始階段病毒傳播主要是靠非法的程序和數(shù)據(jù)拷貝,隨著網(wǎng)絡的普及,互聯(lián)網(wǎng)成為計算機病毒最好的載體,據(jù)統(tǒng)計病毒通過網(wǎng)頁、郵件、漏洞等網(wǎng)絡手段進行傳播的網(wǎng)絡型病毒已經(jīng)占據(jù)了發(fā)作病毒的主流,占所有病毒總數(shù)的68%。隨著病毒技術與黑客技術的發(fā)展,混合型病毒越來越多,集合了蠕蟲、后門等功能,危害更大??梢钥吹?,計算機一旦感染病毒,降低工作效率,占用磁盤空間,影響網(wǎng)絡傳輸速度,重要數(shù)據(jù)和信息的破壞、丟失,計算機系統(tǒng)崩潰,極大地影響計算機的使用效率。鑒于此,病毒的檢測和預防技術在保護網(wǎng)絡安全、節(jié)約系統(tǒng)資源、降低經(jīng)濟損失、節(jié)省用戶的精力和時間方面起著突出的作用。病毒是一段程序,不同種類的病毒,它們的代碼千差萬別,任何人都不可能預測明天將會出現(xiàn)什么新病毒。但有一點可以肯定,只要出現(xiàn)了一項新的計算機技術,充分利用這項新技術編制的新病毒就一定離我們不遠了。而由于軟件種類極其豐富,且某些正常程序也使用了類似病毒的操作甚至借鑒了某些病毒的技術。所以,雖然有些人利用病毒某些共有的操作(如駐內(nèi)存,改中斷)這種共性,制作了聲稱可查所有病毒的程序,但這種方法對病毒進行檢測勢必會造成較多的誤報情況,不夠可靠,目前都只能作為輔助的手段配合使用,無法獨立推廣。實際上,計算機病毒學鼻祖早在80年代初期就已經(jīng)提出了計算機病毒的模型,證明只要延用現(xiàn)行的計算機體系,計算機病毒就存在“不可判定性”。殺病毒必須先搜集到病毒樣本,使其成為已知病毒,然后剖析病毒,再將病毒傳染的過程準確地顛倒過來,使被感染的計算機恢復原狀。因此可以看出,一方面計算機病毒是不可滅絕的,另一方面病毒也并不可怕,世界上沒有殺不掉的病毒。常用的反病毒軟件技術如下:特征碼技術:基于對已知病毒分析、查解的反病毒技術。目前的大多數(shù)殺病毒軟件采用的方法主要是特征碼查毒方案與人工解毒并行,亦即在查病毒時采用特征碼查毒,在殺病毒時采用人工編制解毒代碼。特征碼查毒方案實際上是人工查毒經(jīng)驗的簡單表述,它再現(xiàn)了人工辨識病毒的一般方法,采用了“同一病毒或同類病毒的某一部分代碼相同”的原理,也就是說,如果病毒及其變種、變形病毒具有同一性,則可以對這種同一性進行描述,并通過對程序體與描述結果(亦即“特征碼”)進行比較來查找病毒。而并非所有病毒都可以描述其特征碼,很多病毒都是難以描述甚至無法用特征碼進行描述。使用特征碼技術需要實現(xiàn)一些補充功能,例如近來的壓縮包、壓縮可執(zhí)行文件自動查殺技術。但是,特征碼查毒方案也具有極大的局限性。特征碼的描述取決于人的主觀因素,從長達數(shù)千字節(jié)的病毒體中擷取十余字節(jié)的病毒特征碼,需要對病毒進行跟蹤、反匯編以及其它分析,如果病毒本身具有反跟蹤技術和變形、解碼技術,那么跟蹤和反匯編以獲取特征碼的情況將變得極其復雜。此外,要擷取一個病毒的特征碼,必然要獲取該病毒的樣本,再由于對特征碼的描述各個不同,特征碼方法在國際上很難得到廣域性支持。特征碼查病毒主要的技術缺陷表現(xiàn)在較大的誤查和誤報上,而殺病毒技術又導致了反病毒軟件的技術遲滯。虛擬機技術:啟發(fā)式探測未知病毒的反病毒技術。虛擬機技術的主要作用是能夠運行一定規(guī)則的描述語言。由于病毒的最終判定準則是其復制傳染性,而這個標準是不易被使用和實現(xiàn)的,如果病毒已經(jīng)傳染了才判定是它是病毒,定會給病毒的清除帶來麻煩。那么檢查病毒用什么方法呢?客觀地說,在各類病毒檢查方法中,特征值方法是適用范圍最寬、速度最快、最簡單、最有效的方法。但由于其本身的缺陷問題,它只適用于已知病毒,對于未知病毒,如果能夠讓病毒在控制下先運行一段時間,讓其自己還原,那么,問題就會相對明了??梢哉f,虛擬機是這種情況下的最佳選擇。虛擬機在反病毒軟件中應用范圍廣,并成為目前反病毒軟件的一個趨勢。一個比較完整的虛擬機,不僅能夠識別新的未知病毒,而且能夠清除未知病毒,我們會發(fā)現(xiàn)這個反病毒工具不再是一個程序,而成為可以和卡斯帕羅夫抗衡的IBM深藍超級計算機。首先,虛擬機必須提供足夠的虛擬,以完成或將近完成病毒的“虛擬傳染”;其次,盡管根據(jù)病毒定義而確立的“傳染”標準是明確的,但是,這個標準假如能夠實施,它在判定病毒的標準上仍然會有問題;第三,假如上一步能夠通過,那么,我們必須檢測并確認所謂“感染”的文件確實感染的就是這個病毒或其變形。目前虛擬機的處理對象主要是文件型病毒。對于引導型病毒、word/excel宏病毒、木馬程序在理論上都是可以通過虛擬機來處理的,但目前的實現(xiàn)水平仍相距甚遠。就像病毒編碼變形使得傳統(tǒng)特征值方法失效一樣,針對虛擬機的新病毒可以輕易使得虛擬機失效。雖然虛擬機也會在實踐中不斷得到發(fā)展。但是,pc的計算能力有限,反病毒軟件的制造成本也有限,而病毒的發(fā)展可以說是無限的。讓虛擬技術獲得更加實際的功效,甚至要以此為基礎來清除未知病毒,其難度相當大。經(jīng)過我們一段時間的調(diào)查研究,資料搜集分析并結合目前所使用的病毒軟件的狀況,我們發(fā)現(xiàn)現(xiàn)有軟件雖然具有查找功能,但是在速度和對未知病毒的檢測上存在一定的缺陷。隨著計算機技術的普及,計算機病毒數(shù)量和種類日益增多,早期的反病毒軟件只是針對個別的計算機病毒,反病毒軟件采用的基本檢測原理是靜態(tài)的特征碼匹配技術,早期反病毒軟件的程序與檢測所需的數(shù)據(jù)是緊密偶合的,隨著病毒數(shù)量的增多,反病毒軟件逐漸演化為檢測程序與特征碼數(shù)據(jù)庫相互獨立的形式,依賴于特定數(shù)據(jù)集合上的一組用于計算機病毒檢測和清除的程序序列被稱為計算機病毒檢測引擎,而這個特定的數(shù)據(jù)集合就是由反病毒專家建立的病毒特征碼數(shù)據(jù)庫,目前存在兩種趨勢:1)計算機病毒數(shù)量急劇增多,多數(shù)廠家的病毒特征碼庫超過3萬條檢測記錄;2)軟件系統(tǒng)規(guī)模變大,系統(tǒng)軟件與眾多的應用軟件的文件數(shù)量巨增"這些都對反病毒軟件的檢測效率提出了“挑戰(zhàn)提高病毒檢測引擎的檢測效率最常見的方法就是改良檢測算法,使算法的時間復雜度與特征碼庫中記錄數(shù)呈非線形關系”?,F(xiàn)有的病毒檢測、預防技術大多數(shù)是基于靜態(tài)的特征匹配方式,有效且可靠性高,但是對加密、變形的新一代病毒無能為力;靜態(tài)廣譜特征掃描技術,可以檢測變形病毒,但誤報率高,且易造成文件和數(shù)據(jù)的破壞;實時監(jiān)控和虛擬機技術能主動防毒,阻止計算機病毒進入系統(tǒng)內(nèi)存或阻止計算機病毒對磁盤的操作,但仍沒有脫離特征碼掃描,使得查毒速度降低,駐留內(nèi)存模塊易產(chǎn)生誤報,且不能及時地檢測變種和未知病毒;針對病毒檢測速度總是落后于病毒生成速度,通過查閱資料得知可變推理機技術,其優(yōu)點是能檢測變種和未知病毒,尤其針對現(xiàn)在較難查殺的具有蠕蟲和黑客程序功能的病毒。對比一些病毒檢測方法的優(yōu)缺點如下:(一)特征代碼法特征代碼法被早期應用于SCAN、CPAV等著名病毒檢測工具中。國外專家認為特征代碼法是檢測已知病毒的最簡單、開銷最小的方法。特征代碼法的實現(xiàn)步驟如下:集已知病毒樣本,病毒如果既感染COM文件,又感染EXE文件,對這種病毒要同時采集COM型病毒樣本和EXE型病毒樣本。在病毒樣本中,抽取特征代碼。依據(jù)如下原則:抽取的代碼比較特殊,不大可能與普通正常程序代碼吻合。抽取的代碼要適當長度,一方面維持特征代碼的唯一性,另一方面又不要有太大的空間與時間的開銷。如果一種病毒的特征代碼增長一個字節(jié),要檢測3000種病毒,增加的空間就是3000字節(jié)。在保持唯一性的前提下,盡量使特征代碼長度短些,以減少空間與時間開銷。在既感染COM文件又感染EXE文件的病毒樣本中,要抽取兩種樣本共有的代碼。將特征代碼納入病毒數(shù)據(jù)庫。打開被檢測文件,在文件中搜索,檢查文件中是否含有病毒數(shù)據(jù)庫中的病毒特征代碼。如果發(fā)現(xiàn)病毒特征代碼,由于特征代碼與病毒一一對應,便可以斷定,被查文件中患有何種病毒。采用病毒特征代碼法的檢測工具,面對不斷出現(xiàn)的新病毒,必須不斷更新版本,否則檢測工具便會老化,逐漸失去實用價值。病毒特征代碼法對從未見過的新病毒,自然無法知道其特征代碼,因而無法去檢測這些新病毒。特征代碼法的優(yōu)點是:檢測準確快速、可識別病毒的名稱、誤報警率低、依據(jù)檢測結果,可做解毒處理。其缺點是:不能檢測未知病毒、搜集已知病毒的特征代碼,費用開銷大、在網(wǎng)絡上效率低(在網(wǎng)絡服務器上,因長時間檢索會使整個網(wǎng)絡性能變壞)。其特點:1)速度慢。隨著病毒種類的增多,檢索時間變長。如果檢索5000種病毒,必須對5000個病毒特征代碼逐一檢查。如果病毒種數(shù)再增加,檢病毒的時間開銷就變得十分可觀。此類工具檢測的高速性,將變得日益困難。2)誤報警率低。3)不能檢查多形性病毒。特征代碼法是不可能檢測多態(tài)性病毒的。國外專家認為多態(tài)性病毒是病毒特征代碼法的索命者。4)不能對付隱蔽性病毒。隱蔽性病毒如果先進駐內(nèi)存,后運行病毒檢測工具,隱蔽性病毒能先于檢測工具,將被查文件中的病毒代碼剝?nèi)?,檢測工具的確是在檢查一個虛假的“好文件”,而不能報警,被隱蔽性病毒所蒙騙。(二)校驗和法將正常文件的內(nèi)容,計算其校驗和,將該校驗和寫入文件中或寫入別的文件中保存。在文件使用過程中,定期地或每次使用文件前,檢查文件現(xiàn)在內(nèi)容算出的校驗和與原來保存的校驗和是否一致,因而可以發(fā)現(xiàn)文件是否感染,這種方法叫校驗和法,它既可發(fā)現(xiàn)已知病毒又可發(fā)現(xiàn)未知病毒。在SCAN和CPAV工具的后期版本中除了病毒特征代碼法之外,還納入校驗和法,以提高其檢測能力。這種方法既能發(fā)現(xiàn)已知病毒,也能發(fā)現(xiàn)未知病毒,但是,它不能識別病毒類,不能報出病毒名稱。由于病毒感染并非文件內(nèi)容改變的唯一的非他性原因,文件內(nèi)容的改變有可能是正常程序引起的,所以校驗和法常常誤報警。而且此種方法也會影響文件的運行速度。病毒感染的確會引起文件內(nèi)容變化,但是校驗和法對文件內(nèi)容的變化太敏感,又不能區(qū)分正常程序引起的變動,而頻繁報警。用監(jiān)視文件的校驗和來檢測病毒,不是最好的方法。這種方法遇到下述情況:已有軟件版更新、變更口令、修改運行參數(shù)、校驗和法都會誤報警。校驗和法對隱蔽性病毒無效。隱蔽性病毒進駐內(nèi)存后,會自動剝?nèi)ト径境绦蛑械牟《敬a,使校驗和法受騙,對一個有毒文件算出正常校驗和。運用校驗和法查病毒采用三種方式:1)在檢測病毒工具中納入校驗和法,對被查的對象文件計算其正常狀態(tài)的校驗和,將校驗和值寫入被查文件中或檢測工具中,而后進行比較。2)在應用程序中,放入校驗和法自我檢查功能,將文件正常狀態(tài)的校驗和寫入文件本身中,每當應用程序啟動時,比較現(xiàn)行校驗和與原校驗和值。實現(xiàn)應用程序的自檢測。3)將校驗和檢查程序常駐內(nèi)存,每當應用程序開始運行時,自動比較檢查應用程序內(nèi)部或別的文件中預先保存的校驗和。校驗和法的優(yōu)點是:方法簡單且能發(fā)現(xiàn)未知病毒、被查文件的細微變化也能發(fā)現(xiàn)。其缺點是:發(fā)布通行記錄正常態(tài)的校驗和、會誤報警、不能識別病毒名稱、不能對付隱蔽型病毒。(三)行為監(jiān)測法利用病毒的特有行為特征性來監(jiān)測病毒的方法,稱為行為監(jiān)測法。通過對病毒多年的觀察、研究,有一些行為是病毒的共同行為,而且比較特殊。在正常程序中,這些行為比較罕見。當程序運行時,監(jiān)視其行為,如果發(fā)現(xiàn)了病毒行為,立即報警。這些作為監(jiān)測病毒的行為特征如下:1)占有INT13H所有的引導型病毒,都攻擊Boot扇區(qū)或主引導扇區(qū)。系統(tǒng)啟動時,當Boot扇區(qū)或主引導扇區(qū)獲得執(zhí)行權時,系統(tǒng)剛剛開工。一般引導型病毒都會占用INT13H功能,因為其他系統(tǒng)功能未設置好,無法利用。引導型病毒占據(jù)INT13H功能,在其中放置病毒所需的代碼。2)改DOS系統(tǒng)為數(shù)據(jù)區(qū)的內(nèi)存總量病毒常駐內(nèi)存后,為了防止DOS系統(tǒng)將其覆蓋,必須修改系統(tǒng)內(nèi)存總量。3)對COM、EXE文件做寫入動作病毒要感染,必須寫COM、EXE文件。4)病毒程序與宿主程序的切換染毒程序運行中,先運行病毒,而后執(zhí)行宿主程序。在兩者切換時,有許多特征行為。行為監(jiān)測法的長處:可發(fā)現(xiàn)未知病毒、可相當準確地預報未知的多數(shù)病毒。行為監(jiān)測法的短處:可能誤報警、不能識別病毒名稱、實現(xiàn)時有一定難度。(四)軟件模擬法多態(tài)性病毒每次感染都變化其病毒密碼,對付這種病毒,特征代碼法失效。因為多態(tài)性病毒代碼實施密碼化,而且每次所用密鑰不同,把染毒的病毒代碼相互比較,也無法找出相同的可能作為特征的穩(wěn)定代碼。雖然行為檢測法可以檢測多態(tài)性病毒,但是在檢測出病毒后,因為不知病毒的種類,難于做消毒處理。結合我們目前的現(xiàn)有條件設備,并根據(jù)現(xiàn)有軟件所使用的開發(fā)軟件,我們采用了匯編語言和WIN32開發(fā)工具,設計開發(fā)了《模擬殺毒軟件對磁盤進行掃描》,開發(fā)編寫模擬病毒掃描程序,能對選擇的磁盤文件進行掃描。動態(tài)顯示掃描過程(文件路徑、文件個數(shù)、找到的文件個數(shù))。掃描結果存入文件(掃描過的文件個數(shù)、找到的文件列表)。顯示結果文件內(nèi)容。等幾個小模塊,下面我們將分四章詳細介紹相關的情況,第二章介紹有關開發(fā)工具的情況;第三章將詳細介紹本系統(tǒng)的總體設計思路;第四章詳細介紹各功能模塊的設計思路和設計方法及過程;第五章是對系統(tǒng)測試;第六章是對系統(tǒng)開發(fā)的總解析。二開發(fā)工具概述(一)匯編語言概述匯編語言(AssemblyLanguage)是面向機器的程序設計語言。匯編語言是計算機系統(tǒng)提供給用戶的最快、最有效的語言,也是能對硬件直接編程的語言。因此,對空間和時間要求很高的程序,或需要直接控制硬件的程序,必須使用匯編語言進行程序設計。在匯編語合中,用助記符(Memoir)代替操作碼,用地址符號(Symbol)或標號(Label)代替地址碼。這樣用符號代替機器語言的二進制碼,就把機器語言變成了匯編語言。于是匯編語言亦稱為符號語言。使用匯編語言編寫的程序,機器能直接識別,要由一種程序將匯編語言翻譯成機器語言,這種起翻譯作用的程序叫匯編程序,匯編程序是系統(tǒng)軟件中語言處理系統(tǒng)軟件。匯編語言比機器語言易于讀寫、易于調(diào)試和修改,同時也具有機器語言執(zhí)行速度快,占內(nèi)存空間少等優(yōu)點,但在編寫復雜程序時具有明顯的局限性,匯編語言依賴于具體的機型,不能通用,也不能在不同機型之間移植。匯編語言由于采用了助記符號來編寫程序,比機器語言的二進制代碼編程要方便些,在一定程度上簡化了編程過程。匯編語言的特點是用符號代替了機器指令代碼,而且助記符與指令代碼一一對應,基本保留了機器語言的靈活性。使用匯編語言能面向機器并較好地發(fā)揮機器的特性,得到質量較高的程序。匯編語言是面向具體機型的,它離不開具體計算機的指令系統(tǒng),因此,對于不同型號的計算機,有著不同結構的匯編語言,而且,對于同一問題所編制的匯編語言程序在不同種類的計算機間是互不相通的。匯編語言中由于使用了助記符號,用匯編語言編制的程序輸入計算機,計算機不能用機器語言編寫的程序一樣直接識別和執(zhí)行,必須通過預先放入計算機的“匯編程序”的加工和翻譯,才能變成能夠被計算機識別和處理的二進制代碼程序。用匯編語言等非機器語言書寫好的符號程序稱為源程序,運行時匯編程序要將源程序翻譯成目標程序。目標程序是機器語言,它一經(jīng)被安置在內(nèi)存的預定位置上,就能被計算機的CPU處理和執(zhí)行。匯編語言像機器指令一樣,是硬件操的控制信息,因而仍然是面向機器的語言,使用起來還是比較繁瑣時,通用性也差。但是,匯編語言用來編制系統(tǒng)軟件和過程控制軟件,其目標程序占用的內(nèi)存空間少,運行速度快,有著高級語言不可替代的用途。(二)匯編語言和高級語言的比較匯編語言的實質和機器語言是相同的,都是直接對硬件操作,只不過指令采用了英文縮寫的標識符,更容易識別和記憶。它同樣需要編程者將每一步具體的操作用命令的形式寫出來。匯編程序通常由三部分組成:指令、偽指令和宏指令。匯編程序的每一句指令只能對應實際操作過程中的一個很細微的動作,例如移動、自增,因此匯編源程序一般比較冗長、復雜、容易出錯,而且使用匯編語言編程需要有更多的計算機專業(yè)知識,但匯編語言的優(yōu)點也是顯而易見的,用匯編語言所能完成的操作不是一般高級語言所能實現(xiàn)的,而且源程序經(jīng)匯編生成的可執(zhí)行文件不僅比較小,而且執(zhí)行速度很快。高級語言是目前絕大多數(shù)編程者的選擇。和匯編語言相比,它不但將許多相關的機器指令合成為單條指令,并且去掉了與具體操作有關但與完成工作無關的細節(jié),例如使用堆棧、寄存器等,這樣就大大簡化了程序中的指令。同時,由于省略了很多細節(jié),編程者也就不需要有太多的專業(yè)知識。高級語言主要是相對于匯編語言而言,它并不是特指某一種具體的語言,而是包括了很多編程語言,如目前流行的VB、VC、FoxPro、Delphi等,這些語言的語法、命令格式都各不相同。高級語言所編制的程序不能直接被計算機識別,必須經(jīng)過轉換才能被執(zhí)行,按轉換方式可將它們分為兩類:解釋類:執(zhí)行方式類似于我們?nèi)粘I钪械摹巴暦g”,應用程序源代碼一邊由相應語言的解釋器“翻譯”成目標代碼(機器語言),一邊執(zhí)行,因此效率比較低,而且不能生成可獨立執(zhí)行的可執(zhí)行文件,應用程序不能脫離其解釋器,但這種方式比較靈活,可以動態(tài)地調(diào)整、修改應用程序。編譯類:編譯是指在應用源程序執(zhí)行之前,就將程序源代碼“翻譯”成目標代碼(機器語言),因此其目標程序可以脫離其語言環(huán)境獨立執(zhí)行,使用比較方便、效率較高。但應用程序一旦需要修改,必須先修改源代碼,再重新編譯生成新的目標文件(*.OBJ)才能執(zhí)行,只有目標文件而沒有源代碼,修改很不方便?,F(xiàn)在大多數(shù)的編程語言都是編譯型的,例如VisualC++、VisualFoxPro、Delphi等。匯編語言與處理器密切相關。每種處理器都有自己的指令系統(tǒng),相應的匯編語言各不相同。所以,匯編語言程序的通用性、可移植性較差。相對來說,高級語言與具體計算機無關,高級語言程序可以在多種計算機上編譯后執(zhí)行。匯編語言功能有限,又涉及寄存器、主存單元等硬件細節(jié),所以編寫程序比較繁瑣,調(diào)試起來也比較困難。高級語言提供了強大的功能,采用類似自然語言的語法,所以容易被掌握和應用,它不必關心諸如標志、堆棧等瑣碎問題。匯編語言本質上就是機器語言,它可以直接、有效地控制計算機硬件,因而容易產(chǎn)生運行速度快、指令序列短小的高效率目標程序。高級語言不易直接控制計算機的各種操作,編譯程序產(chǎn)生的目標程序往往比較龐大、程序難以優(yōu)化,所以運行速度較慢。
可見匯編語言的主要優(yōu)點就是可以直接控制計算機硬件部件,可以編寫在“時間”和“空間”兩方面最有效的程序。這些優(yōu)點使得匯編語言在程序設計中占有重要的位置,是不可被取代的。匯編語言的缺點也是明顯的。它與處理器密切有關,要求程序員比較熟悉計算機硬件系統(tǒng)、考慮許多細節(jié)問題,導致編寫程序繁瑣,調(diào)試、維護、交流和移植困難。因此,有時可以采用高級語言和匯編語言混合編程的方法,互相取長補短,更好地解決實際問題。三系統(tǒng)設計思想由于模擬殺毒軟件對磁盤文件的掃描過程,重點是殺毒軟件的殺毒引擎。在模擬殺毒軟件引擎對磁盤進行掃描過程中,主要采用傳統(tǒng)的基于特征碼(病毒特征庫)的靜態(tài)掃描技術,即在文件中尋找特定十六進制串,如果找到,就可判定文件感染了某種病毒,暫不采用啟發(fā)式掃描等更先進更復雜的技術。而且,由于現(xiàn)代PC磁盤上文件格式多種多樣,特別是各種壓縮的音頻、視頻文件非常多,其中涉及多媒體中的數(shù)據(jù)編碼和壓縮解壓縮算法,如果對各種文件格式都進行匹配掃描,會使程序的復雜度和規(guī)模急劇增大,鑒于此,在不失去對殺毒引擎掃描磁盤過程的模擬的大前提下,對非二進制文件只進行簡單的基于文件名的查找,而對二進制文件則進行類似病毒的模式匹配。編寫模擬病毒掃描程序,能對選擇的磁盤文件進行掃描。動態(tài)顯示掃描過程(文件路徑、文件個數(shù)、找到的文件個數(shù))。掃描結果存入文件(掃描過的文件個數(shù)、找到的文件列表)。顯示結果文件內(nèi)容。程序主要是利用DOS中斷功能調(diào)用,對選定的磁盤分區(qū)進行掃描查找,如果查找到匹配文件且符合程序中的預置條件(即待查找的文件名為*.txt),則利用病毒庫文件中的各個病毒對匹配文件進行查找(其中對文件的訪問采用的代號式磁盤存取方式),如果文件中包含病毒,則刪除文件,若不含病毒,不作處理;如果只是普通的文件或者磁盤分區(qū)掃描(即程序中的預置條件不符合),則打印輸出文件的完整路徑。在利用DOS中斷功能調(diào)用對磁盤掃描或者對用戶指定的文件進行查找時,最開始是從用戶選擇的磁盤分區(qū)根目錄開始查找的,查找完根目錄中的所有文件和文件夾后,要對根目錄的第一個文件夾內(nèi)容進行遞歸查找,然后進一步進入到根目錄第一個文件夾中的第一個文件夾進行查找,直到根目錄第一個文件夾的最內(nèi)層文件,然后遞歸逐層返回,這樣根目錄的第一個文件夾查找完畢;然后是根目錄中的下一個文件夾遞歸查找……直到根目錄中的所有文件夾被查找一遍,則所選磁盤分區(qū)查找完畢,每查找到一個匹配文件就輸出文件的完整路徑。其實對選定磁盤分區(qū)進行掃描和對用戶指定文件進行查找所采用的實現(xiàn)思想和DOS中斷功能調(diào)用都是一樣的,只是磁盤掃描時使用的是程序預置的通配符文件名*.*而文件查找時使用的是用戶輸入的文件名。也就是說磁盤掃描時由于使用的是通配符文件名所有的文件都是匹配的,所以選定分區(qū)上的所有文件和文件夾都將被掃描到且顯示完整路徑;而在文件查找中,使用的是用戶輸入的文件名,所以只有和輸入的文件名匹配的文件及文件夾才會被認為匹配并顯示路徑。在整個程序中,使用通配符*代表任意多個字符(包括0個),通配符?代表任意一個字符。當用戶指定的待查找的文件名為*.txt時(程序中假設病毒只存在于txt文件中,如此是為了免去對復雜的音視頻文件的處理,因為此程序的目的就是簡單模擬早期病毒掃描程序的病毒掃描過程),需對查找到的匹配文件用病毒庫中的病毒進行匹配,已確定文件中有無病毒。采用文件代號式磁盤存取方式,打開待病毒掃描的文件,從文件中順序讀取指定個數(shù)的字符存于緩沖區(qū)中,然后對緩沖區(qū)中的字符串用病毒庫中的病毒逐個進行匹配。由于實現(xiàn)的簡單和時間倉促,沒有考慮包含病毒的文件在被多次讀取到緩沖區(qū)時,其中的病毒串被截斷,即病毒串的一部分在前一次讀取的緩沖區(qū)中,另一部分在當前讀取的緩沖區(qū)中,又由于每次讀取之前緩沖區(qū)都會被清零覆蓋,造成本來存在病毒的文件被認為不包含病毒。為了克服此錯誤,可以采用兩個循環(huán)式的緩沖區(qū)。四程序設計過程詳解(一)主要實現(xiàn)功能編寫模擬病毒掃描程序,對選擇的磁盤文件進行掃描。(例如:A:B:C:D:E:……)并動態(tài)顯示掃描過程(正在掃描的文件路徑),在掃描完之后顯示掃描到的文件夾(目錄)個數(shù)、文件個數(shù)。如果指定了文件名(對此文件進行查找,可以用通配符*和?),則最后顯示的結果為掃描到的文件夾(目錄)個數(shù)、文件個數(shù)、找到的文件路徑列表。(二)程序總體流程圖圖4-1程序總體流程(三)程序設計說明這個程序主要用到了int21h的4eh和4fh兩個功能,在使用這一功能之前先要設置數(shù)據(jù)傳輸區(qū)(DTA)。設置DTA方法:ah=1AhDS:DX=DTA地址int21hDTA簡介: DTA是一個43字節(jié)的結構體:FILEDTA LABEL BYTE;DB 21DUP(20H);保留為子目錄搜索;這21個字節(jié)為AH=4FH,INT21H提供信息FILEATTRDB 0;文件屬性FIELTIMEDW0;文件時間FILEDATEDW 0;文件日期LOWSIZE DW 0;文件大?。旱妥止?jié)HIGHSIZE DW 0;文件大?。焊咦止?jié)FILENAME DB 13DUP(20H);查到的匹配文件名,ASCIZ形式ah=4eh,int21h功能是查找第一個匹配文件,調(diào)用參數(shù)為:DS:DX=ASCIZ串地址(存的是欲查找的文件名,支持通配符*和?。故使用文件名為*.*可以實現(xiàn)對任何文件名的匹配,從而為實現(xiàn)磁盤掃描提供有力工具;如果使用文件名為*則僅可找到ASCIZ串所指路徑下的文件夾。)CX=欲查找的文件的屬性(本程序中CX=16h,以保證可找到任何屬性的匹配文件)文件的屬性字節(jié)為:AH=4FH,INT21H功能是查找下一個匹配文件,調(diào)用參數(shù)為:無須顯式傳遞參數(shù),但在調(diào)用該中斷之前必須保證DTA中存放著原來調(diào)用4eh時留下的信息(前21字節(jié))?;谝陨线@些知識,本程序的設計思想如下:表4-1設計表格位01234567屬性只讀隱藏系統(tǒng)文件卷標子目錄存檔文件未定義未定義總的思想是,先實現(xiàn)主要功能,再在此基礎上逐步添枝加葉最終實現(xiàn)題目要求的功能。1過程scan該過程實現(xiàn)對用戶所選的磁盤進行掃描。在最初的ASCIZ串(本程序中用file_name作為其首地址)中置形式為:驅動器號:\*.*。此后根據(jù)用戶輸入的欲掃描的驅動器號設置原先預置的ASCIZ串。在調(diào)用過程scan前已設定好DTA,先用DTA地址一直在BX中存放。算法描述如下:Step1:調(diào)用INT21H的4EH子功能,查找第一個匹配文件,其文件屬性這一調(diào)用參數(shù)設置為16H(這樣它與*.*的共同作用下就可以查到任何屬性的任何文件名)。Step2:如果沒有找到可匹配文件轉Step3,否則轉Step4。Step3:將ASCIZ串中最后一個‘\’改為其它值(本程序是將它改為空格),return(過程search結束)。Step4:保存查到的匹配文件的屬性??吹玫降奈募欠褚浴?’開頭(防止取得的文件夾名為‘.’或‘..’從而進入死循環(huán)),如果是跳轉Step11,否則執(zhí)行下一步。Step5:將新查找到文件名合并到現(xiàn)有的file_name中以形成該文件的絕對路徑。Step6:利用保存的文件屬性判斷查到的匹配文件是否是文件夾,如果不是跳轉Step10,否則執(zhí)行下一步。Step7:在file_name末尾添加‘\*.*’,00h。Step8:文件夾計數(shù)器加一。Step9:保存現(xiàn)用DTA地址,設置一個新的DTA,遞歸調(diào)用過程scan來查找該文件夾中的文件。在過程返回后,利用剛才保存的地址將原先用的DTA恢復。跳轉Step11。Step10:文件計數(shù)器加一,顯示查找到的文件的完整路徑。Step11:利用INT21H的4FH子功能查找下一個匹配文件。跳轉Step2。2過程search過程實現(xiàn)的是在用戶選擇的磁盤對用戶所輸入的文件名進行查找。查找的文件名可含通配符*和?(*可以代表任意含0個多個字符,?可代表任一字符)。須注意的是:如果輸入的文件名沒有擴展名,則僅能找到與之匹配的文件夾。其余情況和windows操作系統(tǒng)的搜索功能一樣,如:先輸入d,再輸入*.exe便可找到d盤中所有的exe文件。先輸入d,再輸入matlab.*則可以找到所有名為matlab的文件和文件夾。而先輸入d,再輸入matlab只能找到名為matlab的文件夾。先輸入d,再輸入m*.*,則可以找到所有以m開頭的文件和文件夾。在調(diào)用過程search之前先利用過程sort_name(過程sort_name根據(jù)用戶輸入的磁盤名和文件名處理好file_name中的ASCIZ串。如用戶輸入的磁盤名為c,文件名為w?n*.*則調(diào)用過程sort_name后該串變?yōu)椤甤:\w?n*.*’,00h)。算法描述如下:Step1:調(diào)用INT21H的4EH子功能,查找目前文件夾中第一個匹配文件,其文件屬性這一調(diào)用參數(shù)設置為16H。Step2:如果沒有找到匹配文件跳轉Step8,否則執(zhí)行下一步。Step3:找到的文件如果不是文件夾,跳轉Step5,否則執(zhí)行下一步。Step4:文件夾計數(shù)器加一,跳轉Step6。Step5:文件計數(shù)器加一。Step6:整理好查到的文件或文件夾的絕對路徑并顯示。Step7:保存BX值(現(xiàn)用DTA地址),利用INT21H的4FH子功能查找下一個匹配文件,恢復BX值。跳轉Step2。Step8:查找目前文件夾中的第一個文件夾。Step9:如果找到文件夾跳轉Step11,否則執(zhí)行下一步。 Step10:將ASCIZ串中最后一個‘\’改為其它值(本程序是將它改為空格),return(過程scan結束)。Step11:看得到的文件名是否以‘.’開頭(防止取得的文件夾名為‘.’或‘..’從而進入死循環(huán)),如果是跳轉Step13,否則執(zhí)行下一步。Step12:保存現(xiàn)用DTA地址,設置一個新的DTA,遞歸調(diào)用過程search在新找到的文件夾中查找匹配的文件。在過程返回后,利用剛才保存的地址將原先用的DTA恢復。Step13:利用INT21H的4FH子功能查找下一個文件夾。跳轉Step9。幾個非主要過程和宏的功能說明如下:宏display:在屏幕上顯示以所傳參數(shù)msg為首地址的字符串。宏set_dta:設置以所傳參數(shù)為首地址的43個字節(jié)為現(xiàn)行DTA。3過程clrscr清屏。4過程sort_name根據(jù)用戶輸入的磁盤名和文件名處理好file_name中的ASCIZ串。如用戶輸入的磁盤名為c,文件名為w?n*.*則靜調(diào)用過程sort_name后該串變?yōu)椤甤:\w?n*.*’,00h。(為過程search服務)5過程print將si(低字節(jié)),di(高字節(jié))中的四字節(jié)的內(nèi)容轉換為10進制后在屏幕輸出。(四)軟件操作說明運行該程序后屏幕上顯示如下信息: 圖4-2程序主界面如果輸入1,選擇的是模擬病毒掃描功能,而后屏幕顯示: 圖4-3用戶輸入1后的界面 這時用戶輸入想要掃描的磁盤號,這里我輸入D盤符,然后模擬病毒掃描(全屏觀察結果效果較好)。掃描完之后顯示掃過的文件和文件夾數(shù)目(若輸入的磁盤號無效,程序不報錯,最終顯示的找到數(shù)目為0,下同)。圖4-4顯示掃描盤符后的文件名和文件夾個數(shù)如果輸入2,選擇的是在用戶所選的磁盤中查找用戶指定的文件。而后屏幕顯示:圖4-5用戶輸入2后的界面這時用戶輸入想要在哪個盤查找的磁盤名,如想要在c盤查找就輸入c。這時屏幕又顯示如下信息:圖4-5用戶輸入需要查找C盤符界面這時用戶輸入想要查找的文件名。查找的文件名可含通配符*和?(*可以代表任意[含0個]多個字符,?可代表任一字符)。五程序的運行和測試(一)程序實現(xiàn)的算法當查找到一個.txt即文本文件后,用病毒庫里面的各個病毒(上次我找到了一個病毒庫文件,源代碼的數(shù)據(jù)段中包含有二進制形式的病毒代碼。因為我們只是模擬病毒掃描,采用的病毒庫非常小,才幾個病毒,各個病毒也很短,就幾十字節(jié)長,可以說是原始社會的病毒了,和現(xiàn)今成熟的商業(yè)殺毒軟件引擎不可同日而語,他們還要用到人工智能,模糊數(shù)學和網(wǎng)絡安全等一系列復雜的機制。我們用的字符串模式匹配查毒的方式可能是很早的殺毒軟件在dos下采用的方法了,逐個對文件內(nèi)容進行模式匹配,直到匹配成功或者已經(jīng)匹配到文件尾,匹配成功即認為該文本文件包含病毒而刪除。病毒查找過程:查找到一個.txt文本文件后,采用int21h3dh號中斷,文件代號式磁盤存取方式打開此文件,采用int21h3fh號中斷,從打開的文件中讀取固定個數(shù)字符(源代碼中文100個)到緩沖區(qū)buffer中。然后用各個病毒逐個對緩沖區(qū)中的字符串進行模式匹配,匹配成功就置病毒查找到標志(virusfind)為真,刪除此文件,結束對此文件的匹配查找;如果所有病毒都匹配不成功,則清空緩沖區(qū)并從文件中繼續(xù)讀取固定字符到緩沖區(qū),然后繼續(xù)匹配,直到匹配成功或者到達文件尾結束。在對緩沖區(qū)中字符串進行病毒模式匹配時,為了實現(xiàn)的簡便起見,可以采用原始的子串模式匹配算法。即用i,j兩個游標分別指向緩沖區(qū)和病毒串,如果當前所指字符匹配,則兩游標都加1即前移一個字符,直到不匹配,重置指向病毒串的游標j為0,指向緩沖區(qū)的游標i在上次j為0時i值的基礎上加1。如此,直到查找到病毒,病毒掃描過程結束,刪除此文件;如果到達緩沖區(qū)末尾還未查找到病毒,則將緩沖區(qū)清零并繼續(xù)從文件中順序讀取字符存放到緩沖區(qū)中,繼續(xù)用病毒庫中的病毒進行匹配。可能對整個文件都查找完也未發(fā)現(xiàn)病毒,說明此文件中不包含病毒,對此文件不需要作處理。原始的子串模式匹配算法雖然簡單,但時間復雜度很高,效率非常低下,因為病毒掃描程序要求很高的執(zhí)行效率,所以可以采用高效的子串模式匹配算法即著名的KMP算法。KMP算法是一種模式匹配的改進算法,此算法可以在O(n+m)的時間數(shù)量級上完成串的模式匹配操作。其改進在于:每當一趟匹配過程中出現(xiàn)字符比較不等時,不需要回溯i指針,而是利用已經(jīng)得到的“部分匹配”的結果將模式向右“滑動”盡可能遠的一段距離后,繼續(xù)進行比較。先看看最“樸素”的算法:///findatemplateinaIndex(char*S,char*T,intpos){inti=pos,j=1;while(i<=S[0]&&j<=T[0]){if(S[i]==T[j]){++i;++j;}\\如果相同,則繼續(xù)向后比較else{i=i-j+2;j=1;}\\如果不同,就回溯,重新查找}if(j>T[0])returni-T[0];elsereturn0;}//Index用KMP算法比較對比
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 服裝批發(fā)居間合同委托書
- 知識產(chǎn)權運營股權居間合同
- 專業(yè)運動器材銷售與推廣合同
- 弱電項目總結
- 游戲規(guī)則與操作指南發(fā)布平臺建設作業(yè)指導書
- 農(nóng)業(yè)產(chǎn)業(yè)鏈社會責任履行實戰(zhàn)指導書
- 三農(nóng)村集體資產(chǎn)管理方案
- 體育訓練與比賽作業(yè)指導書
- 安能轉讓合同
- 消防安全技術服務項目合同
- 2025福建新華發(fā)行(集團)限責任公司校園招聘30人高頻重點提升(共500題)附帶答案詳解
- 油氣長輸管道檢查標準清單
- 山東鐵投集團招聘筆試沖刺題2025
- 小學二年級100以內(nèi)連加連減豎式計算練習題
- 圖像敘事的跨學科視野-洞察分析
- 2025年天津市政集團公司招聘筆試參考題庫含答案解析
- 急性缺血性卒中再灌注治療指南2024解讀
- 暑假假期安全教育(課件)-小學生主題班會
- 2025年中考英語總復習:閱讀理解練習題30篇(含答案解析)
- 醫(yī)院醫(yī)用織物洗滌(租賃)服務方案投標文件
- 陜西省英語中考試卷與參考答案(2024年)
評論
0/150
提交評論