劉欣宜
(云南大學(xué)軟件學(xué)院,650500)
淺談可執(zhí)行文件格式發(fā)展歷程
劉欣宜
(云南大學(xué)軟件學(xué)院,650500)
文章針對(duì)軟件安全基礎(chǔ)的Windows可執(zhí)行文件四個(gè)發(fā)展過(guò)程下的可執(zhí)行文件格式展開(kāi)研究性分析。引入可執(zhí)行文件格式概念并簡(jiǎn)要介紹MZ、NE、LE、PE格式,選取DOS系統(tǒng)下的com格式和MZ格式以及另外的PE格式進(jìn)行深入探討,區(qū)分異同進(jìn)行比較。同時(shí)談及病毒感染概念,對(duì)其原理進(jìn)行詳盡解釋。本文對(duì)于計(jì)算機(jī)基礎(chǔ)知識(shí)和軟件原理的鞏固掌握以及軟件安全領(lǐng)域的深入研究挖掘具有重大的參考價(jià)值和宏觀指導(dǎo)意義。
軟件安全;可執(zhí)行文件格式;感染原理及預(yù)防
隨著社會(huì)科學(xué)的進(jìn)步以及計(jì)算機(jī)技術(shù)的飛速發(fā)展,當(dāng)今社會(huì)逐步走向信息化,軟件的開(kāi)發(fā)和應(yīng)用走進(jìn)大眾生活的方方面面。在信息技術(shù)提高國(guó)民生活水平,促進(jìn)社會(huì)進(jìn)步的同時(shí),軟件安全也逐漸成為當(dāng)今社會(huì)高度關(guān)注的話題。病毒感染、黑客非法入侵都對(duì)軟件安全造成了巨大的威脅。提高軟件安全機(jī)制,增強(qiáng)軟件安全相關(guān)技能需要從根本上掌握軟件等一系列相關(guān)知識(shí)。本質(zhì)上對(duì)于提高知識(shí)水平的迫切需要體現(xiàn)出可執(zhí)行文件及可執(zhí)行文件格式掌握的必要性。熟知Com格式、MZ格式以及PE格式存儲(chǔ)執(zhí)行原理,并對(duì)入侵感染原理熟練掌握,才能在根本上防止一系列非法操作。實(shí)現(xiàn)對(duì)軟件的保護(hù)和軟件安全性的捍衛(wèi),是每一位軟件安全工作者義不容辭的責(zé)任。
Windows操作系統(tǒng)從最初僅僅是MS-DOS模擬環(huán)境的桌面操作系統(tǒng)逐步更新升級(jí)為如今最受大眾喜愛(ài)的操作系統(tǒng)。在Windows操作系統(tǒng)下,Windows可執(zhí)行文件經(jīng)歷了分別為DOS、Win3.x、Win3.x和Win9x以及Win9x和WinNT/2000/XP四個(gè)發(fā)展階段。每個(gè)發(fā)展階段都對(duì)應(yīng)在相應(yīng)的可執(zhí)行文件格式。在以上四個(gè)過(guò)程出現(xiàn)的MZ格式、NE格式、LE格式以及PE格式提供了不同的可執(zhí)行文件方式。在這四個(gè)Windows可執(zhí)行文件格式中,MZ格式和NE格式屬于Win16,PE格式屬于Win32,而LE格式則是可以兼容Win16和Win32的操作系統(tǒng)。其中MZ格式主要以.com和.exe為擴(kuò)展名,LE為線性可執(zhí)行文件,用于虛擬設(shè)備驅(qū)動(dòng)程序,可驅(qū)動(dòng)鍵盤鼠標(biāo)等虛擬程序。PE指的是具有用來(lái)提供函數(shù)調(diào)用的輸出表的可移動(dòng)可執(zhí)行文件,其中可移動(dòng)不是指跨平臺(tái),而是指與系統(tǒng)無(wú)關(guān),針對(duì)于同一種操作系統(tǒng)下的任何設(shè)備均可使用的文件,經(jīng)過(guò)不斷完善發(fā)展,成為具有較高優(yōu)越性的可執(zhí)行文件格式。
COM格式文件執(zhí)行單任務(wù),及在cmd窗口下只能執(zhí)行一個(gè)程序。其規(guī)定最大內(nèi)存空間為64K,因此該格式只能有一個(gè)段碼,所用信息必須放入同一個(gè)段中。在COM格式文件中最大的問(wèn)題就是該格式?jīng)]有重定位信息,因此可能會(huì)引起程序的崩潰。重定位指的是在裝入程序的過(guò)程中對(duì)目標(biāo)程序中的指令和數(shù)據(jù)進(jìn)行修改,即在規(guī)定保存空間被操作系統(tǒng)或其他程序使用的時(shí)候?yàn)橄嚓P(guān)變量重新分配保存空間。例如在執(zhí)行A.EXE可執(zhí)行文件同時(shí)調(diào)用1.dll和2.dll動(dòng)態(tài)鏈接庫(kù),而其所設(shè)定的變量均指定偏移地址為1000H的保存空間,需要為其中一個(gè)變量重新分配空間。
在COM格式文件中包含程序二進(jìn)制代碼的絕對(duì)映像,使得該文件格式可以將信息完全相同地從硬盤拷貝到內(nèi)存之中。該絕對(duì)映像占用連續(xù)的內(nèi)存空間,不能使用分離的空間進(jìn)行保存,因此可能在執(zhí)行文件過(guò)程中提示內(nèi)存空間不足。
執(zhí)行COM格式文件首先需要分配內(nèi)存,由于COM格式只能位于一個(gè)段中,因此下一步需要尋找一段內(nèi)存為64K的空間裝載程序,在該段中程序段前綴PSP確定文件執(zhí)行時(shí)所用的運(yùn)行環(huán)境,占用256個(gè)字節(jié),堆棧占用256個(gè)字節(jié),實(shí)際剩下最大內(nèi)存為65024個(gè)字節(jié)的空間供程序使用。準(zhǔn)備好存儲(chǔ)空間后運(yùn)用COMMAND.COM提供的EXEC對(duì)其進(jìn)行裝載,在CS:IP指定的內(nèi)存空間執(zhí)行第一條指令,實(shí)現(xiàn)COM格式文件的執(zhí)行操作。
MZ格式可執(zhí)行文件中將代碼劃分為MZ文件頭、重定位表以及二進(jìn)制代碼三大塊進(jìn)行保存。其中MZ文件頭規(guī)定執(zhí)行文件的入口地址,可通過(guò)設(shè)置SS、SP、CS、IP的取值進(jìn)行修棧,從而實(shí)現(xiàn)重定位。二進(jìn)制代碼相當(dāng)于機(jī)器指令,經(jīng)過(guò)編譯鏈接,用于檢查語(yǔ)法錯(cuò)誤以及創(chuàng)建相應(yīng)的數(shù)據(jù)結(jié)構(gòu)。
COM格式與MZ格式均含有16位程序的二進(jìn)制代碼。但與COM格式相比,MZ格式具有了重定位功能,在硬盤文件映射到內(nèi)存文件的過(guò)程中采用相對(duì)映射,使得代碼保存地址在硬盤和內(nèi)存中可能不同。COM格式文件為一段連續(xù)的代碼,不能進(jìn)行分塊保存,在硬盤文件采用絕對(duì)映射方式映射到內(nèi)存文件中時(shí)保存為PSP程序段前綴與二進(jìn)制編碼兩段的形式,該格式在執(zhí)行時(shí)只能放入指定的內(nèi)存空間中,較為死板。而MZ格式文件分三塊進(jìn)行保存,相對(duì)映射后在內(nèi)存文件中依然為三段形式,代碼保存在第三個(gè)模塊及二進(jìn)制代碼處。此外由于已經(jīng)具備MZ文件頭,因此不再需要添加PSP程序段前綴。DOS可以將其裝載到任意位置,相對(duì)來(lái)說(shuō)較為靈活。
PE格式譯為可移植的可執(zhí)行文件,與COM格式和MZ格式不同,其內(nèi)含32位程序代碼和數(shù)據(jù),將COM格式和MZ格式中的二進(jìn)制編碼塊進(jìn)行了區(qū)分和細(xì)化。與其他格式相比,其具有的顯著優(yōu)點(diǎn)在于PE格式含有用來(lái)提供函數(shù)調(diào)用的輸出表Exports,用來(lái)提供編寫程序時(shí)所有系統(tǒng)函數(shù)或自定義函數(shù)。
PE格式中涉及到了地址關(guān)聯(lián)概念。硬盤文件中某條指令映射到4G虛擬內(nèi)存空間中相應(yīng)位置,在虛擬內(nèi)存處執(zhí)行指令時(shí),指令所涉及的相關(guān)變量通過(guò)地址關(guān)聯(lián)在硬盤中找到相應(yīng)存儲(chǔ)位置,使得指令得以執(zhí)行。
在硬盤文件到虛擬內(nèi)存的映射過(guò)程中,指令的偏移地址可能發(fā)生變化,這是由保存粒度決定的。正常情況下,指令在虛擬內(nèi)存中的偏移地址會(huì)大于其在硬盤中的偏移地址。硬盤以扇區(qū)(512字節(jié))為單位為可執(zhí)行文件分配保存空間,而虛擬內(nèi)存以頁(yè)面(1024字節(jié))為單位為可執(zhí)行文件分配保存空間,其不同的保存粒度,決定了指令映射后在硬盤和虛擬內(nèi)存中的偏移地址可能不同。但在Windows系統(tǒng)下,PE文件只進(jìn)行了地址關(guān)聯(lián),并未對(duì)相關(guān)內(nèi)容作出改變,因此其在磁盤和內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)布局始終是相同的。
在虛擬內(nèi)存中,系統(tǒng)以頁(yè)面為單位為程序分配相應(yīng)的保存空間。但由于連續(xù)代碼段占用空間小于分配頁(yè)面,因此會(huì)形成小字節(jié)的空白空間。感染的基本原理即為在不修改程序原來(lái)內(nèi)容的前提下,在小字節(jié)空白空間中寫進(jìn)例如病毒等非法指令,之后想辦法在代碼段區(qū)域中找到j(luò)mp指令,修改該跳轉(zhuǎn)指令,使程序在執(zhí)行時(shí)跳轉(zhuǎn)到相應(yīng)裝載有非法指令的小字節(jié)空白空間,從而實(shí)現(xiàn)感染。
由感染最基本的原理可得知,防止感染最有效的方法在于去掉小字節(jié)空白空間,即將多個(gè)空白空間進(jìn)行合并,合并為大塊內(nèi)存空間,使得計(jì)算機(jī)得以為大塊區(qū)域分配內(nèi)存空間。從而引入壓縮殼的概念,將exe可執(zhí)行文件進(jìn)行壓縮。
在軟件安全領(lǐng)域,可執(zhí)行文件做為操作系統(tǒng)最為重要的文件類型之一以及完成各項(xiàng)操作的真正執(zhí)行者,需要被每一位軟件專業(yè)從事人員熟練掌握。本文結(jié)合Windows可執(zhí)行文件這一概念,簡(jiǎn)述了MZ、NE、LE、PE格式發(fā)展歷程,并對(duì)com格式、MZ格式以及PE格式進(jìn)行了詳細(xì)性說(shuō)明并探索性研究分析了感染的基本原理。本文明確了在可執(zhí)行文件下,可執(zhí)行文件格式的重要性,文件格式之間的對(duì)比也使得高深復(fù)雜的理論知識(shí)變得淺顯易懂。文章對(duì)于編寫高性能程序,探求新的軟件保護(hù)方法,更好地維護(hù)軟件安全具有不可忽視的意義。
[1]邵麗平:基于PE文件格式的信息隱藏技術(shù).2005
[2]秦志光 張鳳荔《計(jì)算機(jī)病毒原理與防范》人民郵電出版社2007
[3]趙東方:基于殼技術(shù)的軟件保護(hù)技術(shù)研究.2009
[4]陳旋,淺談關(guān)于軟件安全測(cè)試方法研究[J],電腦知識(shí)與技術(shù),2009
A discussion on the development of the executable file format
Liu Xinyi
(yun nanUniversitySoftware Institute,650500)
In this paper,the research on the executable file format under the four development process of the Windows executable file for the software security foundation is studied. Introduce the concept of executable file format and briefly introduce the MZ,NE,LE,PE format,select the DOS system under the com format and MZ format and the PE format for in-depth discussion,the distinction between the similarities and differences.At the same time talking about the concept of virus infection,the principle of a detailed explanation.In this paper,the basic knowledge of the computer and the principles of the software and the consolidation of the field of software security research and development of a significant reference value and macro guidance.
software security;executable file format;infection principle and Prevention