流水账笔记:PE文件格式(手工增加节)
2017-10-16 04:19
267 查看
为方便理解,仅以“Hello, PE!”的小程序为例,使用工具 010 Editor:
练习文件下载
当前程序目前有 2 个节区,且节头部分有足够的空间来增加另一个节头。
所以新增的节区的 RVA 要从 3000h开始,FOA 要从 800h开始,所填数据如下表:
只不过它是运行在了我们所增加的节区的数据,可以用此方法注入程序。
如果把改字段修改为 2 或者 0。运行时,从文件到内存并不是只拷贝了 2 个字节,而是根据 SizeOfRawData 的大小拷贝 。
如果把该值修改为 0x1000 以上的值,则程序将 无法启动
如果将 SizeOfImage 的值修改为 5000h,则该节 Misc 的值的上限位 2000h
暂时得出结论:该值不能随便修改 ,且大小与 SizeOfImage 的值有关←_←
如果我们将该值修改为 201h,我们发现映射到内存的数据是文件中 0x800 ~ 0xBFF 的数据。
猜测:该值与映射到内存的数据大小呈下表关系:
练习文件下载
当前程序目前有 2 个节区,且节头部分有足够的空间来增加另一个节头。
增加节的步骤
#1
将文件头的 NumberOfSection (节区数量) 改为 3#2
在最后一个节区头后面增加一个节区头,假设新的节区在文件中占 200h,由于该程序的内存和文件的映射关系如图:内存中的地址 | 文件中的地址 |
---|---|
0x00400000 ~ 0x00401000 | 0x000 ~ 0x400 |
0x00401000 ~ 0x00402000 | 0x400 ~ 0x600 |
0x00402000 ~ 0x00403000 | 0x600 ~ 0x800 |
成员名称 | 值 |
---|---|
Name | .MyCode |
Misc | 48 |
VirtualAddress | 3000h |
SizeOfRawData | 200h |
PointerToRawData | 800h |
#3
将文件头(FileHeader)中的 SizeOfImage 修改为 4000h(比原来多映射了一个页)#4
于是可以在 800h ~ 0A00h 的范围内填写数据了。如果直接将 代码节 的数据拷贝过来,把入口点改为0x0040300C,点击程序,程序也是可以正常运行的。用 OD 打开程序,我们可以看到,0x0040300c 有我们所增加的数据。只不过它是运行在了我们所增加的节区的数据,可以用此方法注入程序。
节头字段
Misc
指该节区实际从文件拷贝到内存的字节数。如果把改字段修改为 2 或者 0。运行时,从文件到内存并不是只拷贝了 2 个字节,而是根据 SizeOfRawData 的大小拷贝 。
如果把该值修改为 0x1000 以上的值,则程序将 无法启动
如果将 SizeOfImage 的值修改为 5000h,则该节 Misc 的值的上限位 2000h
暂时得出结论:该值不能随便修改 ,且大小与 SizeOfImage 的值有关←_←
VirtualAddress
表示该节在虚拟内存中的位置(RVA)。该值应该与 SectionAlignment 对齐,并且与上一个节的位置相连。如上一个节的地址范围为 0x2000 ~ 0x3000,那么这个只能为 0x3000,否则程序将无法正常启动。SizeOfRawData
该节区中,连续从文件拷贝到内存的字节数。建议该值应该是文件对齐值的倍数。如果将该值修改为 1。该程序依然能够正常运行,用 OD 打开后,我们发现映射到内存的数据依然是文件中 0x800 ~ 0x9FF 的数据。如果我们将该值修改为 201h,我们发现映射到内存的数据是文件中 0x800 ~ 0xBFF 的数据。
猜测:该值与映射到内存的数据大小呈下表关系:
SizeOfRawData | 映射到内存的大小 |
---|---|
0 ~ 0x200 | 0x200 |
0x201 ~ 0x400 | 0x400 |
0x401 ~ 0x600 | 0x600 |
… | … |
PointerToRawData
在该节区中,从文件的哪个位置开始,映射到内存。建议该值为 文件对齐值 的倍数。如在该程序中,如果该值被修改为 0x805,那么操作系统依然会从 0x800 的位置开始映射。相关文章推荐
- 流水账笔记:PE文件格式(OptionalHeader 下)
- 流水账笔记:PE文件格式(SectionHeaders)
- 流水账笔记:PE文件格式(RVA & FOA)
- 流水账笔记:PE文件格式(FileHeader)
- 流水账笔记:PE文件格式(导入表注入---手动)
- 流水账笔记:PE文件格式(资源表)
- 流水账笔记:PE文件格式(OptionalHeader 上)
- 流水账笔记:PE文件格式(导出表)
- 流水账笔记:PE文件格式(Dos Header)
- 《黑客免杀攻防》 第七章 PE文件格式详解 阅读笔记
- 软件安全学习笔记(7):PE文件总体格式
- PE文件格式学习笔记
- PE文件格式学习笔记(一) 转自http://blog.csdn.net/hbyufan/
- PE文件格式笔记
- 《逆向工程核心原理》<02-13> PE文件格式 部分笔记
- PE文件格式:导入表&IAT——手工重组
- PE文件格式详解(六)――Exprot Table(引出表)
- 学习Polymorphours的代码,研究一下pe文件格式
- PE文件格式详解(3)
- 08-03-03>pe_xscan 增加对文件类型扩展名隐藏性的检测