病毒原理2匯編_第1頁
病毒原理2匯編_第2頁
病毒原理2匯編_第3頁
病毒原理2匯編_第4頁
病毒原理2匯編_第5頁
已閱讀5頁,還剩78頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、計(jì)算機(jī)病毒與反病毒技術(shù)(jsh)共八十三頁主要(zhyo)內(nèi)容硬盤結(jié)構(gòu)文件系統(tǒng)計(jì)算機(jī)的引導(dǎo)過程中斷(zhngdun)內(nèi)存管理EXE文件的格式第2章 預(yù)備知識(shí)共八十三頁2.1.1 硬盤的物理(wl)結(jié)構(gòu)絕大多數(shù)硬盤在結(jié)構(gòu)上都是溫徹斯特(Winchester)盤,其核心就是:磁盤片被密封、固定并且不停高速旋轉(zhuǎn),磁頭懸浮于盤片上方(shn fn)沿磁盤徑向移動(dòng),并且不和盤片接觸2.1 硬盤結(jié)構(gòu)簡介共八十三頁2.1.1 硬盤的物理(wl)結(jié)構(gòu)低級格式化與硬盤的基本參數(shù)對于一塊新硬盤,低級格式化的過程已經(jīng)由生產(chǎn)廠家在產(chǎn)品出廠前完成了低級格式化的主要(zhyo)目的是將盤面劃分成磁道、扇區(qū)和柱面2.1 硬

2、盤結(jié)構(gòu)簡介共八十三頁2.1.1 硬盤的物理(wl)結(jié)構(gòu)基本INT 13H調(diào)用BIOS INT 13H調(diào)用是BIOS提供的磁盤基本輸入輸出中斷調(diào)用,它可以完成磁盤(包括硬盤和軟盤)的復(fù)位、讀寫、校驗(yàn)、定位、診斷、格式化等功能,完全(wnqun)不用考慮被操作硬盤安裝的是什么操作系統(tǒng)它使用的就是CHS尋址方式最大只能訪問8GB左右的硬盤2.1 硬盤結(jié)構(gòu)簡介共八十三頁2.1.1 硬盤的物理(wl)結(jié)構(gòu)現(xiàn)代硬盤結(jié)構(gòu)簡介改用等密度結(jié)構(gòu)生產(chǎn)硬盤,外圈磁道的扇區(qū)比內(nèi)圈磁道多硬盤不再具有實(shí)際的3D參數(shù)尋址方式也改為線性尋址,即以扇區(qū)為單位進(jìn)行尋址現(xiàn)代大容量硬盤一般采用LBA(Logic Block Addre

3、ss)線性地址來尋址,以替代CHS尋址。在LBA方式下,系統(tǒng)把所有的物理扇區(qū)都按某種方式或規(guī)則看做是一線性編號(hào)的扇區(qū),即從0到某個(gè)最大值方式排列,這樣,只用一個(gè)序數(shù)就能確定(qudng)一個(gè)唯一的物理扇區(qū)。這就是線性地址扇區(qū)的由來,顯然線性地址是物理扇區(qū)的邏輯地址2.1 硬盤結(jié)構(gòu)簡介共八十三頁2.1.1 硬盤的物理(wl)結(jié)構(gòu)擴(kuò)展INT 13H雖然現(xiàn)代硬盤都已經(jīng)采用了線性尋址,但是由于基本INT 13H的制約,使用BIOS INT 13H接口的程序,如DOS等還只能訪問8G以內(nèi)的硬盤空間。為了打破這一限制,Microsoft等幾家公司制定了擴(kuò)展INT 13H標(biāo)準(zhǔn)(Extended INT 13

4、H),采用線性尋址方式存取硬盤,所以突破(tp)了8G的限制,而且還加入了對可拆卸介質(zhì)(如移動(dòng)硬盤、優(yōu)盤)的支持2.1 硬盤結(jié)構(gòu)簡介共八十三頁2.1.1 硬盤的物理(wl)結(jié)構(gòu)分區(qū)與高級格式化硬盤在使用時(shí),是按照不同的區(qū)域存儲(chǔ)(cn ch)數(shù)據(jù)的,硬盤分區(qū)就是劃分區(qū)域的過程。劃分好的每一個(gè)區(qū)域都稱作一個(gè)分區(qū),最多可以劃分為四個(gè)主分區(qū)。這項(xiàng)工作由分區(qū)程序來完成,通常使用FDISK或磁盤管理工具軟件在分區(qū)的過程中,分區(qū)程序向0柱面0磁頭1扇區(qū)寫入主引導(dǎo)記錄MBR(Master Boot Record)和分區(qū)記錄表DPT(Disk Partition Table),并建立一個(gè)分區(qū)表鏈,向所有的邏輯驅(qū)

5、動(dòng)器寫入鏈表記錄。硬盤的分區(qū)格式常用的分區(qū)格式有四種:FAT16、FAT32、NTFS和Linux,其中使用最多的是FAT16和FAT32硬盤分區(qū)后還不能直接使用,要在每個(gè)分區(qū)內(nèi)建立完整的存儲(chǔ)系統(tǒng)后才能正常使用。建立存儲(chǔ)系統(tǒng)的工作一般由FORMAT程序來完成,這個(gè)過程稱為高級格式化高級格式化的目的是在分區(qū)內(nèi)建立分區(qū)引導(dǎo)記錄DBR(DOS Boot Record)、文件分配表FAT(File Allocation Table)、文件目錄表FDT(File Directory Table)和數(shù)據(jù)區(qū)DATA2.1 硬盤結(jié)構(gòu)簡介共八十三頁2.1.2 硬盤的數(shù)據(jù)結(jié)構(gòu)(sh j ji u)主引導(dǎo)扇區(qū)的組成

6、主引導(dǎo)扇區(qū)(Boot Sector)也就是硬盤的第一個(gè)扇區(qū)(0柱面0磁頭1扇區(qū))主引導(dǎo)記錄(Master Boot Record,MBR)主分區(qū)表即磁盤分區(qū)表(Disk Partition Table,DPT)引導(dǎo)扇區(qū)標(biāo)記(Boot Record ID/Signature)完成(wn chng)系統(tǒng)主板BIOS向操作系統(tǒng)交接的重要入口2.1 硬盤結(jié)構(gòu)簡介主引導(dǎo)扇區(qū)結(jié)構(gòu)圖共八十三頁2.1.2 硬盤的數(shù)據(jù)結(jié)構(gòu)(sh j ji u)硬盤主分區(qū)表結(jié)構(gòu)(jigu)簡介2.1 硬盤結(jié)構(gòu)簡介偏移字節(jié)字段長度值字段名和定義0 x01BEBYTE0 x80引導(dǎo)指示符號(hào)(Boot Indicator) 0 x01

7、BFBYTE0 x01起始磁頭號(hào)(Start Head)0 x01C0WORD6位0 x01起始扇區(qū)號(hào)(Start Sector)0 x01C110位0 x00起始柱面號(hào)(Start Cylinder)0 x01C2BYTE0 x07系統(tǒng)ID(System ID),定義了分區(qū)的類型0 x01C3BYTE0 xFE結(jié)束磁頭號(hào)(End Head)0 x01C4WORD6位0 xBF結(jié)束扇區(qū)號(hào)(End Sector)0 x01C510位0 xFC結(jié)束柱面號(hào)(End Cylinder)0 x01C6DWORD0 x0000003F相對扇區(qū)數(shù)(Relative Sectors) 0 x01CADWORD

