【问题标题】:CreateRemoteThread, error 5创建远程线程,错误 5
【发布时间】:2016-03-25 22:28:20
【问题描述】:

我正在尝试从我的 32 位进程向 64 位 Windows 进程注入一个存根,然后在 x64 进程中远程启动一个线程。这会导致一些问题,因为无论我在调用OpenProcess 时使用哪个标志,winapi 的CreateRemoteThread 都会抛出错误代码5,它转换为ERROR_ACCESS_DENIED。我读到这是因为 Windows 不允许“跨平台”注入,但我认为这不是问题,因为代码注入良好。

我在调用CreateRemoteThread() 后立即使用GetLastError(),它显示错误代码5。

我正在为OpenProcess 使用这组标志,但没有成功:

PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE

还有PROCESS_ALL_ACCESS

有人知道是什么导致了这个错误吗?

【问题讨论】:

    标签: c++ windows winapi code-injection


    【解决方案1】:

    不支持从 32 位进程调用CreateRemoteThread,其中目标进程是 64 位。您需要从 64 位进程调用 CreateRemoteThread

    【讨论】:

    • 只是为了确定;有没有办法解决这个问题?
    • 另一种方法是使用 64 位进程!
    • 嗯,谢谢,虽然这不是一个选项,因为我必须重写整个应用程序
    • @PeterJensen:您不必重写您的应用程序。让您的应用程序启动一个 64 位代理进程,该进程创建远程线程并从那里开始工作。
    • @IInspectable 感谢您的评论。这听起来是一个很好的解决方案!我已经调查过了,似乎没有太多信息 - 你知道我在哪里可以找到一些例子吗?提前致谢!
    【解决方案2】:

    做不到。不能在 64 位进程中运行 32 位代码,也不能在 32 位进程中运行 64 位代码。

    解决方案是将您的注入代码重建为 64 位。

    这是设计使然。处理器在 32 位和 64 位模式下的工作方式完全不同,您不能轻易地从一种模式切换到另一种模式然后再切换回来。有几件事有很大不同:

    • Push 和 Pop 指令在 64 位模式下始终为 64 位。所以 32 位代码将推送 64 位值,因此 void foo(int x, int y) 将得到一个 64 位 x 覆盖 xy。这会影响堆栈上的变量以及函数内的所有其他内容的偏移量。
    • 实际调用约定不同 - 32 位模式使用不同且更少的寄存器将参数传递给函数(如果任何参数由寄存器传递 - 它是可选的),而 64 位模式总是使用寄存器和更多的寄存器。因此,来自 32 位模式的调用会将数据放在 64 位模式的错误位置,等等。
    • 一些常见指令的指令编码是不同的——主要是 0x40-0x4f 是 PUSH/POP 所有寄存器的单字节指令,其中该范围是 64 位模式下的 REX(寄存器扩展)前缀。 64 位模式使用双字节编码 [引入该编码是为了允许更灵活的 PUSH/POP 指令集,在第二个字节中描述了多种寻址模式]

    还有很多其他的不同之处,但这些应该足以表明“它不是那样工作的”。

    【讨论】:

    • @Balu 你试过那个解决方案吗?我看到它涉及 ASM。我想知道这是否是解决问题的可靠方法?
    • @PeterJensen 是的,它涉及一些汇编编码来更改代码段寄存器。它会工作,我用它在 32 位 wow64 进程中注入 64 位 dll。
    • 但是您必须随后说服 REMOTE 进程执行这些操作。我想说我的答案是:你不能这样做。是否可以让处理器在 64 位进程中运行 32 位代码,是的。但它不是微不足道的,也不是解决这个问题的正确方法。只需将注入器构建为 64 位。
    • Asker 没有尝试在 64 位进程中执行 32 位代码。 Asker 试图在 64 位进程中启动一个新线程,但从 32 位进程中调用 CreateRemoteThread。这个答案是准确的,但答案是不同的问题。
    猜你喜欢
    • 2012-05-19
    • 2017-03-17
    • 2012-01-22
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    相关资源
    最近更新 更多