加密与解密(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的大小。
    
    最后一个是文件的属性,下面是一些不同属性的值,用或运算|定义多个不同属性;
    
0 0
原创粉丝点击