8、0 x00BB867E總扇區(qū)數(shù)(Total Sectors),該分區(qū)中扇區(qū)總數(shù)共八十三頁2.1.3 擴(kuò)展(kuzhn)分區(qū)與擴(kuò)展(kuzhn)MBR簡介通過主引導(dǎo)記錄定義的硬盤分區(qū)表,最多只能描述4個(gè)分區(qū)微軟采用(ciyng)虛擬MBR的技術(shù)用以描述分區(qū)的扇區(qū)形成一個(gè)“分區(qū)鏈”,通過這個(gè)分區(qū)鏈,就可以描述所有的分區(qū)2.1 硬盤結(jié)構(gòu)簡介共八十三頁2.1.3 擴(kuò)展分區(qū)(fn q)與擴(kuò)展MBR簡介主分區(qū)、擴(kuò)展分區(qū)、邏輯(lu j)驅(qū)動(dòng)器及其關(guān)系2.1 硬盤結(jié)構(gòu)簡介共八十三頁2.1.3 擴(kuò)展分區(qū)(fn q)與擴(kuò)展MBR簡介擴(kuò)展(kuzhn)分區(qū)和邏輯盤2.1 硬盤結(jié)構(gòu)簡介共八十三頁2.1.3 擴(kuò)展分區(qū)

9、(fn q)與擴(kuò)展MBR簡介3主分區(qū)(其中一個(gè)用作擴(kuò)展(kuzhn)的磁盤結(jié)構(gòu)圖2.1 硬盤結(jié)構(gòu)簡介一個(gè)3主分區(qū)的磁盤結(jié)構(gòu)擴(kuò)展分區(qū)表鏈接示意圖共八十三頁2.2.1 文件系統(tǒng)簡介(jin ji)當(dāng)磁盤被格式化之后(zhhu),文件系統(tǒng)需要用到一些特殊的區(qū)域來組織它本身的數(shù)據(jù):主引導(dǎo)記錄(Master Boot Record,MBR)磁盤分配表(Disk Partition Table,DPT)操作系統(tǒng)引導(dǎo)記錄(DOS Boot Record,DBR)文件分配表(File Allocation Table,F(xiàn)AT)文件目錄表(File Directory Table,F(xiàn)DT)數(shù)據(jù)區(qū)2.2 文件系統(tǒng)

10、共八十三頁2.2.2 FAT32 DBRDBR區(qū)(DOS Boot Record) 引導(dǎo)(yndo)扇區(qū)2.2 文件系統(tǒng)偏移字節(jié)字段長度(字節(jié))字段名對應(yīng)圖中標(biāo)記0 x003 跳轉(zhuǎn)指令細(xì)黑虛線0 x038 廠商標(biāo)志和OS版本號(hào)細(xì)黑實(shí)線0 x0B53BPB紅粗虛線0 x4026 擴(kuò)展BPB紅粗實(shí)線0 x5A420引導(dǎo)程序代碼(沒有下劃線)0 x01FE2 有效結(jié)束標(biāo)志藍(lán)粗(最粗)虛線共八十三頁2.2.3 FAT16 DBRFAT12和FAT16中的DBR與FAT32中的DBR的基本含義類似,只是相關(guān)(xinggun)偏移量和參數(shù)意義有小的差異2.2 文件系統(tǒng)偏移字節(jié)字段長度(字節(jié))字段名稱0 x

11、003跳轉(zhuǎn)指令(Jump Instruction)0 x038OEM ID0 x0B25BPB0 x2426擴(kuò)展BPB0 x3E448引導(dǎo)程序代碼(Bootstrap Code)0 x01FE4扇區(qū)結(jié)束標(biāo)識(shí)符(0 x55AA)共八十三頁2.2.4 保留(boli)扇區(qū)在FAT文件系統(tǒng)DBR的偏移0 x0E處,用2個(gè)字節(jié)存儲(chǔ)保留扇區(qū)的數(shù)目。所謂保留扇區(qū)(有時(shí)候也稱作系統(tǒng)扇區(qū)、隱藏扇區(qū)),是指從分區(qū)DBR扇區(qū)開始的僅為系統(tǒng)所有的扇區(qū),包括DBR扇區(qū)。在FAT16文件系統(tǒng)中,保留扇區(qū)的數(shù)據(jù)通常設(shè)置為1,即僅僅DBR扇區(qū)。而在FAT32中,保留扇區(qū)的數(shù)據(jù)通常取為32FAT32中的保留扇區(qū)除了磁盤總第0

12、扇區(qū)用作DBR,總第2扇區(qū)(Windows 98系統(tǒng))或總第0 xC扇區(qū)(Windows 2000/XP)用作OS引導(dǎo)(yndo)代碼擴(kuò)展部分外,其余扇區(qū)都不參與操作系統(tǒng)管理與磁盤數(shù)據(jù)管理,通常情況下是沒作用的操作系統(tǒng)之所以在FAT32中設(shè)置保留扇區(qū),是為了對DBR作備份或留待以后升級時(shí)用。FAT32中,DBR偏移0 x32占2字節(jié)的數(shù)據(jù)指明了DBR備份扇區(qū)所在,一般為0 x06,即第6扇區(qū)。當(dāng)FAT32分區(qū)DBR扇區(qū)被破壞導(dǎo)致分區(qū)無法訪問時(shí),可以用第6扇區(qū)的原備份替換第0扇區(qū)來找回?cái)?shù)據(jù)2.2 文件系統(tǒng)共八十三頁2.2.5 FAT16 存儲(chǔ)(cn ch)原理當(dāng)把一部分磁盤空間格式化為FAT文件

13、系統(tǒng)時(shí),F(xiàn)AT文件系統(tǒng)就將這個(gè)分區(qū)當(dāng)成整塊可分配(fnpi)的區(qū)域進(jìn)行規(guī)劃,以便于數(shù)據(jù)的存儲(chǔ)FAT16是Microsoft較早推出的文件系統(tǒng),具有高度兼容性,目前仍然廣泛應(yīng)用于PC機(jī)尤其是移動(dòng)存儲(chǔ)設(shè)備中2.2 文件系統(tǒng)FAT16的組織形式共八十三頁2.2.5 FAT16 存儲(chǔ)(cn ch)原理FAT表記錄了磁盤(c pn)數(shù)據(jù)文件的存儲(chǔ)鏈表(簇號(hào)鏈表)FAT表以“F8 FF FF FF”開頭,此4字節(jié)為介質(zhì)描述單元,并不參與FAT表簇鏈關(guān)系。小紅字標(biāo)出的是FAT扇區(qū)每2字節(jié)對應(yīng)的簇號(hào)相對偏移0 x40 x5為第2簇(順序上第1簇),為“FF FF”,表示存儲(chǔ)在第2簇上的文件/目錄是個(gè)小文件,只

