【问题标题】:CreateRemoteThread in Linux在 Linux 中创建远程线程
【发布时间】:2012-05-19 01:48:17
【问题描述】:

我在 Windows 中使用CreateRemoteThread,想知道在 Linux 中是否可以实现相同的操作。在 Linux 中可以做到这一点吗?

【问题讨论】:

  • CreateRemoteThread 是一个已在 C++ 代码中使用的 WINAPI。

标签: linux pthreads posix ptrace


【解决方案1】:

`#include pthread.h

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);` 使用 -pthread 编译和链接。

详见 man pthread_create

【讨论】:

  • 这就是创建线程的方法,而不是创建线程并将其注入远程进程。
【解决方案2】:

在 Linux 上执行此操作的传统方法是创建一个包含您的代码的动态库 (.so),然后单独强制将您的库加载到正在运行的应用程序中。没有像 Windows 上的 CreateRemoteThread 那样的一站式商店。

以下是基本步骤:

  1. 创建一个 dylib/so,其中包含您希望在远程进程中执行的代码。
  2. 在程序集中编写一些非常简单的代码来加载指定的so文件(主要是从this link复制和粘贴,第1部分)。
  3. 将所述加载程序 ASM 作为二进制有效负载嵌入到第二个代码文件/应用程序的缓冲区中。在这里,您将使用ptrace 运行在步骤 2 中编写的二进制有效负载,这将触发目标应用程序在步骤 1 中创建的 .so 上调用 _dl_open(),其中包含您希望运行的实际代码。 (the same link 中的示例,第 2 部分。)

如果您需要您的代码在与主泵不同的线程中运行,那么您应该在第 1 步的代码中使用pthread_create

希望这能回答您的问题。是的,它比 Windows 更复杂。但它应该同样有效。此外,您可以将第 2 步和第 3 步中的全部代码重用于未来的远程代码注入项目。

【讨论】:

  • Create remote thread of windows 在已经运行的进程中创建线程。如果您在进程运行时修改可执行映像,该进程在终止之前仍会看到旧版本的 ELF。
  • 这个答案中的所有链接都死了,真是太可悲了。
猜你喜欢
  • 2016-03-25
  • 1970-01-01
  • 2012-01-22
  • 1970-01-01
  • 2016-02-03
  • 2019-02-10
  • 2018-03-10
  • 2018-05-14
  • 2016-02-17
相关资源
最近更新 更多