【问题标题】:PE header - New Section - How to calculate OEP address in memory?PE 头 - 新部分 - 如何计算内存中的 OEP 地址?
【发布时间】:2016-04-12 01:13:32
【问题描述】:

我刚刚成功地将一个部分和一些代码添加到 Windows 10 中的 pe 文件(在本例中为我的 proxy.exe)。我还将入口点更改为新部分的开头。当我运行修补的 .exe 时,我的存根被调用,我听到高频哔声(我先用哔声测试),到目前为止一切都很好。

但现在我想回到 OEP。但是如何计算我的 oep 在内存中的地址? 我想到了这个问题,我想出了一个?解决方案?:

计算除我新添加的部分之外的所有部分的 Rsize,然后我得到我的存根在内存中的地址(增量偏移量)并从中减去总部分大小。现在我应该在内存中 .text 部分的开头。之后,我添加了 oep 的偏移量,仅此而已。

这种方法行得通还是我犯了错误?还有其他可能更简单的方法吗?那么dll呢,整个过程有区别吗?

http://i.imgur.com/tpUH8x4.png

提前非常感谢! ;)

【问题讨论】:

  • 什么操作系统?我的理解是可执行文件的位置取决于操作系统(如果有的话)。
  • 哦,我忘了说抱歉 - Windows 10。*已编辑帖子

标签: c++ header stub portable-executable entry-point


【解决方案1】:

我猜你使用 OEP 意味着修复 IMAGE_OPTIONAL_HEADER。 AddressOfEntryPoint.

好的,如果我得到了正确的,那么你将使用 IP -> 减去预期 RVA(相关虚拟地址)的偏移量,以获得模块的加载地址并将其添加到 OEP 的 RVA 以获得真实的入口点的地址。 如果你做正确的数学,这应该工作。

我没有评论权限,但我认为它应该作为评论而不是回答,因为我没有完全尝试过这个东西,但它是一个提议,类似于编译器对二进制文件所做的事情。

OEP 是一个 RVA,在注射期间,您有 ORIG_RVA 和您已替换的 injection_RVA。在您的注入逻辑中添加

offset:push orig_rva.

然后对于偏移量,在 PE 的重定位表中添加一个重定位条目。装载机将完成其余的工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 2023-03-08
    相关资源
    最近更新 更多