14、占用1個(gè)簇便結(jié)束了2.2 文件系統(tǒng)共八十三頁2.2.6 FAT32 存儲(chǔ)(cn ch)原理FAT32是個(gè)非常有效的文件系統(tǒng),F(xiàn)AT32依然占據(jù)(zhnj)著Microsoft Windows文件系統(tǒng)中重要的地位FAT32最早是出于FAT16不支持大分區(qū)、單位簇容量大以至于空間急劇浪費(fèi)等缺點(diǎn)設(shè)計(jì)的2.2 文件系統(tǒng)FAT32分區(qū)的基本構(gòu)成共八十三頁2.2.7 NTFS文件系統(tǒng)NTFS是一個(gè)比FAT更復(fù)雜的系統(tǒng)。在NTFS中,磁盤上的任何事物都為文件NTFS的BPB參數(shù)NTFS的引導(dǎo)扇區(qū)也是完成引導(dǎo)和定義分區(qū)參數(shù)與FAT分區(qū)不同的是,F(xiàn)AT分區(qū)的BOOT記錄正常,即使文件不正確,也顯示分區(qū)沒有錯(cuò)誤,

15、而NTFS分區(qū)的BOOT不是分區(qū)正常的充分條件,它要求(yoqi)必須主文件表MFT(Master File Table)中的系統(tǒng)記錄如$MFT等正常該分區(qū)才能正常訪問2.2 文件系統(tǒng)共八十三頁2.2.7 NTFS文件系統(tǒng)主文件表MFT 與文件記錄在NTFS中,所有存儲(chǔ)在卷上的數(shù)據(jù)都包含在文件中,包括用來定位和獲取文件的數(shù)據(jù)結(jié)構(gòu)、引導(dǎo)程序和記錄這個(gè)卷的記錄(NTFS元數(shù)據(jù))的位圖,這體現(xiàn)了NTFS的原則:磁盤上的任何事物都為文件在NTFS中,卷中所有存放的數(shù)據(jù)均記錄在一個(gè)叫做MFT的文件記錄數(shù)組中,稱為主文件表(Master File Table),MFT是由高級格式化產(chǎn)生(chnshng)的

16、。而MFT由文件記錄(File Record)數(shù)組構(gòu)成2.2 文件系統(tǒng)共八十三頁2.2.7 NTFS文件系統(tǒng)文件記錄的大小一般是固定的,不管簇的大小是多少,文件記錄大小一般為1KB文件記錄在MFT文件記錄數(shù)組中物理上是連續(xù)的,且從0開始編號(hào),所以(suy),NTFS是預(yù)定義文件系統(tǒng)2.2 文件系統(tǒng)共八十三頁2.2.7 NTFS文件系統(tǒng)元數(shù)據(jù)與元數(shù)據(jù)文件MFT僅供系統(tǒng)本身組織、架構(gòu)文件系統(tǒng)使用,這在NTFS中稱為元數(shù)據(jù)(Metadata,是存儲(chǔ)在卷上支持文件系統(tǒng)格式管理的數(shù)據(jù),不能被應(yīng)用程序來訪問,它只能為系統(tǒng)提供服務(wù))。其中最基本(jbn)的前16個(gè)記錄是操作系統(tǒng)使用的非常重要的元數(shù)據(jù)文件元數(shù)

17、據(jù)文件的名字都以“$”開始,所以是隱藏文件2.2 文件系統(tǒng)共八十三頁2.2.7 NTFS文件系統(tǒng)2.2 文件系統(tǒng)序號(hào)元文件功能0$MFT主文件表本身1$MFTMirr主文件表的部分鏡像2$LogFile日志文件3$Volume卷文件4$AttrDef屬性定義列表5$Root根目錄6$Bitmap位圖文件7$Boot引導(dǎo)文件8$BadClus壞簇文件9$Secure安全文件10$UpCase大寫文件11$Extend metadata directory擴(kuò)展元數(shù)據(jù)目錄12$Extend$Reparse重解析點(diǎn)文件13$Extend$UsnJrnl變更日志文件14$ExtendQuota配額管理文

18、件15$Extend$ObjId對象ID文件1623 保留23+ 用戶文件和目錄NTFS對元數(shù)據(jù)文件的備份(bi fn)共八十三頁2.2.7 NTFS文件系統(tǒng)文件和目錄記錄NTFS將文件作為“屬性、屬性值”的集合來處理文件數(shù)據(jù)就是未命名屬性的值,其他文件屬性包括文件名、文件擁有者、文件時(shí)間標(biāo)記等每個(gè)屬性由單個(gè)的流(Stream)組成,即簡單的字符隊(duì)列NTFS并不對文件進(jìn)行操作,而只是對屬性流進(jìn)行讀寫NTFS提供對屬性流的各種操作:創(chuàng)建、刪除、讀取(字節(jié)范圍)以及寫入(字節(jié)范圍)讀寫操作一般是針對文件的未命名屬性的,對于已命名的屬性則可以(ky)通過已命名的數(shù)據(jù)流句法來進(jìn)行操作文件屬性列表在元數(shù)

19、據(jù)文件$AttrDef中預(yù)定義(一般有一個(gè)未命名流,為缺省流,未命名流只能有一個(gè),而命名流可以有多個(gè),NTFS支持多流文件)2.2 文件系統(tǒng)共八十三頁2.2.7 NTFS文件系統(tǒng)一個(gè)文件通常占用一個(gè)文件記錄。但當(dāng)一個(gè)文件具有很多項(xiàng)屬性值或很零碎的時(shí)候,就可能占用一個(gè)以上的文件記錄。這種情況下,第一個(gè)文件記錄是其基本的文件記錄,存儲(chǔ)有該文件需要的其他文件記錄的位置。NTFS的文件夾只是一個(gè)簡單的文件名和文件引用號(hào)的索引,如果(rgu)目錄列表小于一個(gè)記錄的長度,那么該文件夾的所有信息都存儲(chǔ)在主文件表的記錄中。對于大于記錄長度的文件夾則使用B+樹進(jìn)行管理,并用一個(gè)指針指向一個(gè)外部簇,該簇用來存儲(chǔ)那

20、些MFT內(nèi)存儲(chǔ)不了的文件夾的屬性2.2 文件系統(tǒng)共八十三頁2.2.7 NTFS文件系統(tǒng)常駐屬性與非常駐屬性當(dāng)一個(gè)(y )文件很小時(shí),其所有屬性和屬性值都可以存放在MFT的文件記錄中。當(dāng)屬性值能直接存放在MFT中時(shí),該屬性就稱為常駐屬性(Resident Attribute)有些屬性總是常駐的,這樣NTFS才可以確定其他非常駐屬性。例如,標(biāo)準(zhǔn)信息屬性和根索引就總是常駐屬性小文件和文件夾(典型的如1023字節(jié)或更少)將全部存儲(chǔ)在文件的MFT記錄里2.2 文件系統(tǒng)共八十三頁2.2.7 NTFS文件系統(tǒng)如果屬性值能直接存放在MFT中,那么NTFS對它的訪問時(shí)間將大大縮短。NTFS只需訪問磁盤一次,即可

21、獲得數(shù)據(jù),而不必像FAT文件系統(tǒng)那樣,先在FAT表中查找文件,再讀出連續(xù)分配的單元,最后找到文件的數(shù)據(jù)小文件或小目錄的所有(suyu)屬性,均可以在MFT中常駐2.2 文件系統(tǒng)共八十三頁2.2.7 NTFS文件系統(tǒng)文件LittleFile.txtLittleFile.txt的屬性(shxng)用NFI查看文件2.2 文件系統(tǒng)共八十三頁2.2.7 NTFS文件系統(tǒng)如果目錄列表小于一個(gè)文件記錄的長度,小目錄的索引根屬性包括其中所有文件和子目錄的索引,那么,該文件夾的所有信息都存儲(chǔ)在主文件表的記錄中大文件或大目錄的所有屬性,就不可能都常駐在MFT中如果一個(gè)屬性太大而不能存放在MFT文件記錄中,NTF

