美文网首页
PE文件 -- 学习笔记

PE文件 -- 学习笔记

作者: Cichar | 来源:发表于2017-04-06 22:11 被阅读0次
    • 使用SDK或Visual C++创建PE文件时,EXE默认的ImageBase为00400000,DLL默认10000000。使用DDK创建的SYS文件默认的ImageBase为10000。

    • Windows Vista之后的版本引入了ASLR安全机制,每次运行EXE文件都会被加载到随机地址,增强了系统安全性。

    • VC++中生成的PE文件的重定位节区名为.reloc,删除该节区后文件照常运行。

    • .reloc删除:

    • 首先在 IMAGE_SECTION_HEADER .reloc 处查看该节区头的长度和 .reloc 节区的偏移地址,以及 Virtual Size

    • 然后将 .reloc 的节区头中的值替换为0, .reloc 节区整个删除

    • 删除节区后,修改 IMAGE_FILE_HEADER 中的 Number of Sections 项。

    • 通过 IMAGE_OPTIONAL_HEADER - size of Image 修改映像值大小。

    • 需要减去的值根据之前记录的 Virtual Size 和 IMAGE_OPTIONAL_HEADER - Section Alignment 值扩展后所得。

    • 根据PE文件格式规范,IMAGE_NT_HEADERS的起始位置是“可变的”,由IMAGE_DOS_HEADER中的e_lfanew的值决定。一般拥有如下值(不同构建环境会有不同):

    e_lfanew = MZ文件头大小(40) + DOS存根大小(可变:VC++下为A0) = E0
    
    • IMAGE_FILE_HEADER中的SizeOfOptionalHeader表示IMAGE_OPTIONAL_HEADER结构体的长度。另一层含义是确定节区头(IMAGE_SECTION_HEADER)的起始偏移。

    • 从IMAGE_OPTIONAL_HEADER的起始偏移加上SizeOfOptionalHeader的值的位置开始才是IMAGE_SECTION_HEADER

    • IMAGE_OPTIONAL_HEADER在32位PE32中大小为E0,64位PE32+中的大小为F0

    • Data_Directories中Import_Table为八个字节。前四个字节为导入表的地址(RVA),后四个字节为导入表的大小(SIZE)。如下图:导入表的RVA为271EE

    相关文章

      网友评论

          本文标题:PE文件 -- 学习笔记

          本文链接:https://www.haomeiwen.com/subject/ipoqattx.html