我没有使用过提到的InjectSo,但它是一个值得注意的信息。 如果您正在寻找替代这里有一个简单的方法来注入代码:
#include <stdio.h>
#include <sys/types.h>
#include <pwd.h>
int main()
{
struct passwd* pswd = getpwuid(1000);
if(pswd)
printf("%s\n", pswd->pw_name);
return 0;
}
gcc test.c -o test
#define _GNU_SOURCE
#include <dlfcn.h>
#include <sys/types.h>
#include <pwd.h>
#include <stdlib.h>
#include <stdio.h>
static char* hocus = "hocus pocus";
struct passwd *getpwuid(uid_t uid)
{
static struct passwd *(*orig_getpwuid)(uid_t uid);
if(!orig_getpwuid) {
orig_getpwuid = (struct passwd* (*)(uid_t))dlsym(RTLD_NEXT, "getpwuid");
}
struct passwd* original_passwd = (*orig_getpwuid)(uid);
if(original_passwd) {
original_passwd->pw_name = hocus;
}
// your code here
return original_passwd;
}
gcc inject.c -shared -o libinject.so
与LD_LIBRARY_PATH=. LD_PRELOAD=libinject.so ./test
运行应该说hocus pocus
。您可以覆盖任意libc
函数,如printf
,snprintf
- 只需找到该模块使用的是什么。
在“您的代码在这里”你可以开始任意线程,监督者等
是的,他们的测试工作对我来说。谢谢 ! – 2008-12-18 16:25:50