22、S將從MFT之外分配區(qū)域。這些(zhxi)區(qū)域通常稱為一個(gè)運(yùn)行(Run)或一個(gè)盤區(qū)(Extent),它們可用來存儲(chǔ)屬性值,如文件數(shù)據(jù)如果以后屬性值又增加,那么NTFS將會(huì)再分配一個(gè)運(yùn)行值存儲(chǔ)在運(yùn)行中而不是在MFT文件記錄中的屬性稱為非常駐屬性(Nonresident Attribute)2.2 文件系統(tǒng)大文件(wnjin)的非常駐屬性共八十三頁2.2.7 NTFS文件系統(tǒng)2.2 文件系統(tǒng)大目錄(ml)的MFT記錄共八十三頁2.2.7 NTFS文件系統(tǒng)邏輯簇號(hào)、虛擬簇號(hào)與數(shù)據(jù)定位Windows以簇號(hào)來定位文件在磁盤上的存儲(chǔ)位置,在FAT格式的文件系統(tǒng)中,有關(guān)簇號(hào)的指針包含(bohn)在FAT表中

23、,在NTFS中,有關(guān)簇號(hào)的指針則包含(bohn)在$MFT及$MFTMirr文件中NTFS使用邏輯簇號(hào)(Logical Cluster Number,LCN)和虛擬簇號(hào)(Virtual Cluster Number,VCN)來對簇進(jìn)行定位2.2 文件系統(tǒng)非常(fichng)駐數(shù)據(jù)屬性的VCN共八十三頁2.2.7 NTFS文件系統(tǒng)當(dāng)該文件含有超過2個(gè)運(yùn)行時(shí),則第三個(gè)運(yùn)行從VCN7開始,數(shù)據(jù)屬性頭部含有前兩個(gè)運(yùn)行VCN的映射(yngsh),這便于NTFS對磁盤文件分配的查詢。為了便于NTFS快速查找,具有多個(gè)運(yùn)行文件的常駐數(shù)據(jù)屬性頭中包含了VCN-LCN的映射(yngsh)關(guān)系2.2 文件系統(tǒng)共八

24、十三頁2.2.7 NTFS文件系統(tǒng)NTFS通過MFT訪問卷的過程:(1)裝載該卷;(2)從文件記錄的數(shù)據(jù)屬性中獲得VCN到LCN的映射信息(3)打開幾個(gè)元數(shù)據(jù)文件的MFT記錄,并打開這些文件屬性列表雖然數(shù)據(jù)屬性常常因太大而存儲(chǔ)在運(yùn)行中,但是其他屬性也可能因MFT文件記錄沒有(mi yu)足夠空間而需要存儲(chǔ)在運(yùn)行中另外,如果一個(gè)文件有太多的屬性而不能存放在MFT記錄中,那么第二個(gè)MFT文件記錄就可用來容納這些額外的屬性(或非常駐屬性的頭)在這種情況下,一個(gè)稱作“屬性列表”(Attribute List)的屬性就加進(jìn)來。屬性列表包括文件屬性的名稱和類型代碼以及屬性所在MFT的文件引用屬性列表通常用

25、于太大或太零散的文件,這種文件因VCN-LCN映射關(guān)系太大而需要多個(gè)MFT文件記錄。具有超過200個(gè)運(yùn)行的文件通常需要屬性列表2.2 文件系統(tǒng)共八十三頁2.3.1 系統(tǒng)啟動(dòng)過程(guchng)簡介系統(tǒng)啟動(dòng)過程主要由以下步驟組成(以硬盤冷啟動(dòng)為例):開機(jī),系統(tǒng)BIOS加電自檢讀主引導(dǎo)扇區(qū)MBR讀取激活分區(qū)(fn q)DBR操作系統(tǒng)引導(dǎo)代碼引導(dǎo)系統(tǒng)并讀取操作系統(tǒng)初始化文件2.3 計(jì)算機(jī)的啟動(dòng)過程共八十三頁2.3.2 DOS引導(dǎo)(yndo)程序DOS引導(dǎo)程序(chngx)所作的檢測、初始化動(dòng)作如下:調(diào)整堆棧位置修改并用修改后的磁盤參數(shù)表來復(fù)位磁盤系統(tǒng)計(jì)算根目錄表的首扇區(qū)的位置及IO.SYS的扇區(qū)位置

26、讀入根目錄表的首扇區(qū)檢查根目錄表的起始兩項(xiàng)是否為IO.SYS及MSDOS.SYS將IO.SYS文件起始三個(gè)扇區(qū)讀入內(nèi)存0000:0700H處跳到0000:0700H處執(zhí)行IO.SYS,引導(dǎo)完畢上述任一步若出錯(cuò),則顯示“Non system disk or disk error. ”信息,等用戶按任一鍵后試圖重新啟動(dòng)2.3 計(jì)算機(jī)的啟動(dòng)過程共八十三頁2.3.3 Windows 2000/XP啟動(dòng)過程(guchng)簡介在基于Intel的計(jì)算機(jī)上,Windows 2000/XP的啟動(dòng)過程大致可分為8個(gè)步驟預(yù)啟動(dòng)計(jì)算機(jī)加電自檢,讀取硬盤的MBR、執(zhí)行NTLDR(操作系統(tǒng)加載器)文件進(jìn)行初始化NTLD

27、R將處理器從實(shí)模式轉(zhuǎn)換為32位保護(hù)模式讀取BOOT.INI文件BOOT.INI文件其作用是使系統(tǒng)在啟動(dòng)過程中出現(xiàn)選擇菜單(ci dn),由用戶選擇希望啟動(dòng)的操作系統(tǒng),若只有一個(gè)操作系統(tǒng)則不顯示加載NTDETECT.COM文件由NTDETECT.COM來檢測計(jì)算機(jī)硬件,如并行端口、顯示適配器等,并將收集到的硬件列表返回NTLDR用于以后在注冊表中注冊保存2.3 計(jì)算機(jī)的啟動(dòng)過程共八十三頁2.3.3 Windows 2000/XP啟動(dòng)過程(guchng)簡介選擇硬件配置文件如果Windows 2000/XP有多個(gè)硬件配置文件,此時(shí)會(huì)出現(xiàn)選擇菜單,等待用戶確定(qudng)要使用的硬件配置文件,否則

28、直接跳過此步,啟用默認(rèn)配置裝載內(nèi)核引導(dǎo)過程裝載Windows 2000/XP內(nèi)核NtOsKrnl.EXE。隨后,硬件抽象層(HAL)被引導(dǎo)進(jìn)程加載,完成本步驟初始化內(nèi)核內(nèi)核完成初始化,NTLDR將控制權(quán)轉(zhuǎn)交Windows 2000/XP內(nèi)核,后者開始裝載并初始化設(shè)備驅(qū)動(dòng)程序,并啟動(dòng)Win32子系統(tǒng)和Windows 2000/XP服務(wù)用戶登錄由Win32子系統(tǒng)啟動(dòng)WinLogon.EXE,并由它啟動(dòng)Local Security Authority (LSASS.EXE)顯示登錄對話框。用戶登錄后,Windows 2000/XP會(huì)繼續(xù)配置網(wǎng)絡(luò)設(shè)備、用戶環(huán)境,并進(jìn)行個(gè)性化設(shè)置。最后,伴隨著微軟之聲和

