了解了EXE和DLL里面的奥秘,你将成为一名知识更加渊博的程序员!”
可以看到,作为网络安全爱好者的我们,掌握和熟练利用PE(Portable Executable)文件格式的知识将必定能为我们学习黑客技术和攻防知识打下良好的基础。
在网络攻防的对抗中,常常接触到有关PE文件格式方面的技术,比如缓冲区溢出技术中编写Win32 ShellCode时利用PE文件结构的特征查找API函数地址就是一个很经典的例子,又比如,令人寒心的PE型病毒都是利用PE文件结构而大规模感染系统的其他PE文件。
PE文件格式的基础知识,如果读者不熟悉的话,网上这方面的教程比比皆是。另外,对于习惯看书的读者们,强烈推荐看雪软件的《加密解密II》,《软件加密技术内幕》这两本经典之作。
现在,市面上有很多的静态分析PE文件方面的工具,像PeDump和Pe Explorer(附件中均有收录)这两款工具,可算的上是其中的佼佼者。前者是命令行下的,从它的可选参数就可以看出期功能的强大。后者是图形化的,界面友好而且功能也很强大。
读者肯定有疑问了,既然都有这么现成的工具了,那写本文目的是什么呢?这里说明一下,市面上出现的PE分析工具包括推荐的两款工具都有一个共同点,就是他们加载的都是磁盘上的PE文件,但有时候我们却要分析内存中的PE映象,这个又要如何实现呢?我们下面就自己来分析解决这个问题吧!
可以看到,作为网络安全爱好者的我们,掌握和熟练利用PE(Portable Executable)文件格式的知识将必定能为我们学习黑客技术和攻防知识打下良好的基础。
在网络攻防的对抗中,常常接触到有关PE文件格式方面的技术,比如缓冲区溢出技术中编写Win32 ShellCode时利用PE文件结构的特征查找API函数地址就是一个很经典的例子,又比如,令人寒心的PE型病毒都是利用PE文件结构而大规模感染系统的其他PE文件。
PE文件格式的基础知识,如果读者不熟悉的话,网上这方面的教程比比皆是。另外,对于习惯看书的读者们,强烈推荐看雪软件的《加密解密II》,《软件加密技术内幕》这两本经典之作。
现在,市面上有很多的静态分析PE文件方面的工具,像PeDump和Pe Explorer(附件中均有收录)这两款工具,可算的上是其中的佼佼者。前者是命令行下的,从它的可选参数就可以看出期功能的强大。后者是图形化的,界面友好而且功能也很强大。
读者肯定有疑问了,既然都有这么现成的工具了,那写本文目的是什么呢?这里说明一下,市面上出现的PE分析工具包括推荐的两款工具都有一个共同点,就是他们加载的都是磁盘上的PE文件,但有时候我们却要分析内存中的PE映象,这个又要如何实现呢?我们下面就自己来分析解决这个问题吧!
首先,要明确的一点是,PE文件格式在磁盘中的数据结构布局和内存中的数据格式布局是一致的,就是说, 知道如何在PE文件中寻找一些内容,那么几乎都能在被装入到内存的映射文件中找到相同的信息。
这样的话,就好办了,我们可以使用乾坤大挪移,用类似分析磁盘PE文件的方法来分析内存中的PE文件了。大家可以看到,所有PE文件(包括32位的DLL)都是以一个简单MZ-DOS头开始,MZ格式的文件头在WINNT.H中有定义,其IMAGE_DOS_HEADER结构如下(左边数字是到文件头的偏移量):
typedef struct _IMAGE_DOS_HEADER { // DOS .EXE 头
+0h WORD e_magic; // “MZ”
…...
+3Ch LONG e_lfanew; //指向PE文件头偏移
} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
我只列出了两个最重要的成员,e_magic是DOS可执行文件标记“MZ”,而e_lfanew指向PE文件头“PE”,0,0。执行程序在执行的时候,PE文件装载器将从MZ-DOS头的e_lfanew字段找到PE头起始偏移,再跳到真正的PE文件头处。IMAGE_NT_HEADERS的数据结构如下:
typedef struct _IMAGE_NT_HEADERS {
+0h DWORD Signature; // PE文件标识
+4h IMAGE_FILE_HEADER