首页 > 解决方案 > 如何在没有 ptrace 的情况下将代码注入进程

问题描述

有没有办法在没有 的情况下将代码注入到 ELF 二进制文件ptrace中,我无法使用它,因为我正在为其编写的程序正在使用 GDB,我不想在注入时停止该进程。我读到它是可能的,/proc/pid/mem但我找不到任何关于如何做到这一点的信息。我不想使用LD_PRELOAD任何一个,因为它需要重新启动程序并且我想在运行时执行它。

编辑:我不能使用 ptrace 因为该进程可能已经被 gdb 附加到

标签: clinuxcode-injection

解决方案


/proc/pid/mem表现得像进程内存的图像。要读取/写入进程的内存,只需 open /proc/pid/mem,然后lseek到所需的地址和read()/或write()您想要的任意多个字节。

例如,要使用 覆盖0x12345进程中地址处的字节0x90,您可以这样做

fd = open("/proc/XXX/mem", O_RDWR);
lseek(fd, 0x12345, SEEK_SET);
unsigned char new = 0x90;
write(fd, &new, 1);

在 32 位系统上,lseek64改为使用(并#define _LARGEFILE64_SOURCE在标准包含之前添加)。

请注意,访问/proc/XXX/mem需要与 ptrace 进程相同的权限。特别是,在某些系统上,您可能需要成为 root。


推荐阅读