在Linux中等效的VirtualProtectEx / CreateRemoteThread?

时间:2016-02-05 00:17:26

标签: linux windows dll code-injection

我想知道在Windows API中是否存在等效版本​​的Windows API,它允许进程与其他进程的空间进行交互,这意味着修改第二个进程的流程。 这是在一个正在运行的进程中注入一个.so而不会杀死它。

谢谢!

2 个答案:

答案 0 :(得分:4)

或者看看这里:CreateRemoteThread in Linux

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

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

  1. 持有线程
  2. 保存其背景
  3. 设置pthread_create的参数
  4. 将IP设置为pthread_create并执行
  5. 恢复旧的上下文。
  6. 我认为操纵内存访问权限还涉及从进程上下文调用mprotect。如上所述,最简单的方法 要做到这一点,不会使用ptrace,而是使用预编译的共享对象。

答案 1 :(得分:3)

在Linux上,有一种将代码注入程序的标准机制。您基本上定义了一个环境变量LD_PRELOAD,它指定在所有其他.so文件之前加载的.so库。 .so中的函数将替换函数的标准版本。无需手动修改函数的汇编代码即可将挂钩插入自己的代码,例如在Windows上。

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