加密与解密(PE结构笔记①)
来源:互联网 发布:淘宝生意参谋怎么使用 编辑:程序博客网 时间:2024/05/29 18:09
虽然研究可执行文件的格式并不是程序员的首要任务,但这种工作能积累大量的知识有助于对操作系统的深刻理解。掌握可执行文件的数据结构与运行机理也是研究软件安全的必修课,感兴趣的多多交流,请大神大牛们多多指点。
推荐书籍《加密与解密》,推荐视频教程鱼C工作室加密与解密系列。
从某种意义上来说,可执行文件的格式是操作系统本身执行机制的反映,一个系统中的可执行文件的架构决定了系统需要什么执行机制。
EXE文件和DLL文件之间的区别完全是说法上的不同,但是它们使用完全相同的PE结构,而唯一的区别就是用一个字段标识出这个文件是EXE还是DLL。
PE文件架构的结构:
将一个一个来学习这个结构的知识。
PE文件使用的是一个平面地址空间,所有代码和数据都被合并在一起,组成一个很大的结构。文件的内容被分割为不同的区块,块中包含代码和数据,每个区块按页边界来对齐,区块没有大小限制,是一个连续的结构。每个区块都有它们自己的属性。
PE文件不是作为单一文件直接被映射到内存中去,PE装载器遍历PE文件并决定文件的哪一部分被映射,这种映射方式是将文件较高的偏移地址映射到较高的内存地址中。当磁盘文件一旦被装入到内存中,磁盘上的数据结构布局和内存上的数据结构布局是一样的。如果知道在磁盘中寻找一些内容,那么几乎都能在被装入到内存映射文件中找到相同的信息。但数据之间的相对位置可能发生改变。
每一个PE文件是以一个DOS程序开始的,有了它,一旦程序在DOS执行下,DOS才能识别出这是有效的执行体。PE文件的第一个字节起始于一个传统的MS-DOS头部,被称为IMAGE_DOS_HEADER。
这是IMAGE_DOS_HEADER的结构,我们只关心第一个和最后一个字段,e_magic标志这是一个可执行文件,一般为(4Dh,5Ah)。而e_lfanew是一个指针,指向PE文件头。e_lfanew指向的位置是PE头的开始。
PE文件头紧挨着DOS头,PE文件头是PE相关结构NT映像头,IMAGE_NT_HEADER,这是一个很重要的结构。
Signature字段被设置为00004550h,这个字段标志这个PE文件头的开始,验证文件是不是可执行文件,就需要检测这个字段。
IMAGE_FILE_HEADER是一个结构里面的结构,称为文件头。
IMAGE_OPTIONAL_HEADER32OptionalHeader是文件头的另一个扩展结构,也是非常的重要。
各个字段都有标志它们们功能。
第一个字段记载可执行文件目标CPU类型,下面是不同CPU类型在各自的值;
第二个字段表示区块的数目,第三个字段表明文件的创建日期时间,第四和第五个字段我们不作关心,第六个字段是指IMEAG_NT_HEADER里的IMAGE_OPTIONAL_HEADER32OptionalHeader的大小。
最后一个是文件的属性,下面是一些不同属性的值,用或运算|定义多个不同属性;
推荐书籍《加密与解密》,推荐视频教程鱼C工作室加密与解密系列。
从某种意义上来说,可执行文件的格式是操作系统本身执行机制的反映,一个系统中的可执行文件的架构决定了系统需要什么执行机制。
EXE文件和DLL文件之间的区别完全是说法上的不同,但是它们使用完全相同的PE结构,而唯一的区别就是用一个字段标识出这个文件是EXE还是DLL。
PE文件架构的结构:
将一个一个来学习这个结构的知识。
PE文件使用的是一个平面地址空间,所有代码和数据都被合并在一起,组成一个很大的结构。文件的内容被分割为不同的区块,块中包含代码和数据,每个区块按页边界来对齐,区块没有大小限制,是一个连续的结构。每个区块都有它们自己的属性。
PE文件不是作为单一文件直接被映射到内存中去,PE装载器遍历PE文件并决定文件的哪一部分被映射,这种映射方式是将文件较高的偏移地址映射到较高的内存地址中。当磁盘文件一旦被装入到内存中,磁盘上的数据结构布局和内存上的数据结构布局是一样的。如果知道在磁盘中寻找一些内容,那么几乎都能在被装入到内存映射文件中找到相同的信息。但数据之间的相对位置可能发生改变。
每一个PE文件是以一个DOS程序开始的,有了它,一旦程序在DOS执行下,DOS才能识别出这是有效的执行体。PE文件的第一个字节起始于一个传统的MS-DOS头部,被称为IMAGE_DOS_HEADER。
这是IMAGE_DOS_HEADER的结构,我们只关心第一个和最后一个字段,e_magic标志这是一个可执行文件,一般为(4Dh,5Ah)。而e_lfanew是一个指针,指向PE文件头。e_lfanew指向的位置是PE头的开始。
PE文件头紧挨着DOS头,PE文件头是PE相关结构NT映像头,IMAGE_NT_HEADER,这是一个很重要的结构。
Signature字段被设置为00004550h,这个字段标志这个PE文件头的开始,验证文件是不是可执行文件,就需要检测这个字段。
IMAGE_FILE_HEADER是一个结构里面的结构,称为文件头。
IMAGE_OPTIONAL_HEADER32OptionalHeader是文件头的另一个扩展结构,也是非常的重要。
各个字段都有标志它们们功能。
第一个字段记载可执行文件目标CPU类型,下面是不同CPU类型在各自的值;
第二个字段表示区块的数目,第三个字段表明文件的创建日期时间,第四和第五个字段我们不作关心,第六个字段是指IMEAG_NT_HEADER里的IMAGE_OPTIONAL_HEADER32OptionalHeader的大小。
最后一个是文件的属性,下面是一些不同属性的值,用或运算|定义多个不同属性;
0 0
- 加密与解密(PE结构笔记①)
- 加密与解密(PE结构笔记_概述)
- 加密与解密(PE结构笔记②)
- 加密与解密(PE结构笔记③)
- 加密与解密(PE结构笔记④)
- 加密与解密(PE结构笔记⑤)
- 加密与解密(PE结构笔记⑥)
- 加密与解密(PE结构笔记⑦)
- 《加密与解密》4 PE
- 《加密与解密》学习笔记(二) - 加密算法和PE文件
- 《加密与解密》3 初步PE
- 加密与解密笔记
- 《加密与解密》笔记(一)
- 《加密与解密》笔记(二)
- 《加密与解密》笔记(三)
- 《加密与解密》笔记三(一)
- 《加密与解密》笔记三(二)
- 《加密与解密》笔记四(一)
- project euler 54
- HDU 1722 Cake
- 加密与解密(PE结构笔记_概述)
- 我的微信公众号开发日记-0
- CSS选择器性能
- 加密与解密(PE结构笔记①)
- leetcode Ugly Number II
- Socket编程在安卓开发中的应用
- java 字节数组取反
- 动态规划_数字的划分
- 加密与解密(PE结构笔记②)
- BZOJ1005[HNOI2008]明明的烦恼
- poj 2240 Arbitrage 【最短路&&floyd】
- poj1163 The Triangle