在 x64 解决方法上更改 Rcx

问题描述

我一直在研究 Go 中流程挖空的一个实现,主要遵循 this tutorial

除了我在 Go 中编写我的版本这一事实之外,我们的代码也有所不同,因为本教程适用于 32 位架构,而我试图在 64 位上运行我的。当然,当我结束时,我意识到我不能像教程建议的那样更改我的受害者线程上下文,因为我需要使用 AddressOfEntryPoint 使用正确的 Setthreadcontext 更新 Rcx 寄存器,这我不能这样做,因为 Rcx 是不稳定的(而在 x86 Eax 中可以更新)。

所以此时我想知道是否有任何我找不到的已知解决方法

我想做的一件事是在我进行任何重定位调整或复制任何注入的 PE 之前更新受害者 PEB 中的 ImageBaseAddress。由于我的目标进程的 AddressOfEntryPoint 高于我想要注入的可执行文件之一,我可以增加 ImageBaseAddress 直到两个入口点匹配。然后我会将这个增量应用于我当然遇到的所有其他偏移量。谁能想到为什么这行不通?

类似的事情可能是在 PE 标头之后填充内存,直到 PE 部分被推得足够远以使两个 ImageBaseAddress 匹配。当然,再次使用增量更正所需的偏移量。

当然,我也可以在 32 位虚拟机上编译并使用它(我实际上已经有了 32 位代码),但我很好奇这个问题实际上是如何解决的。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)