29、我們熟悉的個(gè)性化桌面,Windows 2000/XP啟動(dòng)過程完成2.3 計(jì)算機(jī)的啟動(dòng)過程共八十三頁2.4.1 中斷(zhngdun)中斷(Interrupt),就是CPU暫停當(dāng)前程序的執(zhí)行,轉(zhuǎn)而執(zhí)行處理緊急事務(wù)的程序,并在該事務(wù)處理完成后能自動(dòng)恢復(fù)執(zhí)行原先程序的過程引起緊急事務(wù)的事件為中斷源,處理緊急事務(wù)的程序?yàn)橹袛喾?wù)程序或中斷處理程序計(jì)算機(jī)系統(tǒng)根據(jù)(gnj)緊急事務(wù)的緊急程度,把中斷分為不同的優(yōu)先級,并規(guī)定:高優(yōu)先級的中斷能暫停低優(yōu)先級的中斷服務(wù)程序的執(zhí)行在計(jì)算機(jī)系統(tǒng)中,引入中斷的最初目的是為了提高系統(tǒng)的輸入輸出性能。隨著計(jì)算機(jī)應(yīng)用的發(fā)展,中斷技術(shù)也應(yīng)用到計(jì)算機(jī)系統(tǒng)的許多領(lǐng)域,如:多道程序

30、、分時(shí)系統(tǒng)、實(shí)時(shí)處理、程序監(jiān)視和跟蹤等領(lǐng)域。中斷的分類硬中斷除以零、算術(shù)溢出、按下鍵盤等等2.4 中斷共八十三頁2.4.1 中斷(zhngdun)軟中斷因程序執(zhí)行了計(jì)算機(jī)INT指令造成的例如:INT 21H將執(zhí)行21H中斷。這里(zhl)21H稱作中斷號(hào),其中H代表十六進(jìn)制(H前取值范圍為0FF)。系統(tǒng)就是用中斷號(hào)來找出相應(yīng)的中斷處理程序的軟中斷包括BIOS中斷、DOS中斷與用戶自定義中斷2.4 中斷共八十三頁2.4.2 中斷(zhngdun)優(yōu)先權(quán)CPU為了處理并發(fā)的中斷請求,規(guī)定了中斷的優(yōu)先權(quán)。中斷優(yōu)先權(quán)由高到低是:調(diào)試故障其它故障除法錯(cuò),INT0(溢出中斷),INT n(軟件中斷)NMI

31、(不可屏蔽中斷)INTR(可屏蔽中斷)單步(dn b)中斷規(guī)定了中斷優(yōu)先權(quán)之后,當(dāng)多個(gè)中斷同時(shí)發(fā)出中斷請求時(shí),CPU的中斷邏輯就按照中斷的優(yōu)先權(quán)順序來排隊(duì)處理,首先處理中斷優(yōu)先權(quán)較高的中斷,然后再處理中斷優(yōu)先權(quán)較低的中斷在處理某一中斷的過程中,如果有更高的中斷源請求中斷,則CPU會(huì)響應(yīng)更高級的中斷2.4 中斷共八十三頁2.4.3 中斷向量表中斷向量表(Interrupt Vectors)是一個(gè)特殊的線性表,它保存著系統(tǒng)所有中斷服務(wù)程序的入口地址(偏移量和段地址)中斷向量表占用內(nèi)存最低端0000H到03FEH的1K地址空間,存放256個(gè)元素即遠(yuǎn)指針(中斷向量),編號(hào)從00到255(00FFH)每

32、一中斷向量的入口地址占4個(gè)字節(jié),高2字節(jié)存放中斷向量的段地址,低2字節(jié)存放中斷向量的偏移地址一個(gè)中斷向量指向一個(gè)子程序(chngx),該程序(chngx)就稱為中斷處理程序(chngx)2.4 中斷(zhngdun)中斷向量表共八十三頁2.4.4 中斷(zhngdun)處理過程CPU在執(zhí)行程序時(shí),是否響應(yīng)中斷要取決于以下三個(gè)條件能否同時(shí)滿足:有中斷請求;允許CPU接受中斷請求;一條指令執(zhí)行完,下一條指令還沒有(mi yu)開始執(zhí)行。條件是響應(yīng)中斷的主體。除用指令I(lǐng)NT所引起的軟件中斷之外,其它中斷請求信號(hào)是隨機(jī)產(chǎn)生的,程序員是無法預(yù)見的程序員可用程序部分地控制條件是否滿足,即可用指令STI和C

33、LI來允許或不允許CPU響應(yīng)可屏蔽的外部中斷。而對于不可屏蔽中斷和內(nèi)部中斷,CPU一定會(huì)響應(yīng)它們,程序員是無控制權(quán)的。CPU一定會(huì)執(zhí)行這些中斷的中斷服務(wù)程序2.4 中斷共八十三頁2.4.4 中斷(zhngdun)處理過程出現(xiàn)中斷請求之后,CPU的操作過程是:先完成當(dāng)前指令的操作,然后按中斷優(yōu)先權(quán)逐個(gè)判斷是哪一類型的中斷。確定中斷類型之后,CPU進(jìn)行如下幾方面的工作:將狀態(tài)標(biāo)志進(jìn)棧保護(hù)0IF(清除標(biāo)志IF,禁止跟蹤),0TF(清除標(biāo)志TF,禁止中斷)根據(jù)(gnj)中斷類型號(hào)計(jì)算中斷向量入口地址在向量表中的偏移:偏移=中斷類型號(hào)4保護(hù)斷點(diǎn),把當(dāng)前代碼段寄存器的內(nèi)容進(jìn)棧保護(hù),將中斷向量的段地址送CS

34、;把當(dāng)前指令指針入棧保護(hù),將中斷向量的偏移地址送IP;于是,程序就轉(zhuǎn)到了中斷服務(wù)程序進(jìn)入中斷服務(wù)程序之后,一般要保護(hù)現(xiàn)場(寄存器壓棧),然后進(jìn)行中斷服務(wù)。在中斷服務(wù)返回前要恢復(fù)現(xiàn)場(寄存器彈棧),最后用STI開中斷,并用IRET恢復(fù)斷點(diǎn)處的標(biāo)志寄存器、CS和IP的值2.4 中斷共八十三頁2.4.5 擴(kuò)展(kuzhn)INT 13H設(shè)計(jì)擴(kuò)展INT 13H接口的目的是為了擴(kuò)展BIOS的功能,使其支持多于1024柱面的硬盤, 以及(yj)可移動(dòng)介質(zhì)的鎖定、解鎖及彈出等功能2.4 中斷共八十三頁2.4.6 中斷(zhngdun)與計(jì)算機(jī)病毒計(jì)算機(jī)提供很多中斷,合理合法地修改中斷,會(huì)給計(jì)算機(jī)增加非常有用

