我沒有使用過提到的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