逆向工程核心原理-17

逆向工程核心原理-第十七章-从可执行文件中删除.reloc节区

17.1 .reloc节区

在EXE中, .reloc(基址重定位表)几乎没什么用, 所以删除了也没事. 我们使用HexEditor删除

17.2 reloc.exe

准确删除.reloc节区的步骤:

  • 整理.relocc节区头
  • 删除.reloc节区
  • 修改IMAGE_FILE_HEADER(文件头)
  • 修改IMAGE_OPTIONAL_HEADER(可选头)

下面我们分步实现这些步骤

17.2.1 删除.reloc节区头

之前都没下PEview直接看的书, 还是下一个自己看看会好一些.

Untitled

可以看到是从文件偏移270开始的, 大小是0x28, 最后一个开头是0x294, 大小是四个字节(这个要根据实际判断)

Untitled

我们用00来填充, 使用工具栏Edit → fill

Untitled

17.2.2 删除.reloc节区

由PEview(图在上面)可以找到.reloc节区的起始位置为C000, 在HexEditor中找到地址C000

Untitled

因为.reloc节位于文件的末尾, 所以要删除的话直接删除到底就行了.

Untitled

但是我们还要修改文件头, 避免其中记录了错误的信息: 比如里面的信息显示.reloc存在, 可在我们删除了.reloc后这就成为了错误的信息.

17.2.3 修改IMAGE_FILE_HEADER(文件头)

我们首先在PEview中找到文件头.

Untitled

  • 第一个小红框我们知道了文件头和需要修改的成员的位置, 方便我们去HED中去修改
  • 第二个小红框就是我们要修改的数据: 这个成员负责记录节区数, 因为我们已经删除了一个节区, 所以我们要在原值的基础上减一, 5 → 4

下面我们在EHD中修改

Untitled

修改为4

Untitled

17.2.4 修改IMAGE_OPTIONAL_HEADER(可选头)

删除掉了.reloc节区后, 整个映像也减小了相应的大小. 映像大小存储在可选头中, 我们去修改.

首先使用PEview查看

Untitled

知道了文件偏移在128, 大小为11000.

修改之前我们还需要知道我们减少的大小是多少个字节

我们在PEview中重新看回.reloc的节区头

Untitled

知道了减去的大小为E40, 但是我们还要考虑节区的粒度大小, 也就是可选头的成员, 节区映射后所占实际虚拟空间为可容纳节区的粒度最小整数倍, 我们使用PEview查看

Untitled

粒度为1000, 节区大小为E40, 所以我们要在SizeOfImage减去1000, 也就是10000

下面再HED中修改

Untitled

排列为小端排序, 修改后

Untitled

这次我们完成了修改, 程序修改后仍然能正常运行

文章作者: LamのCrow
文章链接: http://example.com/2022/03/26/逆向核心工程原理-第 cae84/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LamのCrow