35、的新功能計(jì)算機(jī)病毒則篡改中斷為其達(dá)到傳染、激發(fā)等目的服務(wù)與病毒有關(guān)的重要中斷有:INT 13H磁盤輸入輸出中斷,引導(dǎo)型病毒用于傳染病毒和格式化磁盤INT 21H DOS功能調(diào)用中斷INT 24H DOS的嚴(yán)重錯(cuò)誤處理(chl)中斷INT 25H DOS絕對磁盤讀功能INT 26H DOS絕對磁盤寫功能2.4 中斷共八十三頁簡介(jin ji)內(nèi)存是程序運(yùn)行時(shí)的“場所”,是存儲(chǔ)正在運(yùn)行的程序及程序運(yùn)行所需數(shù)據(jù)的地方。許多病毒?!岸恪痹趦?nèi)存中監(jiān)視系統(tǒng)的運(yùn)行、伺機(jī)傳播或爆發(fā)一臺(tái)計(jì)算機(jī)要正常工作必須有兩種內(nèi)存只讀內(nèi)存(只讀存儲(chǔ)器,Read Only Memory,ROM)隨機(jī)內(nèi)存(隨機(jī)存儲(chǔ)器,Rand

36、om Access Memory,RAM) ,這是我們通常所說的“內(nèi)存”另外,Cache也是經(jīng)常用到的,它位于CPU與內(nèi)存之間,是一個(gè)讀寫速度(sd)比內(nèi)存更快的存儲(chǔ)器,稱為高速緩沖存儲(chǔ)器,簡稱高速緩存2.5 內(nèi)存管理共八十三頁2.5.1 內(nèi)存(ni cn)尋址技術(shù)的演變20多年前,Intel推出了一款8位處理器8080,可訪問到64K內(nèi)的地址空間,還沒有段的概念,訪問內(nèi)存都要通過絕對地址1978年,Intel開發(fā)出16位的處理器8086是內(nèi)存尋址的第一次飛躍,引入了段概念,采用了“段地址:偏移量”的形式來描述內(nèi)存地址,將內(nèi)存分為數(shù)個(gè)64K大小的段Intel的80286處理器于1982年問世地

37、址總線位數(shù)增加(zngji)到24位,可以訪問到16M的內(nèi)存空間更重要的是從此開始引進(jìn)了一個(gè)全新理念保護(hù)模式,訪問內(nèi)存時(shí)不能直接從段寄存器中獲得段的起始地址,而需要經(jīng)過額外轉(zhuǎn)換和檢查為了與舊處理器兼容,80286內(nèi)存尋址可以以兩種方式進(jìn)行先進(jìn)的保護(hù)模式(受保護(hù)的虛擬地址模式)老式的8086方式,即實(shí)地址模式(簡稱實(shí)模式)2.5 內(nèi)存管理共八十三頁2.5.1 內(nèi)存尋址技術(shù)(jsh)的演變真正的第二次內(nèi)存尋址飛躍發(fā)生在80386身上80386的地址總線擴(kuò)展到了32位,可尋址空間擴(kuò)充為4G在保護(hù)模式下,它的段范圍不再局限于64K,可以達(dá)到4K4G在硬件上支持分頁,確切的來說是:請求式分頁的虛擬內(nèi)存盡

