参考教材
https://gryffinbit.lanzoui.com/imk3fpk3pfi
实验目的
通过利用C32asm,手工编写一个Win32平台下的PE文件,进一步熟练掌握PE文件的结构。
实验内容
参考教材P119-132,手工打造一个PE文件,该文件执行后输出如下内容:
实验结果
1. 构造IMAGE_DOS_HEADER结构
该结构体的大小为 40h 字节(十进制的64 字节) 。打开 hex 编辑器,填入64 个字节的0,然后根据IMAGE_DOS_HEADER的结构进行修改,
2. 构造PE标识符
在构造完 DOS 头后,紧跟着构造 PE 标识符,PE 标识符占 4 个字节,因此hex中增加 4 个字节的数据,PE 标识符对应的十六进制数据为 “50 45 00 00”
3. 构造 IMAGE_FILE_HEADER 结构
该结构体的大小为 14h 字节(十进制的 20 字节) ,同样hex中插入 20 个字节的全 0 数据,然后进行数据的修改填充。
4. 构造 IMAGE_OPTIONAL_HEADER 结构
该结构体的大小为 0E0h 字节(十进制的 224 字节) ,在 hex 中填充 224 字节的全 0 数据,然后按照表 5-3 所列进行填充,最终填充结果
5. 构造 IMAGE_SECTION_HEADER 结构
IMAGE_SECTION_HEADER 结构体的大小是 40 字节, 由于需要构造 3 个节表项, 因此节表大小占 120 字节。节表的填充如表 5-4 所列。最终填充结果
6. 0 数据的填充
由于需要按照 0x00001000 的长度来进行对齐,因此用 0x1000−0x01B0=0x0E50,即十进制数的 3664。在 hex 中插入“3664”个 0 字符将 PE 文件头按照 IMAGE_OPTIONAL_ HEADER 的 SizeOfHeader 进行对齐。在插入 3664 个 0 字符后,文件的结束偏移地址是0x00000FFF。
在填充完 PE 文件头部后,需要继续填充 0x00001000 字节的 0 字符,该 0x00001000 字节的数据用来存放.text 节的内容,即代码节的内容。继续使用 C32Asm 插入 4096 个 0 字符。
由于代码节是最后完成的部分,因此这里只是先对其填充 0 字符。
7. 填充.data 节的数据
注意比特数要保持一致
8. 填充.idata 节的数据
最终填充数据
使用LordPE检查
9. 填充.text 节的数据
OD打开后
通过 Ctrl+G 快捷键来到地址 0x00403000 处,查看导入表的信息
填写反汇编代码
最终结果