如何在PE文件中获取重定位的基址?

时间:2015-09-21 04:24:15

标签: windows portable-executable

我正在尝试制作简单的PE Packer。我的PE查看器显示基地址0x40000000,但OllyDbg显示0x01900400或其他地址。

我猜这是地址重定位。

  1. 如何获得重新定位的地址?
  2. 什么使包装工简单顺序?

2 个答案:

答案 0 :(得分:0)

PE文件具有首选基址。如果您正在编写PE查看器,那么听起来它只会分析PE文件。这是一个静态分析,因此您只能获得首选的基址,即0x40000000

OllyDbg是一个调试器,与PE Viewer完全不同。调试器在运行时执行动态分析。在运行时,PE文件可能已加载到不同的地址,因为已使用首选地址。

所以,在我看来,你的PE Viewer程序会做它应该做的事情 - 除非你想编写一个调试器。

答案 1 :(得分:0)

Thomas已经解释了基地址只是首选地址,它不能保证您仅在该地址上加载文件。 但是,在大多数情况下,它应该是400000。如果您使用的是Windows XP,则大多数情况下可以满足此条件。但是从Windows Vista和Windows 7开始,引入了一个称为ASLR的新概念。 在调试器中加载文件时看到其他地址,这是由于ASLR(地址空间随机化)引起的。

什么是ASLR? 地址空间布局随机化基于处理器的时间戳计数器计算内存中PE文件的地址。 公式=([SHR4(Timestamp Counter)mod 254] +1)* 64KB **需要确认公式

为什么选择ASLR? ASL的主要座右铭是阻止恶意软件编写者使用各种内存结构缺陷,例如缓冲区溢出等。随机排列的内存结构和模块使他们难以猜测内存地址(他们希望将恶意代码放在此处)。 / p>

现在,回到您的问题:如何获取搬迁地址: 如果可以找到CPU时间戳(我怀疑这是可能的),则可以计算可执行文件的基本位置。How to bypass ASLR

否则,您将无法从PE文件结构中获取ASLR之后的地址(对于Windows Vista及更高版本)。

此外,您可以参考以下内容: https://security.stackexchange.com/questions/18556/how-do-aslr-and-dep-work