如果我从PE标头中删除重定位表地址会发生什么?

时间:2011-12-17 13:20:35

标签: windows exe portable-executable ollydbg

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

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

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

也就是说,您可能希望删除重定位,原因如下:

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

答案 2 :(得分:0)

根据Portable Executable Specification,只有在必须在另一个地址加载库而不是其首选加载地址时才需要重定位表。因此,只要将库加载到其首选地址(在图像不支持ASLR时就会发生这种情况),从目录中删除重定位表不会产生任何影响。