【问题标题】:What happens if I delete the Relocation table address from PE Header?如果我从 PE Header 中删除重定位表地址会怎样?
【发布时间】:2011-12-18 00:19:57
【问题描述】:

我正在分析一些破解,其中一个将重定位表地址和大小更改为 0。破解者试图用这个来达到什么目的?

为了提供更多信息,破解的目的是加载另一个 DLL,将加载表中以前的 windows DLL 名称更改为自定义的名称。

【问题讨论】:

    标签: windows exe portable-executable ollydbg


    【解决方案1】:

    删除重定位表保证DLL不能被重定位。
    所以新代码(破解代码)不需要计算DLL中的任何地址,可以使用常量地址值。

    通常重定位表实际上并不是必需的,因此可以将其删除以减小模块的大小,或者用一些数据替换它。

    【讨论】:

    【解决方案2】:

    根据Portable Executable Specification,仅当一个库必须在另一个地址而不是其首选加载地址加载时才需要重定位表。因此,从目录中删除重定位表不会有任何影响,只要库是在其首选地址加载的(这实际上是在映像不支持 ASLR 时发生的)。

    【讨论】:

      【解决方案3】:

      要更改要加载的 DLL 的名称,通常只需更改导入表。其余的只是猜测工作,不知道相关二进制文件的细节。

      我认为重要的是要意识到并非所有“破解者”都知道他们到底在做什么,也许你正在分析一些根本不应该分析的东西。

      也就是说,您可能出于以下几个原因想要删除重定位:

      • 在可执行文件中,重定位数据是无用的(并且可以安全地删除),除非它们支持 ASLR。
      • 可能是破解添加了需要重定位条目的代码。破解者没有添加这些,而是​​完全删除了 reloc 表(可能还禁用了标题中的 ASLR)
      • 如果文件被打包,您通常在解压后的文件上运行 PE 重建程序以删除磁盘上无用的节数据并清理 PE 头。默认情况下,这些工具中的大多数都会从 PE 中剥离 reloc 数据。

      【讨论】:

      • “要更改要加载的 DLL 的名称,您通常只需更改导入表” - 不,导出可以转发到以前的 DLL。
      • @Abyx,我说的是“通常”,而不是“总是”。转发是一种选择,但比仅修改导入表中的 dll 名称更难实现。
      • @Abyx,哦,我明白你在说什么了。我并没有暗示改变加载的dll的名称,而是改变将要加载的dll(通过改变文件名)
      猜你喜欢
      • 2015-12-29
      • 2021-06-06
      • 2011-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多