0x0 基础知识
- DO 头分为两部分:DOS ‘MZ’ HEADER 和 DOS stub
- DOS头的作用是
兼容 MS-DOS 操作系统中的可执行文件 ,对于 32位PE文件来说,DOS 所起的作用就是显示一行文字,提示用户:我需要在32位windows上才可以运行。 - DOS ‘MZ’ HEADER对应的结构体
_IMAGE_DOS_HEADER (64个字节) 中仅第一个成员e_magic 和最后一个成员e_lfanew 在32位及以上的WINDOWS系统上有效 - DOS Stub对应为一串反汇编代码,其功能和输出This program cannot be run in DOS相关
- DOS ‘MZ’ HEADER中无效的成员部分可用来填充shellcode来达到其它目的
typedef struct _IMAGE_DOS_HEADER { // DOS .EXE header
WORD e_magic; // Magic number
WORD e_cblp; // Bytes on last page of file
WORD e_cp; // Pages in file
WORD e_crlc; // Relocations
WORD e_cparhdr; // Size of header in paragraphs
WORD e_minalloc; // Minimum extra paragraphs needed
WORD e_maxalloc; // Maximum extra paragraphs needed
WORD e_ss; // Initial (relative) SS value
WORD e_sp; // Initial SP value
WORD e_csum; // Checksum
WORD e_ip; // Initial IP value
WORD e_cs; // Initial (relative) CS value
WORD e_lfarlc; // File address of relocation table
WORD e_ovno; // Overlay number
WORD e_res[4]; // Reserved words
WORD e_oemid; // OEM identifier (for e_oeminfo)
WORD e_oeminfo; // OEM information; e_oemid specific
WORD e_res2[10]; // Reserved words
LONG e_lfanew; // File address of new exe header
} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
我们只需要关注两个域:
成员 | 数据宽度 | 注释 | 说明 | 值 |
WORD (2字节) | Magic number | 固定为4d 5a (ASCII=’MZ’) | ||
LONG (4字节) | File address of new exe header | 为 32 位可执行文件扩展的域,用来表示 DOS头之后的 | 不定 |
0x1 实现代码
© 版权声明
THE END
暂无评论内容