参考教材

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 处,查看导入表的信息

填写反汇编代码

最终结果

评论