目录
预备知识
一、相关实验
本实验要求您已经认真学习和完成了《IMAGE_DOS_HEADER解析》。
二、C32Asm
C32Asm是一款国产的16进制编辑器,可以十分方便的对二进制文件进行各种编辑操作,同时支持反汇编操作。
本系列实验主要使用C32Asm作为编辑器,同类的编辑工具还有WinHex、010Editor等。
三、LordPE
LordPE除了可以查看PE文件的基本信息之外,还支持对PE文件的编辑操作,可以修改PE文件中各个字段或者结构的数据然后进行保存。
实验目的
1)了解PE文件结构中的DosStub部分;
2)学习PE文件结构中FileHeader部分;
3)掌握PE文件结构相关的几个重要概念。
实验环境
服务器:Windows XP,IP地址:随机分配
辅助工具:C32Asm、PEiD、StudPE、LordPE
实验步骤一
PE头结构的定位。
在上一个实验中,提到了PE头的位置由IMAGE_DOS_HEADER的最后一个字段e_lfanew来指定,现在在C32Asm中进行一次实践操作。打开C:\PE,选中notepad.exe后单击鼠标右键,在弹出的右键菜单中选择“发送到(N)”、C32Asm,即可使用C32Asm打开notepad.exe文件。
在C32Asm中,可以看到e_lfanew的值为0x000000E0(IMAGE_DOS_HEADER的大小为0x40,而e_lfanew位于IMAGE_DOS_HEADER的最后一个DWORD类型的值)。在C32Asm中按下Ctrl+G快捷键,在弹出的跳转对话框中选中“文件开始”以及“16进制”两个选项,随后在OFFSET中输入要跳转的地址E0,单击确定按钮即可跳转到PE头所在的位置了,如下图所示:
e_lfanew指向PE头的示意图的示意图如下图所示:
PE头在WinNt.h头文件中的结构体名称为IMAGE_NT_HEADERS,那么在IMAGE_DOS_HEADER与IMAGE_NT_HEADERS之间的数据是什么呢?为什么需要根据IMAGE_DOS_HEADER结构的e_lfanew成员来确定IMAGE_NT_HEADERS结构的位置呢?
在IMAGE_DOS_HEADER和IMAGE_NT_HEADERS之间存在一个叫做DosStub的数据块,DosStub实际上是一个DOS程序,当PE文件运行在DOS模式下时这个程序将被执行。DosStub通常由编译器自动生成,而且它的大小也并不固定,由此造成PE头的位置也不是固定的,需要动态进行解析。当PE文件运行在DOS模式下时,DosStub通常输出一句话“This program cannot be run in DOS mode.”然后退出。
对于PE文件