-
-
[分享]PE文件简介
-
发表于:
2008-11-26 08:51
6824
-
学习一段时间的汇编,也开始看看反汇编,搞搞破解的,后来终于明白了,如果破解windows32应用程序,了解可执行文件的结构,对破解的帮助是多么的大呀
今天就把我学习过程中的一点笔记贴出来,希望对初学者有所帮助
PE格式是Windows下最常用的可执行文件格式,如果在了解了PE文件的基础上,进行加密破解,将会是您事半功倍的
在一个操作系统中,可执行的代码最终装入内存执行之前是以文件的方式放在磁盘中的,DOS操作系统的COM文件是最早的也是结构最简单的可执行文件,COM文件只包括可执行代码,没有任何附加的数据,当然这样一来,就有很多限制了,比如:由于没有说明信息指定文件入口,文件的开头必须是第一条指令;也没有重定位信息,这样代码中不能有跨段操作数据的指令,造成代码和数据,还有堆栈只能限制在同一个64kb的段中;加密就不更用提了。
为了更灵活地使用可执行代码,dos系统又定义另一种可执行文件:exe文件,exe文件在代码的前面加了一个文件头,文件头有很多说明信息,如:文件入口、堆栈位置、重定位表。操作系疼根据其中的信息将代码装入内存,根据重定位表修正代码,最后在设置好堆栈后从文件头重指定的入口开始执行
可以看得出,可执行文件的格式也是由操作系统决定的,因为头文件是提供给操作系统用的。由于不同的操作系统的运行模式是不一样的,所以造成可执行文件的格式各不相同
Microsoft在Windows 9.x设计一种在纯32位下执行文件的格式--PE格式,英文是Portable Executable File Format,意思是可移植的执行体文件格式
PE文件的基本结构如下图所示,在PE文件中,代码、已初始化的数据、资源和重定位信息等数据被按照属性分类放到不特哦那个的Section(节区)内,而每个节区的属性和位置信息用一个IMAGE_SECTION_HEADER结构来描述,所有的IMAGE_SECTION_HEADER结构组成一个节表Section Table,节表数据在PE文件中被放在所有节数据的前面。win32中可以对每个内存页分别制定可执行、可读写等属性,在PE文件中将同样属性的数据放在一起时为了统一描述这些数据装入内存后的页面属性。

由于数据是按照属性在节中放置的,不同用途但属性相同的数据可能放在同一个节中,所以PE文件中还用一系列的数据目录结构IMAGE_DATA_DIRACTORY来分别指明这些数据的位置,数据目录表和其他描述文件属性的数据合在一起成为PE文件头,PE文件头被放置在节和节表的前面
未了与DOS系统的文件格式兼容,在这部分的前面又加上了一个标准的DOS MZ格式的可执行部分,所有这些部分合起来组成现在使用的PE文件。
[培训]科锐逆向工程师培训第53期2025年7月8日开班!