从可执行文件中删除.reloc节区

.reloc节区

  • EXE形式的PE文件中“.reloc”项对运行没什么影响
  • 对DLL和SYS而言“.reloc”项则是必须的
  • .reloc一般位于所有节区的最后

reloc.exe

删除.reloc节区的步骤:

  • 删除.reloc节区头
  • 删除.reloc节区
  • 修改IMAGE_FILE_HEADER
  • 修改IMAGE_OPTIONAL_HEADER

删除.reloc节区头

通过PEView查看:
从可执行文件中删除.reloc节区
通过HEX Editor将其用0填充:
从可执行文件中删除.reloc节区
从可执行文件中删除.reloc节区

删除.reloc节区

文件中.reloc 节区的起始偏移地址为C000,将其全部删除:
从可执行文件中删除.reloc节区

修改IMAGE_FILE_HEADER

需要修改的项包括:

  • NumberOfSections:删除一个节区所以应该减1
    从可执行文件中删除.reloc节区
    从可执行文件中删除.reloc节区
    从可执行文件中删除.reloc节区

修改IMAGE_OPTIONAL_HEADER

需要修改的项包括:

  • SizeOfImage:删除.reloc节区后,映射大小随之改变
    从可执行文件中删除.reloc节区
    .reloc的大小为E40,根据SectionAlignment将其扩展为1000,所以需要减去1000:
    从可执行文件中删除.reloc节区
    从可执行文件中删除.reloc节区
参考文献

《****核心原理》