2

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

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

4

3 回答 3

4

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

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

于 2011-12-17T15:53:33.747 回答
2

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

于 2011-12-17T16:19:57.330 回答
1

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

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

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

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