38、管目前已經(jīng)在使用64位的處理器,但主流操作系統(tǒng)仍然基于(jy)I386體系結(jié)構(gòu)在8088/8086匯編語言中,有16位寄存器AX、BX、CX、DX、SI、DI、SP和BP;在80386中,這些寄存器被擴(kuò)展到了32位,即EAX、EBX、ECX、EDX、ESI、EDI、ESP和EBP,段寄存器增加了FS(附加數(shù)據(jù)段#1)和GS(附加數(shù)據(jù)段#2)2.5 內(nèi)存管理共八十三頁2.5.2 DOS內(nèi)存(ni cn)布局DOS操作系統(tǒng)(co zu x tn)運(yùn)行于實(shí)模式中2.5 內(nèi)存管理共八十三頁2.5.3 保護(hù)模式與虛擬內(nèi)存保護(hù)模式一般來說,80 x86(80386及其以后的各代CPU)可在實(shí)模式、保護(hù)模式

39、和虛擬86模式三種模式下運(yùn)行(ynxng)實(shí)模式就是古老的MS DOS的運(yùn)行環(huán)境,只能利用32位寄存器的前16位,而后面的16位就浪費(fèi)了當(dāng)前流行的Windows操作系統(tǒng)運(yùn)行在保護(hù)模式下在Windows 9x下,如果開一個(gè)MS DOS窗口,即運(yùn)行一個(gè)DOS應(yīng)用程序,那么該程序就運(yùn)行在虛擬86模式下保護(hù)模式和實(shí)模式采用了兩種截然不同的思路保護(hù)模式帶來的最大優(yōu)點(diǎn)不是單純的擴(kuò)大了內(nèi)存尋址范圍,而是對內(nèi)存尋址從機(jī)制上提供了保護(hù),將系統(tǒng)的執(zhí)行空間按權(quán)限進(jìn)行了劃分,防止應(yīng)用程序非法訪問其他應(yīng)用程序的地址空間(任務(wù)間保護(hù)),防止應(yīng)用程序非法訪問操作系統(tǒng)地址空間(系統(tǒng)保護(hù))2.5 內(nèi)存(ni cn)管理共八十三

40、頁2.5.3 保護(hù)模式與虛擬內(nèi)存保護(hù)模式的權(quán)限級別在保護(hù)模式下,所有的應(yīng)用程序都具有權(quán)限級別(Privilege Level,PL)。PL按優(yōu)先次序分為(fn wi)四等:0級、1級、2級、3級,其中0級權(quán)限最高,3級最低目前只用到Ring 0和Ring 3兩個(gè)級別2.5 內(nèi)存(ni cn)管理特權(quán)級環(huán)共八十三頁2.5.3 保護(hù)模式與虛擬內(nèi)存應(yīng)用程序如果擁有第0級的權(quán)限,則可以執(zhí)行任何指令并訪問任何數(shù)據(jù)如果運(yùn)行在Ring 3級,則只能執(zhí)行有限指令,能訪問的數(shù)據(jù)也有限操作系統(tǒng)(co zu x tn)核心層運(yùn)行在Ring 0級,而Win32子系統(tǒng)運(yùn)行在Ring 3級,為運(yùn)行在Ring 3級的應(yīng)用程

41、序提供接口計(jì)算機(jī)病毒總是想方設(shè)法竊取Ring 0的權(quán)限(如CIH病毒),以實(shí)施更大范圍的破壞2.5 內(nèi)存(ni cn)管理Windows 2000/XP體系結(jié)構(gòu)示意圖共八十三頁2.5.3 保護(hù)模式與虛擬內(nèi)存虛擬內(nèi)存在Windows系統(tǒng)中,任何一個(gè)進(jìn)程(jnchng)都被賦予其自己的4GB虛擬地址空間,但并不意味著每一個(gè)進(jìn)程(jnchng)實(shí)際擁有4GB的物理地址空間,該地址空間僅僅是一個(gè)虛擬地址空間。進(jìn)程(jnchng)實(shí)際可以得到的物理內(nèi)存要遠(yuǎn)小于其虛擬地址空間進(jìn)程的虛擬地址空間是每個(gè)進(jìn)程私有的,在進(jìn)程內(nèi)運(yùn)行的線程對內(nèi)存空間的訪問都被限制在調(diào)用進(jìn)程之內(nèi),而不能訪問屬于其他進(jìn)程的內(nèi)存空間在不同

42、的進(jìn)程中可以使用相同地址的指針來指向?qū)儆诟髯哉{(diào)用進(jìn)程的內(nèi)容而不會(huì)由此引起混亂2.5 內(nèi)存(ni cn)管理共八十三頁2.5.3 保護(hù)模式與虛擬內(nèi)存2.5 內(nèi)存(ni cn)管理Windows 9x進(jìn)程的地址空間Windows NT進(jìn)程的地址空間共八十三頁2.5.4 Win32內(nèi)存(ni cn)管理Win32中的內(nèi)存管理是分層次的,系統(tǒng)提供了幾組層次不同的函數(shù)來管理內(nèi)存,它們是標(biāo)準(zhǔn)內(nèi)存管理函數(shù)、虛擬內(nèi)存管理函數(shù)、堆管理函數(shù)和內(nèi)存映射文件函數(shù)。所有的這些函數(shù)都是為了讓用戶能在比較高的層次上方便地管理內(nèi)存,以便將程序和底層的內(nèi)存分頁機(jī)制(jzh)隔離開來2.5 內(nèi)存管理共八十三頁簡介(jin ji)

43、在DOS環(huán)境下有四種基本的可執(zhí)行文件格式批處理文件(wnjin),以.BAT結(jié)尾的文件(wnjin)設(shè)備驅(qū)動(dòng)文件,是以.SYS結(jié)尾的文件,如CONFIG.SYSCOM文件,是以.COM結(jié)尾的純代碼文件沒有文件頭部分,缺省情況下總是從0 x100H處開始執(zhí)行,沒有重定位項(xiàng),所有代碼和數(shù)據(jù)必須控制在64K以內(nèi)EXE文件,是以.EXE結(jié)尾的文件文件以英文字母“MZ”開頭,通常稱之為MZ文件MZ文件有一個(gè)文件頭,用來指出每個(gè)段的定義,以及重定位表。.EXE文件擺脫了代碼大小最多不能超過64K的限制,是DOS下最主要的文件格式在Windows 3.0/3.1的可執(zhí)行文件,在MZ文件頭之后又有一個(gè)以“NE

44、”開始的文件頭,稱之為NE文件在Win32位平臺(tái)可執(zhí)行文件格式:可移植的可執(zhí)行文件(Portable Executable File)格式,即PE格式。MZ文件頭之后是一個(gè)以“PE”開始的文件頭2.6 EXE文件的格式共八十三頁2.6.1 MZ文件格式.EXE文件由三部分構(gòu)成:文件頭、重定位(dngwi)表和二進(jìn)制代碼2.6 EXE文件(wnjin)的格式偏移大小(字節(jié))描述002EXE文件類型標(biāo)記: 4D5Ah(ASCII字符MZ)022文件最后一個(gè)扇區(qū)的字節(jié)數(shù)042文件的總扇區(qū)(頁)數(shù)文件的大小=(總扇區(qū)數(shù)-1)512+最后一個(gè)扇區(qū)的字節(jié)數(shù)062重定位項(xiàng)的個(gè)數(shù)082EXE文件頭的大小(16

45、字節(jié)的倍數(shù))0A2最小分配數(shù)(16字節(jié)的倍數(shù))0C2最大分配數(shù)(16字節(jié)的倍數(shù))0E2初始化堆棧段(SS初值)102初始化堆棧指針(SP初值)122補(bǔ)碼校驗(yàn)和142初始代碼段指針(IP初值)162初始代碼段段地址(CS初值)182定位表的偏移地址(第一個(gè)重定位項(xiàng)的偏移量)1A2連接程序產(chǎn)生的覆蓋號(hào)共八十三頁2.6.2 NE文件格式NE是New Excutable的縮寫,是16位Windows可執(zhí)行文件的標(biāo)準(zhǔn)格式(g shi),這種格式(g shi)基本上沒用了NE在MZ文件頭之后添加了一個(gè)以“NE”開始的文件頭2.6 EXE文件(wnjin)的格式共八十三頁2.6.3 PE文件格式Win32可

46、執(zhí)行文件,如*.EXE、*.DLL、*.OCX等,都是PE格式PE的意思就是Portable Executable(可移植、可執(zhí)行),它是Win32可執(zhí)行文件的標(biāo)準(zhǔn)格式由于大量的EXE文件(wnjin)被執(zhí)行,且傳播的可能性最大,因此,Win32病毒感染文件(wnjin)時(shí),基本上都會(huì)將EXE文件(wnjin)作為目標(biāo)2.6 EXE文件(wnjin)的格式共八十三頁2.6.3 PE文件格式一般來說,病毒往往先于HOST程序獲得控制權(quán)。運(yùn)行Win32病毒的一般流程示意如下:用戶點(diǎn)擊或系統(tǒng)自動(dòng)運(yùn)行HOST程序;裝載HOST程序到內(nèi)存;通過(tnggu)PE文件中的AddressOfEntryPoi

47、nt加ImageBase之和,定位第一條語句的位置(程序入口);從第一條語句開始執(zhí)行(這時(shí)執(zhí)行的其實(shí)是病毒代碼);病毒主體代碼執(zhí)行完畢,將控制權(quán)交給HOST程序原來的入口代碼;HOST程序繼續(xù)執(zhí)行。問題在于:計(jì)算機(jī)病毒怎會(huì)在HOST程序之前執(zhí)行?2.6 EXE文件(wnjin)的格式共八十三頁2.6.3 PE文件格式PE文件(wnjin)的總體層次結(jié)構(gòu)2.6 EXE文件(wnjin)的格式共八十三頁2.6.3 PE文件格式相對虛擬地址 (Relative Virtual Addresses,RVA)相對虛擬地址是一個(gè)(y )相對于PE文件映射到內(nèi)存的基地址的偏移量2.6 EXE文件(wnjin

48、)的格式共八十三頁2.6.3 PE文件格式DOS頭與DOS插樁程序PE結(jié)構(gòu)中緊隨MZ文件頭之后的DOS插樁程序(DOS Stub)可以通過IMAGE_DOS_HEADER結(jié)構(gòu)來識(shí)別一個(gè)合法的DOS頭可以通過該結(jié)構(gòu)的e_lfanew(偏移60,32bits)成員來找到PE開始的標(biāo)志(biozh)0 x00004550(“PE00”)病毒通過“MZ”、“PE”這兩個(gè)標(biāo)志,初步判斷當(dāng)前程序是否是目標(biāo)文件PE文件。如果要精確校驗(yàn)指定文件是否為一有效PE文件,則可以檢驗(yàn)PE文件格式里的各個(gè)數(shù)據(jù)結(jié)構(gòu),或者僅校驗(yàn)一些關(guān)鍵數(shù)據(jù)結(jié)構(gòu)。大多數(shù)情況下,沒有必要校驗(yàn)文件里的每一個(gè)數(shù)據(jù)結(jié)構(gòu),只要一些關(guān)鍵數(shù)據(jù)結(jié)構(gòu)有效,就

49、可以認(rèn)為是有效的PE文件2.6 EXE文件(wnjin)的格式共八十三頁2.6.3 PE文件格式2.6 EXE文件(wnjin)的格式typedef struct _IMAGE_DOS_HEADER / DOS的.EXE頭部 USHORT e_magic; / 魔術(shù)數(shù)字 USHORT e_cblp; / 文件最后頁的字節(jié)數(shù) USHORT e_cp; / 文件頁數(shù) USHORT e_crlc; / 重定義元素個(gè)數(shù) USHORT e_cparhdr; / 頭部尺寸,以段落為單位 USHORT e_minalloc; / 所需的最小附加段 USHORT e_maxalloc; / 所需的最大附加段

50、USHORT e_ss; / 初始的SS值(相對偏移量) USHORT e_sp; / 初始的SP值 USHORT e_csum; / 校驗(yàn)和 USHORT e_ip; / 初始的IP值 USHORT e_cs; / 初始的CS值(相對偏移量) USHORT e_lfarlc; / 重分配表文件地址 USHORT e_ovno; / 覆蓋號(hào) USHORT e_res4; / 保留字 USHORT e_oemid; / OEM標(biāo)識(shí)符(相對e_oeminfo) USHORT e_oeminfo; / OEM信息 USHORT e_res210; / 保留字 LONG e_lfanew; / 新EX

51、E頭部的文件地址 IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;共八十三頁2.6.3 PE文件格式PE文件頭緊接著DOS Stub的是PE headerPE header是IMAGE_NT_HEADERS的簡稱,即NT映像頭(PE文件頭),存放(cnfng)PE整個(gè)文件信息分布的重要字段,包含了許多PE裝載器用到的重要域。執(zhí)行體在支持PE文件結(jié)構(gòu)的操作系統(tǒng)中執(zhí)行時(shí)PE裝載器將從DOS MZ header中找到PE header的起始偏移量,從而跳過DOS Stub直接定位到真正的文件頭PE header2.6 EXE文件(wnjin)的格式共八十三頁2.6.3 PE

52、文件格式PE文件頭的結(jié)構(gòu)(jigu)字符串“PE00”(Signature)(4H字節(jié)) 緊跟著“PE00”的是映像文件頭,是NT映像頭的主要部分,它包含有PE文件的基本信息2.6 EXE文件(wnjin)的格式IMAGE_NT_HEADERS STRUCT Signature dd ? FileHeader IMAGE_FILE_HEADER OptionalHeader IMAGE_OPTIONAL_HEADER32 IMAGE_NT_HEADERS ENDStypedef struct _IMAGE_FILE_HEADER WORD Machine; / 0 x04,該程序要執(zhí)行的環(huán)境及

53、平臺(tái) WORD NumberOfSections; / 0 x06,文件中節(jié)的個(gè)數(shù) DWORD TimeDateStamp; / 0 x08,文件建立的時(shí)間 DWORD PointerToSymbolTable; / 0 x0c,COFF符號(hào)表的偏移 DWORD NumberOfSymbols; / 0 x10,符號(hào)數(shù)目 WORD SizeOfOptionalHeader; / 0 x14,可選頭的長度 WORD Characteristics; / 0 x16,標(biāo)志集合 IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;共八十三頁2.6.3 PE文件格式緊跟映像文

54、件頭后面(hu mian)的就是可選映像頭2.6 EXE文件(wnjin)的格式typedef struct _IMAGE_OPTIONAL_HEADER / 標(biāo)準(zhǔn)域: / WORD Magic; / 0 x18,一般是0 x010B BYTE MajorLinkerVersion; / 0 x1a,鏈接器的主/次版本號(hào), BYTE MinorLinkerVersion; / 0 x1b,這兩個(gè)值都不可靠 DWORD SizeOfCode; / 0 x1c,可執(zhí)行代碼的長度 DWORD SizeOfInitializedData; / 0 x20,初始化數(shù)據(jù)的長度(數(shù)據(jù)節(jié)) DWORD Siz

55、eOfUninitializedData; / 0 x24,未初始化數(shù)據(jù)的長度(bss節(jié)) DWORD AddressOfEntryPoint;/ 0 x28,代碼的入口RVA地址,程序從這開始執(zhí)行 DWORD BaseOfCode; / 0 x2c,可執(zhí)行代碼起始位置,意義不大 DWORD BaseOfData; / 0 x30,初始化數(shù)據(jù)起始位置,意義不大 / NT 附加域: / DWORD ImageBase; / 0 x34,載入程序首選的RVA地址 DWORD SectionAlignment; / 0 x38,加載后節(jié)在內(nèi)存中的對齊方式 DWORD FileAlignment; /

56、 0 x3c,節(jié)在文件中的對齊方式(待續(xù))共八十三頁2.6.3 PE文件格式2.6 EXE文件(wnjin)的格式(續(xù)前) WORD MajorOperatingSystemVersion; / 0 x3e,操作系統(tǒng)主/次版本, WORD MinorOperatingSystemVersion; / 0 x40,Loader并沒有用這兩個(gè)值 WORD MajorImageVersion; / 0 x42,可執(zhí)行文件主/次版本 WORD MinorImageVersion; / 0 x44 WORD MajorSubsystemVersion; / 0 x46,子系統(tǒng)版本號(hào) WORD Minor

57、SubsystemVersion; / 0 x48 DWORD Win32VersionValue; / 0 x4c,Win32版本,一般是0 DWORD SizeOfImage; / 0 x50,程序調(diào)入后占用內(nèi)存大小(字節(jié)) DWORD SizeOfHeaders; / 0 x54,文件頭的長度之和 DWORD CheckSum; / 0 x58,校驗(yàn)和 WORD Subsystem; / 0 x5c,可執(zhí)行文件的子系統(tǒng) WORD DllCharacteristics; / 0 x5e,何時(shí)DllMain被調(diào)用,一般為0 DWORD SizeOfStackReserve; / 0 x60,

58、初始化線程時(shí)保留的堆棧大小 DWORD SizeOfStackCommit; / 0 x64,初始化線程時(shí)提交的堆棧大小 DWORD SizeOfHeapReserve; / 0 x68,進(jìn)程初始化時(shí)保留的堆大小 DWORD SizeOfHeapCommit; / 0 x6c,進(jìn)程初始化時(shí)提交的堆大小 DWORD LoaderFlags; / 0 x70,裝載標(biāo)志,與調(diào)試相關(guān) DWORD NumberOfRvaAndSizes; / 0 x74,數(shù)據(jù)目錄的項(xiàng)數(shù),一般是16 IMAGE_DATA_DIRECTORY DataDirectoryIMAGE_NUMBEROF_DIRECTORY_EN

59、TRIES; IMAGE_OPTIONAL_HEADER, *PIMAGE_OPTIONAL_HEADER;共八十三頁2.6.3 PE文件格式節(jié)表是緊挨著NT映像頭的一結(jié)構(gòu)數(shù)組,其成員(chngyun)的數(shù)目由映像文件頭中NumberOfSections決定2.6 EXE文件(wnjin)的格式#define IMAGE_SIZEOF_SHORT_NAME 8typedef struct _IMAGE_SECTION_HEADER UCHAR NameIMAGE_SIZEOF_SHORT_NAME; / 節(jié)名 union ULONG PhysicalAddress; / OBJ文件中表示本節(jié)物

60、理地址 ULONG VirtualSize; / EXE文件中表示節(jié)的實(shí)際字節(jié)數(shù) Misc; ULONG VirtualAddress; / 本節(jié)的RVA ULONG SizeOfRawData; / 本節(jié)經(jīng)過文件對齊后的尺寸 ULONG PointerToRawData; / 本節(jié)原始數(shù)據(jù)在文件中的位置 ULONG PointerToRelocations; / OBJ文件中表示本節(jié)重定位信 / 息的偏移,EXE文件中無意義 ULONG PointerToLinenumbers; / 行號(hào)偏移 USHORT NumberOfRelocations; / 本節(jié)需重定位的數(shù)目 USHORT Nu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論