您如何将代码注入到没有ptrace的进程中

问题描述 投票:1回答:1

是否有一种方法可以在没有ptrace的情况下将代码注入到ELF二进制文件中,因为我正在编写此程序的程序正在使用GDB,所以我无法使用它,而我不想在它停止的同时停止该过程注射。我读到可以通过使用/proc/pid/mem来实现,但是我找不到关于如何执行此操作的任何信息。我也不想使用LD_PRELOAD,因为它需要重新启动程序,并且我想在运行时执行。

编辑:由于该进程可能已经由gdb附加,所以我不能使用ptrace

c linux code-injection
1个回答
0
投票

/proc/pid/mem的行为类似于进程内存的图像。要在某个地址写入一个字节,只需打开/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);

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

© www.soinside.com 2019 - 2024. All rights reserved.