Linux 中 VirtualProtectEx/CreateRemoteThread 的等价物?

Equivalent of VirtualProtectEx/CreateRemoteThread in Linux?

我想知道 windows API 在库中或作为系统调用是否有等效版本,允许进程与其他进程交互' space,这意味着修改第二个流程的流程。 这是在 运行 进程中注入一个 .so 而不会杀死它。

谢谢!

在 Linux 上,有一种将代码注入程序的标准机制。您基本上定义了一个环境变量 LD_PRELOAD,它指定一个在所有其他 .so 文件之前加载的 .so 库。 .so 中的函数将替换函数的标准版本。不需要像windows.

那样手动修改functions的汇编代码来给自己的代码插入hooks

这是一个很好的教程:https://rafalcieslak.wordpress.com/2013/04/02/dynamic-linker-tricks-using-ld_preload-to-cheat-inject-features-and-investigate-programs/

也许看看这里:CreateRemoteThread in Linux

我不知道还有比那里描述的更简单的方法。在 Windows 你有这个 喜欢 API 喜欢 VirtualProtectEx。在 Linux 你会写一个 .so ,例如执行 pthread_create 在 __attribute__((constructor)) 函数中。然后,您将通过 LD_PRELOAD 机制加载该 .so。

CreateRemoteThread 的下一个最好的事情是操纵主线程 使用 ptrace API 的过程。但这将涉及

  1. 保持线程
  2. 保存上下文
  3. 正在为 pthread_create
  4. 设置参数
  5. 设置IP为pthread_create并执行
  6. 恢复旧上下文。

我认为操纵内存访问权限还涉及从进程上下文调用 mprotect。正如上面已经提到的,最简单的方法 这样做不会使用 ptrace,而是使用预编译的共享对象。