启用 ASLR 的 PE 二进制文件的重定位部分缺少地址

逆向工程 二元分析 二进制格式
2021-06-19 01:36:44

我正在分析二进制文件的重定位部分中的条目。特别想知道跳转的所有目标是否在重定位部分都有相应的条目。屏幕截图在左侧显示了我正在分析的二进制文件的重定位部分条目,在右侧显示了仅显示跳转指令的二进制文件的汇编代码。

二进制的重定位部分和反汇编

据我了解,地址 0x40be04 (jmp *0x4f422c) 处的汇编代码中的第一条指令应该在重定位部分有一个条目。但是,重定位部分的最后一个条目是地址 0x401fee。

为什么有些地址在重定位部分没有条目?我在分析中误解了什么吗?

PS:截图显示了在 cygwin 上使用 objdump 反汇编的二进制文件。重定位部分条目是使用 PE-Parser ( https://github.com/trailofbits/pe-parse ) 生成的

1个回答

这里有几种可能性。

一种可能性是重定位表已被截断,因此您只能看到重定位项目的第一页(该表是基于每页的项目数组)。

另一种可能性是该文件不支持 ASLR(可能是故意的,或者假定它不存在),因此不会解析重定位表。这将允许 0x40be04 处的地址即使在没有重定位项的情况下也能执行,因为图像永远不会被加载到另一个地址。

此外,反汇编本身看起来很奇怪,好像文件被混淆了。如果是这样,那么很可能混淆器的作者没有考虑到ASLR,因此没有为相关跳转添加重定位项。