加载的 dll 中的偏移量相对于彼此是否始终相同?

逆向工程 视窗 dll注入
2021-06-27 20:26:51

如果我在 2 个不同的进程中加载​​一个 dll,一个进程中的偏移量计算是否适用于另一个进程?

一旦注入远程进程,我目前正在尝试修补 dll 的导入表。我在想,如果我能LoadLibraryGetProcAddress在喷射过程中,简单的数学基于该DLL加载地址的目标过程中的预期位置。

1个回答

是的。可执行重定位,无论是出于优化还是安全目的,都只会重定位整个映像(可执行、共享对象)。

出于这个原因,例如要绕过 ASLR,所选共享对象中的任何单个地址就足够了。当然,鉴于您知道共享对象的精确版本和构建。然而,了解特定的构建本身可能是一个问题。

在共享对象级别(而不是函数级别)进行重定位的原因是共享对象通常具有许多内部相关引用。这些是在单个共享对象中相对(而不是绝对)寻址的引用。

为了在较低级别重新定位,加载程序需要进行更多的重新定位修复。

此外,这更多是历史原因而不是技术原因,重定位旨在解决在多个共享对象之间共享地址空间的问题。除了完全更改模块的位置外,无需做更多的事情。相同的基本属性后来用于启用 ASLR。