姚 罡
(桂林電子科技大學,廣西 桂林541004)
PE(Portable Execute)文件被稱為可移植的執(zhí)行體,是微軟制定的一種文件標準,常見的EXE、DLL、OCX、SYS、COM都是PE文件,在Windows操作系統(tǒng)中舉足輕重。在加密與解密、軟件漢化、逆向工程、反病毒等安全領(lǐng)域都涉及到PE文件的應用。
但PE文件格式定義復雜,難以理解,導致入門較難,學生很難深入去研究。通過多媒體教學,課堂上直接利用Winhex打開任意EXE文件或DLL文件,從原始的十六進制找到我們感興趣的值,可以明了地分析出Windows操作系統(tǒng)如何載入EXE文件及DLL文件的工作機制,將抽象的格式定義以直觀、互動的方式展示給學生,提高學生的學習興趣。
本文介紹了如何應用Winhex理解PE文件的教學過程,以研究輸入表和輸入地址表為例,并對兩者的運行機制進行分析,使得學生理解Windows操作系統(tǒng)如何載入PE文件,以及可執(zhí)行文件如何調(diào)用API函數(shù)。
winhex是一款以十六進制編輯器為核心的數(shù)據(jù)處理高級工具,可以直接打開硬盤上的文件和內(nèi)存,并以十六進制形式顯示數(shù)據(jù),可以實現(xiàn)數(shù)據(jù)恢復、低級數(shù)據(jù)處理等強大功能,可分析RAW格式原始數(shù)據(jù)鏡像文件中的完整目錄結(jié)構(gòu)。Winhex可用于分析靜態(tài)PE文件(硬盤上)和動態(tài)PE文件(調(diào)入內(nèi)存后),并通過靜、動態(tài)PE文件的比較,重點討論兩個非常重要的數(shù)據(jù)結(jié)構(gòu):輸入表和輸入地址表,從而掌握Windows操作系統(tǒng)中PE文件的工作機制。
通過理解PE文件格式中的字段,可以逐步理解PE文件的結(jié)構(gòu)及其原理。PE文件格式如圖1所示。所有的PE文件都是從MS-DOS頭開始,該頭部后面的是PE頭,其位置可從MS-DOS頭中的一個e_lfanew字段的值得到,PE頭是由PE Signature、IMAGE_FILE_HEADER、IMAGE_OPTIONAL_HEADER構(gòu)成,在IMAGE_NT_HEADERS頭部后面是節(jié)表(Section Table),節(jié)表是一個數(shù)組,數(shù)組中的每一個元素用來描述后繼每一節(jié)的信息,如節(jié)名、節(jié)大小、節(jié)偏移、節(jié)屬性等。在節(jié)表后面是具體的節(jié),如代碼節(jié)(.text)、數(shù)據(jù)節(jié)(.data)等,PE文件中非常重要的輸入表、輸出表等就存在上述節(jié)中。
圖1 PE文件格式
利用Winhex打開一個可執(zhí)行文件thunder.exe(迅雷安裝程序),通過對字段值的分析,即DOS頭的“MZ”和PE頭的“PE”這兩個標志可以初步判斷當前程序是否是目標是PE文件。也就是通過IMAGE_DOS_HEADER結(jié)構(gòu)來識別一個合法的DOS頭,可以看到文件起始為0X4D5AH(“MZ”),接著通過該結(jié)構(gòu)的e_lfanew(偏移3CH,32bits)的值是0x00000118H(注意字節(jié)序)即為PE頭開始的偏移,定位到該偏移,其值為PE文件開始的標志0X00004550H(“PE 苍南县| 乌审旗| 高雄县| 宜君县| 绥芬河市| 沁源县| 师宗县| 泗水县| 唐河县| 元朗区| 张家口市| 盐城市| 洛宁县| 营山县| 靖远县| 依兰县| 威海市| 涪陵区| 来安县| 乐清市| 繁昌县| 泰州市| 若尔盖县| 崇信县| 阜平县| 循化| 苏州市| 永胜县| 龙州县| 龙陵县| 克什克腾旗| 榆林市| 长寿区| 东丰县| 竹北市| 开鲁县| 尖扎县| 呼和浩特市| 江津市| 光泽县| 资源县|